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