8086Assembly - 无法反转字符串

时间:2016-04-21 04:47:58

标签: assembly x86-16 microprocessors emu8086

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)的控制台最终打印出一个空白屏幕,而不是反转的字符串。我哪里出错了?

1 个答案:

答案 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