1

以下のアセンブリを C++ に変換するのに問題があります

MOVZX EAX, DX

EDX は 32 ビット レジスタです。最下位の 16 ビット (DX) を取得する必要があります。

私は次のことを試しました:

unsigned edx = 0x123ABCDE;
unsigned dx = (edx>>16) & 0xff;

dx に保存されている BCDE の値を取得することを期待していますが、少し間違っています。

どんな助けでも大歓迎です。

4

1 に答える 1

2

コードを段階的に分析しましょう。
unsigned edx = 0x123ABCDE;
珍しいことは何もありません。

次の文を評価順に分解してみましょう。
(edx >> 16)-- 16 ビット右シフト。
これは、2 バイトまたは 4 桁の 16 進数の右シフトです。
答えは 0x123A でなければなりません。

ここで、右端の 8 ビットを保持しましょう (0xFF との AND 演算):
0x123A & 0xFF == 0x3A

結果は、変数で 0x3A になるはずですdx

于 2016-08-05T19:53:08.347 に答える