Напечатать текст, заменив 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

Объяснение кода листинга программы

  1. Объявление локальных переменных
  2. Определение модели памяти как small
  3. Выделение стека размером в 100 байт
  4. Объявление данных:
    • Переменная StopChar устанавливается как символ *
    • Переменная String описывается как массив из 256 элементов с начальными значениями неопределенности
    • Переменные msgInpString, msgResString и CrLf описывают текстовые строки с сообщениями и символами новой строки
  5. Вступление в секцию кода
  6. Процедура main начинается
    • Содержимое регистра ax копируется в регистр ds
    • Реализуется вывод сообщения Введите строку, признак окончания строки - символ*`:``
    • Передача сегмента данных в регистр es, адрес переменной String загружается в регистр di, устанавливается направление увеличения
    • Запускается цикл ввода строк, символы записываются в String, пока не встретится символ *
    • Добавление признака конца строки $ в String
    • Вывод CrLf символов
    • Вывод сообщения Итоговая строка:
    • Цикл вывода строк String, при обнаружении символов ph они заменяются на f
    • Вывод символов CrLf
    • Завершение программы
  7. Завершение main процедуры
  8. Завершение программы Код выполняет ввод строки, заменяет указанный символ в строке и выводит итоговую строку.

Оцени полезность:

8   голосов , оценка 3.625 из 5
Похожие ответы