【问题标题】:DOS function 1 assembly(8086) issueDOS 函数 1 程序集(8086)问题
【发布时间】:2017-03-08 17:31:19
【问题描述】:
据我所知,dos 函数 1 等待输入字符并将其放入寄存器 AL。
mov al,1h
int 21h
这对我不起作用。它不等待输入,只是将随机 ascii 插入到 AL 中。
如果我用 AH 修改 AL,它会正常工作。
mov ah,1h
这是为什么呢?
【问题讨论】:
-
这就是你的 DOS 供应商实现int 21h 服务的方式,服务号应该是AH,而不是AL。检查您的 DOS 服务documentation,无论您使用哪个。如果它显示“AL=1”,则用更正确的替换它。
标签:
assembly
intel
dos
x86-16
【解决方案1】:
根据Ralf Brown's excellent interrupt list,调用时函数必须在ah,在这种情况下al只是用来保存返回值:
DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
AH = 01h
Return:
AL = character read
所以你的代码应该是:
mov ah,01h
int 21h
;; al should now contain the character.
通过在仅设置al 之后调用int 21,您基本上是在使用之前恰好在ah 中的任何值。这不太可能结束:-)