0

16 進マシン命令をシンボリック オペコードに変換するのはかなり混乱しています。このセクションからいくつかのレビューの問題があります。

What machine code is generated for the instruction: sbb al, 10
sbb reg/mem from reg/mem    0001 10dw | mod reg r/m | disp-lo | disp-hi
sbb immed from reg/mem      1000 00dw | mod 101 r/m | disp-lo | disp-hi | disp-lo | disp-hi
sbb immed from accumulator  0001 110w | data-lo | data-hi
Answer: 01C0A

What is the symbolic opcode for this hex machine instruction: F7 26 10 00
I converted F7 to 1111 0111 and this matches up with these instructions
mul    1111 011w | mod 100 r/m | disp-lo | disp-hi
imul   1111 011w | mod 101 r/m | disp-lo | disp-hi
div    1111 011w | mod 110 r/m | disp-lo | disp-hi
idiv   1111 011w | mod 111 r/m | disp-lo | disp-hi
Answer: mul

これらの問題を処理する方法がわかりません。また、概念に頭を悩ませることもできません。誰かが私にそれをもっと簡単な言葉で分解できますか?

4

2 に答える 2

4

x86およびx86の命令リストに関するウィキペディアのページを参照してください

このページのx86命令セットおよびx86asmのような他の多くのサイトに関するIntelのマニュアルも参照してください。

Webで検索すると、多くの参考資料が得られます。

そして、あなたはあなたを助けるためにのようなデバッガを使うことができgdbます。

于 2011-12-13T11:12:30.893 に答える
2

には複数の可能性があることに注意してsbb al, 10ください。ただし、リソースが間違っているか、リソースから間違ったデータを選択したかのいずれかです。これがIntelのマニュアルからです:

SBB – Integer Subtraction with Borrow

immediate to register        1000 00sw : 11 011 reg : immediate data
immediate to AL, AX, or EAX  0001 110w : immediate data

2番目のエンコーディングを使用する場合、2バイトの命令を取得します1Ch, 0Ahwバイトサイズのオペランドで動作する命令を(d / q)ワードサイズのオペランドと区別します。ここでwは、オペランドがバイトであるため、=0です。wの場合は1になりsbb (r/e)ax, immます。

ここで、最初のエンコーディングを使用すると、3バイトの命令が得られます。w同じ意味です。sイミディエートが(d)ワードサイズの命令とイミディエートがバイトサイズの命令を区別します(命令の説明をよく見ると、イミディエートオペランドサイズのみが異なる2つの形式があります)。ここでsは、イミディエートがバイトサイズであるため、=0です。regレジスタインデックスです。al(および)の場合(r/e)axは0です。これで次のようになります80h, 0D8h, 0Ah

どちらのエンコーディングもの有効なエンコーディングですsbb al, 10が、通常は短い方が推奨されます。

命令セットと命令エンコーディングがカバーされているIntelおよび/またはAMDCPUマニュアルを絶対に読む必要があります。おそらく、いくつかのテイクで数回読んで、IntelとAMDの両方を読んでください。あなたが必要とするすべての情報はそこにあります、それはそれがたくさんあるということだけであり、それは学習に適した最良の形ではありません。

命令エンコーディングの理解を検証したい場合は、アセンブラ、逆アセンブラ、デバッガなどのツールを使用してください。たとえば、コードを記述しdb 80h, 0D8h, 0Ahたり、コードdb 1Ch, 0Ahの代わりにsbb al, 10コンパイルしたりして、逆アセンブルを調べて、実際にコードであるかどうかを確認できsbb al, 10ます。さまざまなビットをあちこちで変更して、それらが分解でどのような変更をもたらすかを確認できます。

于 2011-12-13T11:55:55.203 に答える