2

こんにちは、x86 に関する質問があります。Intel のマニュアルでは、一部の命令が異なるタイプのメモリ オペランドを使用する場合があります。例えば。IDIV r/m8 または IDIV r/m16 または IDIV r/m32 または IDIV r/m64 これらはすべて IDIV です オペランドが m8、m16、m32、または m64 であるかどうかを知る可能性はありますか? オペランドがm8の場合、8ビットレジスタによってアドレス指定されると考えていました。ax if 32 then eax,esp ... 私の仮定は正しいですか? 間違っていたら訂正してくださいどんな提案でも歓迎しますありがとう

4

2 に答える 2

0

はい、オペランドとして使用されるレジスターはあいまいさを解決します。(ただし、これaxは 8 ビット レジスタではなく 16 ビット レジスタであることに注意してください。これは、それぞれ上位バイトまたは下位バイトに対して または になります。ah)al

メモリ オペランドのみを参照している場合は、次のようにBYTE PTRWORD PTRまたはDWORD PTR指定子を使用してあいまいさを解決する必要があります。

mov dword ptr [eax], 0

この例では、に含まれるアドレスの 32 ビット数 (「ダブル ワード」)eaxを 0 に設定します。

于 2010-12-16T19:10:50.187 に答える
0
  1. オペランドが m8、m16、または m32 のいずれであっても、メモリ位置のアドレス指定に使用されるレジスタは 8、16、または 32 ビットにすることができます。すべて有効です。

  2. メモリから読み取るビット数を指定するには、サイズ指定子の 1 つまたはアドレスの前に使用する必要がbyteありwordますdword。例えば:

idiv byte [bx] ; m8

idiv word [bx] ; m16

idiv dword [bx] ; m32

于 2010-12-16T19:22:42.297 に答える