Замена одного символа на два - Assembler
Формулировка задачи:
Нужно заменить в строке все символы # на &&. Нужно применять цепочечные команды. После первой замены исходная строка перестает копироваться в результирующую. При исходной строке 123#12345 в результат копируется только 123&&.
data segment para public "data" source db 127 dup('$') marker db 127 dup('#') result db 256 dup('$') tmp_cx db ? alt_si db 0 first db 1 iter db 0 data ends code segment para public "code" start: assume ds:data,cs:code,es:data mov ax,data mov ds,ax mov es,ax cld prog: mov si,0 mov cx,127 inp: mov ah, 01h int 21h cmp al,0dh je inp_end mov source[si], al inc si loop inp inp_end: xor bx,bx mov bx,0 lea si,source lea di,marker xor cx,cx mov cx,127 n1: repne cmps source,marker cmp cx,0 je nxt mov tmp_cx,cl xor cx,cx mov cl,126 sub cl,tmp_cx lp: mov al,source[bx] add bl,iter mov result[bx],al sub bl,iter inc bx loop lp mov result[bx],'&' inc bx mov result[bx],'&' inc iter mov cl,tmp_cx inc si inc di loop n1 nxt: mov si,0 mov cx,255 outp: cmp result[si],'$' ;je stp mov ah,02h mov dl, result[si] int 21h inc si loop outp stp: mov AX,4c00h int 21h code ends end start
Решение задачи: «Замена одного символа на два»
textual
Листинг программы
std rep movsb
Объяснение кода листинга программы
- Указатель на область памяти, содержащую символы, которые нужно заменить, хранится в переменной
std
. - Команда
rep movsb
используется для повторяющегося копирования байтов из одной области памяти в другую.rep
указывает, что операция должна быть повторена несколько раз.movsb
копирует один байт из исходной области памяти в указанное место.
- В результате выполнения этой команды, символы, хранящиеся в области памяти, на которую указывает
std
, будут заменены на другие символы или копии самих себя. Точное значение этих символов зависит от того, как именно сконфигурированы перед использованием команды.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д