mov eax, 0x01
mov ecx, 0x02
div ecx ; Divide AX/CX, saves remainder in DX
cmp dx, 0
je OddNumber
int 80h
当我尝试除1/2时,它返回“浮点异常”而不是标记OddNumber。我知道1/2是一个浮子,但我怎么能处理呢?感谢。
GDB说“程序接收信号SIGFPE,算术异常。”顺便说一句。
答案 0 :(得分:10)
在致电edx
之前,您需要将div ecx
归零。当使用32位除数(例如ecx
)时,div
将edx:eax
中的64位值除以其参数,因此如果edx
中存在垃圾,则为div
被视为股息的一部分。
在edx
之后,您可能希望比较dx
,而不仅仅是{{1}}。
答案 1 :(得分:1)
您的回答似乎在floating point exception may mean division by 0帖子中有所涉及。你能看看div之前edx中的内容吗?