整數溢出問題
回答
假設你正在談論的x86,div edx
並沒有真正意義 - 一個32位的div將edx:eax除以指定的目標寄存器。幸運的是,除以2,你根本不需要使用div
。
mov eax, 174
mov edx, 181
xor eax, edx
shr eax, 1
如果你堅持使用div
出於某種原因,你想用一個不同的寄存器。請注意,x86期望分區的結果適合一個寄存器,因此您需要在除法之前將edx歸零:
mov eax, 174
mov edx, 181
xor eax, edx
xor edx, edx
mov ebx, 2
div ebx
另一個偉大的:) – Spyros 2011-04-09 18:32:19
感謝,工程樣的現在:) – user700176 2011-04-09 18:46:40
當使用一個32位的寄存器分割,被除數是edx:eax
。由於eax最初爲174,edx最初爲181,所以會發生以下情況:
- eax和edx是異或,結果存儲在eax中。 eax現在是27
- 2存儲在edx中
edx:eax
除以edx。這意味着0x20000001B除以0x2。此操作的結果是0x10000000D。 CPU嘗試將此值存儲在eax中,餘數1用edx表示,但不適合,因爲1在第33位。因此,你會發生溢出。
您可以通過使用不同的寄存器比EDX來劃分,確保零EDX解決這個問題:
xor eax,edx
mov ecx,2
xor edx,edx ; Zero edx
div ecx
; eax contains 0xD, edx contains 1
+1很好的解釋 – Spyros 2011-04-09 18:31:59
- 1. 溢出問題
- 2. 火狐溢出:滾動調整問題
- 3. 溢出和調整大小問題
- 4. 整數溢出
- 5. 整數溢出/下溢
- 6. IE6溢出問題
- 7. CSS溢出問題
- 8. IE7溢出問題
- 9. DIV溢出問題
- 10. 問題溢出div
- 11. 溢出的問題
- 12. css溢出問題
- 13. 表溢出問題
- 14. Java溢出問題
- 15. Ext.MessageBox溢出問題
- 16. USRP2溢出問題
- 17. IE9溢出問題
- 18. DIV溢出問題
- 19. html溢出問題
- 20. 整數不溢出
- 21. 長整數溢出
- 22. 整數溢出C
- 23. rlimit64整數溢出
- 24. 整數溢出PHP模數
- 25. TSQL日期溢出問題
- 26. 溢出問題:-webkit-paged-x
- 27. 在IE7 jscrollPane溢出問題
- 28. 溢出-y滾動問題
- 29. 溢出:隱藏的問題
- 30. CSS3翻譯問題溢出
需要更多信息:例如,目標體系結構,彙編程序版本。 – iehrlich 2011-04-09 18:18:41
@suddnely_me目標架構? – user700176 2011-04-09 18:21:15
意味着彙編版本OFC> _ < – iehrlich 2011-04-09 18:22:43