简单的x86-64除法不起作用

时间:2013-11-16 22:12:52

标签: exception assembly x86-64 division integer-division

对于我的编译器项目的简单测试用例,我试图将88除以11,但是当我调用idivq时,我的程序会抛出一个浮点异常。以下是发生异常的生成代码的相关部分:

# push 88
movq $88,%r10

# push 11
movq $11,%r13

# \
movq  %r10,%rax
idivq %r13

我已查找了如何使用div的示例,我认为我遵循相同的格式,因此我不明白为什么会出现异常。

1 个答案:

答案 0 :(得分:4)

idiv在执行除法之前连接rdxrax(也就是说,它实际上是128位除法)。如果要进行单字划分,请在rdx中加零。你得到的不是FP异常,而是一个整数溢出异常:rdx中遗留了一些东西,这使得商太大而无法放入目标寄存器。