-1

如何在程序集 8086 中使用ah而不是al在中断 21 中使用?

4

1 回答 1

2

你的意思是int 21hint 21?即 AT 扩展服务/ APMint 21 (int 15h)

int 21h (int 33)DOS 中断之一。

IIRC emu8086 仅支持有限的服务和中断子集,所以我认为您的意思是int 21h(我希望int 15hemu8086 不支持)。

请注意此类拼写错误,这可能会导致您在发现错误数字之前调试了几分钟。

调用时寄存器的功能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 回答