Замена одного символа на два - 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

Код к задаче: «Замена одного символа на два - Assembler»

textual
    std
rep movsb

9   голосов, оценка 3.556 из 5


СОХРАНИТЬ ССЫЛКУ