Сжать текст, оставив между словами по одному пробелу - Assembler
Формулировка задачи:
Дан текст 30 символов. Сжать текст, оставив между словами по одному пробелу.
Решение задачи: «Сжать текст, оставив между словами по одному пробелу»
textual
Листинг программы
; fasm-code.. ; Удаляет лишние пробелы ;-------------------------- org 100h jmp start szSrc db 'We have a string, who haves a maaany spaces',13,10,'$' len = ($ - szSrc)-3 start: mov ah,9 ; исходная строка mov dx,szSrc int 21h ;=======================================================// mov cx,len ; длина строки mov si,szSrc ; адрес для чтения mov di,si ; ..и записи. xor ax,ax ; АХ := 0 cycle: ; lodsb ; считать символ cmp al,' ' ; пробел? jne miss ; нет - пропускаем cmp ax,' ' ; да - тест с предыдущим je next ; 2 пробела - пропускаем miss: ; stosb ; перезапись символа next: ; xchg ah,al ; запомним текущий символ loop cycle ; mov al,'$' ; вставляем маркер конца стоки stosb ; ;=======================================================// mov ah,9 ; изменённая строка mov dx,szSrc ; int 21h ; xor ax,ax ; int 16h ; int 20h ;
Объяснение кода листинга программы
- Создается переменная 'szSrc' для хранения строки, содержащая
We have a string, who haves a maaany spaces
, а также символы возврата каретки и перевода строки '$'. - Создается переменная 'len' с длиной строки, вычисленной как разница между текущим адресом и адресом 'szSrc', за вычетом 3 байтов (размер символов возврата каретки и перевода строки).
- Устанавливается точка входа 'start'.
- Вызывается системный вызов DOS для вывода исходной строки на экран.
- Устанавливаются регистры и переменные для подготовки к обработке строки.
- Цикл начинается, в котором каждый символ строки проверяется на пробел и оставляется только один пробел между словами.
- Вставляется символ конца строки '$' в конце обработанной строки.
- Вызывается системный вызов DOS для вывода измененной строки на экран.
- Программа завершается с вызовом прерывания 20h DOS.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д