Сжать текст, оставив между словами по одному пробелу - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д