2017-03-08 77 views
0

据我所知,dos函数1等待输入字符并将其放入寄存器AL中。DOS函数1程序集(8086)问题

mov al,1h 
int 21h 

这对我不起作用。它不会等待输入,只需在AL中插入一个随机ASCII码。

如果我用AH修改AL,它应该可以正常工作。

mov ah,1h 

这是为什么?

+5

这就是'int 21h'服务如何由您的DOS供应商实现的,服务编号预计在'AH'中,而不是'AL'。检查你的DOS服务[文档](http://stanislavs.org/helppc/int_21-1.html),无论你使用什么。如果它说“AL = 1”,那么用一些更正确的替换它。 – Ped7g

回答

0

按照Ralf Brown's excellent interrupt list,该功能有来电时,在这种情况下,al仅仅用来保存返回值是在ah

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中发生的任何值。这不太可能结束:-)