我编写了一个 ASM 程序来尝试自学 ASM。它似乎在 emu8086 中不起作用,我完全不知道为什么。
org 100h
mov dx, 05
cld
while:
int 21h
cmp dx, 1
jz outt
dec dx
mov ah, 09h
int 21h
jmp while
outt:
mov ah, 4ch
mov al, 00
int 21h
ret
我编写了一个 ASM 程序来尝试自学 ASM。它似乎在 emu8086 中不起作用,我完全不知道为什么。
org 100h
mov dx, 05
cld
while:
int 21h
cmp dx, 1
jz outt
dec dx
mov ah, 09h
int 21h
jmp while
outt:
mov ah, 4ch
mov al, 00
int 21h
ret
Assembler 的荒凉世界不适合没有向导的外行冒险......
您要做的第一件事是设置DX
为 5。为什么要这样做是未知的,因为您还没有评论您的操作。
然后你用 . 清除方向标志CLD
。非常明智 - 确保字符串指令中寄存器的自动调整沿逻辑 UP 方向进行。
你的下一步行动令人费解。当您执行时,INT 21H
您是在要求操作系统做某事。如果您参考您的图集,您会发现要执行的操作取决于AH
. 目前,这可能是 0,因为您没有在程序中明确设置它。因此,如果您访问拉尔夫之书第 21H 章的第 00 节,您可能会发现为什么您的程序似乎在没有实际执行任何操作的情况下就终止了。
如果您确实像其他人建议的那样回避该特定指令,您会注意到您的下一步是
DX
1DX
1AH
现在我们有了要求操作系统再次做某事的神奇咒语——但是什么?你的地图集还有吗?也许第 9 节可能会有所帮助。请注意,DX
此处的值可能与此密切相关。
完成后,重复最后几个步骤直到DX
=1,此时我们跳转到OUTT
。
我们再次加载AH
可能是一个神奇的值 - 而且AL
,也是。想要查看地图集以了解它应该做什么?
或尝试删除第一个 int 21h
如果这不起作用,请尝试将 44 放入 dx