在x86汇编中划分64位的问题

时间:2014-03-23 19:38:33

标签: assembly x86 cpu-registers

我不断收到程序接收信号SIGFPE,算术异常'在x86汇编时划分。它令人困惑,因为如果我除以10,答案应该小于64位答案....

mov $0x82b40000, $eax
mov $0x21c3677c, $edx
mov $10000000, %ebx
div %ebx

2 个答案:

答案 0 :(得分:1)

你需要进行类似手工长手划分的划分。将红利放在另一对寄存器或内存中。然后清除edx并使用高阶红利加载eax。然后将edx:eax除以32位除数,并将eax(商)存储回高阶红利。接下来加载具有低阶红利的eax(仅保留edx),再次除以32位除数。将eax存储回低阶红利。在此之后,高阶和低阶红利=被除数/除数(64位商),edx =被除数%除数(32位余数)。

答案 1 :(得分:0)

算术异常是"整数溢出"! 什么是正常或预期的,因为您的结果大于32位数。 记住:64位除法的结果只是32位寄存器。 从intel数据表检查表:

enter image description here