0

私はいくつかのスニペットを見ていましたが、これらの行 (.comファイルの一部) を見ました:

  DB 66; 
  CALL D59C:C2C0; 
  INT 69
  MOV SI, C8C6

何をしINT 69ますか?

オンラインでも何も見つかりませんでした。ここでも何も見つかりませんでした。

AH奇妙なことに、ALの前後に値を移動することはありませんINT 69

EMU8086. 8086 マイクロプロセッサ エミュレータ。統合された逆アセンブラー。

4

3 に答える 3

9

ここですべてが 16 進数であると仮定すると、これが 16 ビット コードである場合、次のようになります。

66                         DB 66
9A C0 C2 9C D5             CALL D59C:C2C0
CD 69                      INT 69
BE C6 C8                   MOV SI, C8C6

しかし0x66、オペランド サイズ オーバーライド プレフィックス (おそらく、ここでは適切に逆アセンブルされていないだけ) であり、(16 ビット コードでは) 次の命令が 16 ビット オペランドではなく 32 ビット オペランドを取得します。したがって、このコードは実際には次のとおりです。

66 9A C0 C2 9C D5 CD 69    CALL 69CD:D59CC2C0
BE C6 C8                   MOV SI, C8C6

16 ビット コードからかなりランダムに見える 16:32 ビットの絶対アドレスへの far 呼び出しは、私にはあまりありそうに見えません。

したがって、これは実際にはコードではなくデータであると思います...

于 2011-11-16T00:49:47.443 に答える
3

与えられたコードが 16 ビット モードで実行され、連続する命令をエンコードするものであると仮定すると、私はそれについて別の解釈をします。

DB 66ですoperand size prefix。16 ビット モードでは、命令オペランドを 16 ビットではなく 32 ビットとして解釈するように CPU に指示します。したがって、命令は の代わりにCALLとして解釈されます。アドレスの「欠落」した 2 バイトは「命令」です。CALL 16-bit selector:32-bit offsetCALL 16-bit selector:16-bit offsetINT 69

効果的なコードは次のとおりです。

CALL 69CD:D59CC2C0
MOV SI, C8C6

しかし、そのようなアドレス (オフセット > 0FFFFh) での呼び出しは例外を引き起こすため、それは私にはあまり意味がありません。それはどのようなコードですか?

于 2011-11-16T00:53:31.670 に答える
2

x86 割り込みを検索すると、おそらく Ralf Brown によって書かれたこのリストが得られました。それが私が信じているものである場合、これは一世代前からの割り込みの決定的なリストです. 思い出がよみがえります。

于 2011-11-15T23:28:08.363 に答える