2

ビルトインマクロの代替案に関する私の投稿に関して、 int 21h windows APIを使用してStdOutマクロの使用を回避することは可能ですか?そのような:

.data
       msg dd 'This will be displayed'
;original macro usage:
invoke StdOut, addr msg
;what I want to know will work
push msg 
int 21h ; If this does what I think it does, it should print msg

そのようなものは存在しますか(int 21hを使用して印刷する場合のように)、または存在するようなものを実行しますが、正確にはint21hではありません。または私は完全に間違っていますか。

誰かが私のためにこれを明確にすることができますか?

ありがとう、

プログラム

4

3 に答える 3

8

割り込み21hは、MS-DOS機能のエントリポイントでした。

たとえば、stdoutに何かを印刷するには、次のことを行う必要があります。

mov ah, 09h  ; Required ms-dos function
mov dx, msg  ; Address of the text to print
int 21h      ; Call the MS-DOS API entry-point

文字列は「$」文字で終了する必要があります。

だが:

  • Windowsデスクトップアプリケーションでは割り込みを使用できません(割り込みはデバイスドライバーでのみ使用できます)。
  • MS-DOS関数を呼び出す必要がある場合は、16ビットアプリケーションを作成する必要があります

次に...はい、メッセージの印刷に使用することはできません。そのようなものは存在しません。メッセージを印刷するにはOS関数を呼び出す必要があり、割り込みを介して使用することはできません。

于 2012-05-14T12:49:08.033 に答える
2

DOS割り込みは、Windowsの保護モードでは使用できません。

Win32 API関数を使用WriteFileしてコンソールに書き込むか、代わりにMASMマクロを使用できます。

于 2012-05-14T12:51:20.257 に答える