装配部门和浮点

时间:2011-12-27 20:53:28

标签: linux assembly x86

  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,算术异常。”顺便说一句。

2 个答案:

答案 0 :(得分:10)

  1. 在致电edx之前,您需要将div ecx归零。当使用32位除数(例如ecx)时,divedx:eax中的64位值除以其参数,因此如果edx中存在垃圾,则为div被视为股息的一部分。

  2. edx之后,您可能希望比较dx,而不仅仅是{{1}}。

答案 1 :(得分:1)

您的回答似乎在floating point exception may mean division by 0帖子中有所涉及。你能看看div之前edx中的内容吗?