2016-04-21 1 views
0
JMP START 
MSG1 DB "ISSK$" 
MSG2 DB 80 DUP("$") 
START: 

MOV SI,00H 
MOV DI,00H 

LOOPER:   
CMP MSG1[DI],"$" 
JE COMPARE 
INC DI 
JMP LOOPER ;AFTER THIS POINT DI=STRINGLENGTH-1 


COMPARE: 
MOV AL,MSG1[DI] 
MOV MSG2[SI],AL 
INC SI 
DEC DI 
CMP MSG1[DI],00H 
JE OUTER 
JMP COMPARE 

OUTER: 
MOV DX,OFFSET MSG2 
MOV AH,09H 
INT 21H 
HLT 

La console de mon EMULATOR (emu8086) imprime finalement un écran vide au lieu de la chaîne inversée. Où est-ce que je me suis trompé?8086Assemblage - Impossible d'inverser la chaîne

Répondre

3

Lorsque vous quittez LOOPER et allez à COMPARE, DI contient l'index du caractère de terminaison '$' que vous placez ensuite au début de MSG2. Vous devez décrémenter DI avant d'entrer dans la boucle COMPARE afin qu'elle contienne l'index 'K'.

Ensuite, vous avez CMP MSG1[DI],00H ce qui n'a aucun sens. Je soupçonne que vous vouliez vérifier si DI == 0. Si oui, toute cette partie:

DEC DI 
CMP MSG1[DI],00H 
JE OUTER 
JMP COMPARE 

pourrait être remplacé par:

DEC DI 
JNZ COMPARE ; continue the COMPARE loop as long as DI != 0