Помощь - Поиск - Пользователи - Календарь
Полная версия: Робота со строками
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
AlonZo
Задача такая: дана строка из 30 символов. Нужно сжать строку, удалив пробелы, которые стоят подряд 2 или больше раз(в итоге оставить 1 пробел между символами). Вот что делал(masm32):
.686
.model flat
.data
.code
_str db 'ADC DEFGH IJKLM NIKLMN T'
_start:
mov edi,offset _str
mov ecx,100 ;не уверен насчет счетчика, поставил произвольно
mov ax,2020h ;для поиска рядомстоящих двух пробелов
cld ;направление вверх
m1:
REPNE scasw ;находим нужные пробелы
jcxz _exit ;если нет, выход
mov esi,edi ;переносим строку после пробелов (?)
dec edi
rep movsb ;для удаления пробела и сдвига строки (????) не работает
loop m1
_exit:
ret
end _start


Вобщем вопрос сколько занести в счетчик? Как мне сдвинуть строку вместо пробела? Что не так в том, что я написал?
AlonZo
Так никто не поможет? Хотя б идею тогда подскажите, а там может и самому получиться...
volvo
Цитата
Что не так в том, что я написал?
Что не так? Вот это, например:

_str db 'ADC  DEFGH  IJKLM  NIKLMN   T' ; <--- раз
...
mov ax,2020h ; <--- два ...
...
REPNE scasw ; <--- три ...

(хотя 2 и 3 вполне можно объединить...) А дело, собственно, в том, что никто и не обещал, что для данных, описанных с префиксом DB (а строка у тебя описана именно с префиксом DB - последовательность байтов, все-таки) будет работать scasW (поиск по словам). Чтобы оно работало, надо либо описать данные через DW (для строки - неудобно), либо искать scasB один пробел, и потом проверять следующий символ на второй пробел...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.