8086Assembly - 无法反转字符串

8086Assembly - Unable to Reverse String

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

当您退出 LOOPER 并转到 COMPARE 时,DI 包含 '$' 终止符的索引,然后将其放在 [= 的开头16=]。您应该在进入 COMPARE 循环之前递减 DI,以便它包含 'K'.

的索引

那么您得到的 CMP MSG1[DI],00H 没有任何意义。我怀疑您想检查是否 DI == 0。如果是这样,这整个部分:

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

可以替换为:

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