【发布时间】:2017-05-12 18:44:07
【问题描述】:
这是一个 8086 以相反顺序打印字符串的示例汇编语言代码
.model small
.STACK 100H
.DATA
MSG DB 'HELLO!$'
.CODE
MOV CL,0
AGAIN:
MOV DL,DS:[SI]
; MOV AH,2
; INT 21H
INC CL
INC SI
CMP DL,'$'
JNE AGAIN
DEC SI
DEC CL
REV:
DEC SI
MOV DL,DS:[SI]
MOV AH,2
INT 21H
DEC CL
CMP CL,0
JNE REV
.EXIT
END
它的输出是 !OLLEH 。但是如果我写
MOV AH,2
INT 21H
在 MOV DL,DS:[SI] 之下的 AGAIN 级别。我认为答案应该是 HELLO!!OLLEH 但它显示 '=' 字符和以前的输出。为什么会这样?
【问题讨论】:
-
代码可以正常工作是一个巧合,因为你从来不用初始化
SI。 -
emu8086 内置了调试器。您应该能够检查,读取了哪些内存,在每个循环中读取了哪些内容等...可以肯定地说,新的
int 21h做了它应该做的,输出DLchar...周围的事情可能不是你所期望的。