アセンブリ 8086 で割り込み 21ah
の代わりに使用するにはどうすればよいですか?al
1 に答える
int 21h
それともint 21
?_ それint 21 (int 15h)
が「AT拡張サービス/APM」です。
int 21h (int 33)
DOS 割り込みの 1 つです。
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