程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 關於匯編div/idiv/mul/imul指令的用法

關於匯編div/idiv/mul/imul指令的用法

編輯:匯編語言
大家可能深有體會,在使用div/idiv指令時,運行程序常常會莫明其妙的彈出"該程序執行非法操作"的錯誤,通常是"除法溢出",但是,你的代碼可能如下:
mov eax,1000
cwd
div cx
一般在使用了cwd指令後,就可以正常,但是很不穩定,我就覺得奇怪,為什麼會這樣?
huitiansou的解答:
對:“關於div/idiv/mul/imul指令的用法 by AoGo”產生Bug的原因
那是因為被除數達到了雙精度值,
所以不能用符號擴展,
而只能將高16位送0
我們只要保證edx為0就可以了,在運行32位數的除法時,建議使用這個方法,絕對不會操作非法操作(當然除0/溢出除外)
例子:
xor edx,edx
mov eax,6527363
mov ecx,28732
div ecx
你只要把上面的xor edx,edx指令一去掉,保證100%非法操作。
另外,乘法指令也可以這樣做。可以保證更安全。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved