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

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

  1. Указатель на область памяти, содержащую символы, которые нужно заменить, хранится в переменной std.
  2. Команда rep movsb используется для повторяющегося копирования байтов из одной области памяти в другую.
    • rep указывает, что операция должна быть повторена несколько раз.
    • movsb копирует один байт из исходной области памяти в указанное место.
  3. В результате выполнения этой команды, символы, хранящиеся в области памяти, на которую указывает std, будут заменены на другие символы или копии самих себя. Точное значение этих символов зависит от того, как именно сконфигурированы перед использованием команды.

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

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