如何在程序集 8086 中使用ah
而不是al
在中断 21 中使用?
问问题
376 次
1 回答
2
你的意思是int 21h
或int 21
?即“ AT 扩展服务/ APM ”int 21 (int 15h)
。
int 21h (int 33)
是DOS 中断之一。
IIRC emu8086 仅支持有限的服务和中断子集,所以我认为您的意思是int 21h
(我希望int 15h
emu8086 不支持)。
请注意此类拼写错误,这可能会导致您在发现错误数字之前调试了几分钟。
调用时寄存器的功能int #n
由为该中断安装的处理程序定义。DOS21h
服务有几个子功能:您要调用哪一个,由ah
. 这无法更改,它在 DOS 代码中是硬连线的。
您必须更改调用代码以按照所需中断处理程序的预期准备寄存器。
(或者您当然可以提供自己的中断处理程序,然后您将指定进入哪个寄存器的内容,但是创建自己的中断处理程序听起来不像 emu8086 的用户想要做的事情)
示例如何使用ah
“字符输出到标准输出”服务中的值:
mov ah,'X' ; character value in ah
; how to use it with:
; int 21h, ah=2 (Character output), dl = char (as defined by DOS)
mov dl,ah ; move character value into dl (before setting ah with 2)
mov ah,2 ; number of requested "Character output" service
int 21h ; call the DOS service
于 2016-11-10T15:54:00.900 回答