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
我的EMULATOR(emu8086)的控制台最终打印出一个空白屏幕,而不是反转的字符串。我哪里出错了?
答案 0 :(得分:3)
当您退出LOOPER
并转到COMPARE
时,DI
包含'$'
终结符字符的索引,然后您将其放在{{1}的开头}。在进入MSG2
循环之前,您应该递减DI
,使其包含COMPARE
的索引。
然后你有'K'
没有任何意义。我怀疑你想检查一下CMP MSG1[DI],00H
。如果是这样,整个部分:
DI == 0
可以替换为:
DEC DI
CMP MSG1[DI],00H
JE OUTER
JMP COMPARE