如何在程序集8086的中断21中使用ah
而不是al
?
答案 0 :(得分:2)
您的意思是int 21h
还是int 21
? int 21 (int 15h)
是“AT Extended Services / APM”。
int 21h (int 33)
是DOS interrupts之一。
IIRC emu8086仅支持有限的服务和中断子集,因此我认为您的意思是int 21h
(我希望emu8086不支持int 15h
)。
注意这样的拼写错误,在你注意到错误的号码之前,它可能会让你调试几分钟。
调用int #n
时寄存器的功能由处理程序定义,该处理程序是为该中断安装的。 DOS 21h
服务有几个子功能:您要调用的是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