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

我的 EMULATOR(emu8086) 的控制台最终打印了一个空白屏幕而不是 Reversed 字符串。我哪里做错了?

4

1 回答 1

3

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

然后你得到了CMP MSG1[DI],00H这没有任何意义。我怀疑你想检查 if 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
于 2016-04-21T06:08:04.240 回答