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