Assembly DOS功能1组件(8086)问题

Assembly DOS功能1组件(8086)问题,assembly,intel,dos,x86-16,Assembly,Intel,Dos,X86 16,据我所知,dos函数1等待输入字符并将其放入寄存器AL mov al,1h int 21h 这对我不起作用。它不等待输入,只在AL中插入一个随机ascii码 如果我用AH修改AL,它会正常工作 mov ah,1h 这是为什么?根据,调用时函数必须在ah中,在这种情况下,al仅用于保存返回值: DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO AH = 01h Return: AL = character read

据我所知,dos函数1等待输入字符并将其放入寄存器AL

mov al,1h
int 21h
这对我不起作用。它不等待输入,只在AL中插入一个随机ascii码

如果我用AH修改AL,它会正常工作

mov ah,1h
这是为什么?

根据,调用时函数必须在
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
中的任何值。这不太可能很好地结束:-)

这就是DOS供应商如何实现
int 21h
服务的,服务编号应该在
AH
中,而不是
AL
中。检查您的DOS服务,无论您使用哪种服务。如果它说“AL=1”,那么用更正确的替换它。