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