Donc, dans ce programme, j'ai besoin d'entrer 2 chaînes. Un pour sélectionner le mot à remplacer (sur le message par défaut défini dans info1) et un autre pour le nouveau mot. Cela dit, quand nous arrivons au remplacement réel, je suis coincé dans une boucle infinie. Est-ce que quelqu'un peut-il me montrer la bonne direction? :)Assemblage - Remplacer un mot
#make_COM#
ORG 100H
.Data
info1 db 'original message:',13,10,'$'
space db 13,10,'$'
msgorig db 'a ana e anita em anadia',13,10,'$'
info2 db 'input the word to be replaced',13,10,'$'
info3 db 'input the replacing word',13,10,'$'
fint db 60 dup(?)
fsubs db 60 dup(?)
.Code
mov ah,9
lea dx, info1
int 21h
mov ah,9
lea dx, space
int 21h
mov ah,9
lea dx, msgorig
int 21h
mov ah,9
lea dx, space
int 21h
mov ah,9
lea dx, info2
int 21h
mov ah,9
lea dx, space
int 21h
lea si,fsubs
subs1:
mov ah,1
int 21h
cmp al, 13
Jz subs2
mov [si], al
inc si
jmp subs1
subs2:
mov al, '$'
mov [si],al
mov ah,9
lea dx, space
int 21h
show1:
mov ah,9
lea dx, space
int 21h
mov ah,9
lea dx, info2
int 21h
lea si,fint
troca1:
mov ah,1
int 21h
cmp al, 13
Jz troca2
mov [si], al
inc si
jmp troca1
troca2:
mov ah,9
lea dx, space
int 21h
mov al, '$'
mov [si],al
tcp:
lea si,msgorig
mov al,[si]
lea si,fsubs ; al e a mensagem origem
mov bl,[si] ;(ana) bl e a string que vai ser substituida
lea si,fint ;(lumiar) dl e a string que vai substituir
mov dl,[si]
tcp1:
cmp al,'$' ; comp se msg org xegou ao fim
jz fim
cmp bl,al ; comp se ana e ana
jz tcp2 ; saltar para tcp2 para substituir
jnz tcp3 ; saltar para tcp3 para inc msg org
tcp2:
inc dl
inc al
cmp al, bl ;cmp mesg org com ana
jnz tcp1 ; se ja nao e salta para tras
inc dl
inc al
mov al,dl ; substitui al[0] por dl[0]
jmp tcp2 ; return again!!!\(O_O)/ Praise the sun
tcp3:
inc al ; inc a pocisao da msg orig
jmp tcp1 ; salta para tras para cmp
fim:
mov ah,4CH
int 21h