如何在中断21 emu8086中写“ah”而不是“al”?
答
您的意思是int 21h
或int 21
? int 21 (int 15h)
是“AT Extended Services/APM”。
int 21h (int 33)
是DOS interrupts之一。
IIRC emu8086仅支持有限的服务和中断子集,所以我认为你的意思是int 21h
(并且我期望int 15h
不被emu8086支持)。
注意这样的错别字,它可能会导致您在注意到错误的数字之前调试几分钟。
调用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
你不能。 Int 21h期望在那里有一个值。那么,我猜你可能会创建自己的中断21h。 。 。如果你敢。 –
'mov al,ah'。咄。 –