Напечатать текст, заменив ph на букву f - Assembler
Формулировка задачи:
Может ли кто написать код до такого задания. Язык программирования Assembler. Заранее спасибо.
Составить программу, которая вводит произвольный текст, который заканчивается символом "*". Напечатать этот текст, заменив ph на букву f.
Решение задачи: «Напечатать текст, заменив ph на букву f»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- StopChar db '*' ;символ, ограничитель строки
- String db 256 dup(?)
- msgInpString db 'Введите строку, признак окончания строки - символ "*":', 0Dh, 0Ah, '$'
- msgResString db 'Итоговая строка:', 0Dh, 0Ah, '$'
- CrLf db 0Dh, 0Ah, '$'
- .code
- main proc
- mov ax, @data
- mov ds, ax
- mov ah, 09h
- lea dx, msgInpString
- int 21h
- push ds
- pop es
- lea di, String
- cld
- @@InpWhile:
- mov ah, 01h
- int 21h
- stosb
- cmp al, StopChar
- jne @@InpWhile
- mov [di], byte ptr '$'
- mov ah, 09h
- lea dx, CrLf
- int 21h
- ;вывод результатов
- ;Результирующая строка
- mov ah, 09h
- lea dx, msgResString
- int 21h
- lea si, String
- @@OutWhile:
- lodsb
- cmp al, StopChar ;если это признак конца строки - выйти
- je @@OutBreak
- cmp al, 'p' ;если это символ 'p' - проверить следующий символ
- jne @@ShowChar
- cmp [si], byte ptr 'h'
- jne @@ShowChar
- mov al, 'f' ;если это сочетание 'ph' - заменить на 'f'
- inc si
- @@ShowChar:
- mov ah, 02h
- mov dl, al
- int 21h
- jmp @@OutWhile
- @@OutBreak:
- mov ah, 09h
- lea dx, CrLf
- int 21h
- ;завершение программы
- mov ax, 4C00h
- int 21h
- main endp
- end main
Объяснение кода листинга программы
- Объявление локальных переменных
- Определение модели памяти как
small
- Выделение стека размером в 100 байт
- Объявление данных:
- Переменная
StopChar
устанавливается как символ*
- Переменная
String
описывается как массив из 256 элементов с начальными значениями неопределенности - Переменные
msgInpString
,msgResString
иCrLf
описывают текстовые строки с сообщениями и символами новой строки
- Переменная
- Вступление в секцию кода
- Процедура
main
начинается- Содержимое регистра
ax
копируется в регистрds
- Реализуется вывод сообщения
Введите строку, признак окончания строки - символ
*`:`` - Передача сегмента данных в регистр
es
, адрес переменнойString
загружается в регистрdi
, устанавливается направление увеличения - Запускается цикл ввода строк, символы записываются в
String
, пока не встретится символ*
- Добавление признака конца строки
$
вString
- Вывод
CrLf
символов - Вывод сообщения
Итоговая строка:
- Цикл вывода строк
String
, при обнаружении символовph
они заменяются наf
- Вывод символов
CrLf
- Завершение программы
- Содержимое регистра
- Завершение
main
процедуры - Завершение программы Код выполняет ввод строки, заменяет указанный символ в строке и выводит итоговую строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д