Заменить в строке встречающийся символ "d" на символ "s" - Assembler
Формулировка задачи:
Ввести строку символьных данных, задавая буфер равный 40 байт.
Заменить в этой строке встречающийся символ "d" на символ "s",
Выдать полученную строку символов в первую строку экрана,
начиная с 10 позиции.
Заранее благодарю.
Решение задачи: «Заменить в строке встречающийся символ "d" на символ "s"»
textual
Листинг программы
- ; fasm code........
- org 100h
- push start
- db 0c3h
- mes0 db 13,10,'String..: $'
- buff db 40 dup(0)
- tara db 08 dup(0)
- outp = 900h
- start: push ds 0
- pop ds
- mov di,tara
- mov ax,word[ds:64]
- stosw
- mov ax,word[ds:66]
- stosw
- mov ax,word[ds:132]
- stosw
- mov ax,word[ds:134]
- stosw
- pop ds
- mov ax,3
- pushf
- call dword[tara]
- mov ax,outp
- mov dx,mes0
- pushf
- call dword[tara+4]
- xor ax,ax
- imul cx,0
- mov di,buff
- inc ah
- save: pushf
- call dword[tara+4]
- cmp al,0dh
- je next
- cmp al,'d'
- jne fuck
- mov al,'s'
- fuck: stosb
- inc cx
- jmp save
- next: push 0b800h
- pop es
- mov di,20
- mov si,buff
- mov ah,0eh
- @@1: lodsb
- stosw
- loop @@1
- jmp $$+3
Объяснение кода листинга программы
В этом коде выполняется замена всех встречных символов d
на символ s
в строке, которая начинается с 13-го столбца (после $
) и продолжается до конца экрана (до 20-го столбца). Вот список действий:
- Код начинается с размещения сегментного регистра на 100h.
- Строка
String..: $
размещается в буфере с именемmes0
. - Буфер с именем
buff
инициализируется 40-ю нулями. - Буфер с именем
tara
инициализируется 8-ю нулями. - Сегментный регистр изменения на 900h для вывода на экран.
- Начинается цикл, который проходит через каждый символ в строке.
- Если текущий символ не равен
d
, он копируется в буферbuff
. - Если текущий символ равен
d
, он заменяется наs
в буфереbuff
. - После завершения цикла, буфер
buff
выводится на экран. - Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д