装配部门和浮点

Dav*_*mes 6 linux x86 assembly

  mov eax, 0x01
  mov ecx, 0x02
  div ecx                 ; Divide AX/CX, saves remainder in DX
  cmp dx, 0
  je OddNumber
  int 80h
Run Code Online (Sandbox Code Playgroud)

当我尝试除1/2时,它返回"浮点异常",而不是标记OddNumber.我知道1/2是一个浮子,但我怎么能处理呢?谢谢.

GDB说"程序收到信号SIGFPE,算术异常." 顺便说说.

dus*_*uff 11

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

  2. 之后div,你可能想比较edx,而不仅仅是dx.