私が得たと言う
EDX = 0xA28
EAX = 0x0A280105
このASMコードを実行します
IMUL EDX
私の理解では、これはEAXのみを使用します。1つのオペランドが指定されている場合
したがって、Cコードでは次のようになります。
EAX *= EDX;
正しい?
デバッガーを調べた後..私EDX
も変更されていることがわかりました。
0x0A280105 * 0xA28 = 0x67264A5AC8
デバッガーで
EAX = 264A5AC8
EDX = 00000067
今、あなたが答えを取り、0x67264A5AC8
最初のヘックスペアを分割すると、0x67 264A5AC8
なぜEDX
とEAX
がそのようになっているのかがはっきりとわかります。
さて、オーバーフローが発生します。32ビットにそのような膨大な数を格納できないためです。そのため、EDXで余分な8ビットを使用し始めます
しかし、私の質問は、同じ結果を得るために、Cコードでこれをどのように行うのかということです。
こうなると思います
EAX *= EDX;
EDX = 0xFFFFFFFF - EAX; //blah not good with math manipulation like this.