2016-11-10 51 views

回答

2

您的意思是int 21hint 21int 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 
相關問題