說我大會如何IMUL操作碼(只有一個OPRAND)轉換爲C代碼
EDX = 0xA28
EAX = 0x0A280105
我運行此ASM代碼
IMUL EDX
這據我瞭解,只使用EAX ..如果指定了一個oprand
所以在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.
本指令始終使用EDX存儲產品,無論產品的價值是否可以表示結果是否不丟失32位。 –