2012-03-20 43 views
5

我试图运行汇编下面的代码使用DIV:获取浮点异常,而试图在装配

mov  %si, %ax 
    mov  $15, %si 
    div  %si 
    mov  %eax, %esi 

当我做我的程序,它编译,但在运行时,它给了我一个浮点例外。 我试图用%ah%si替换最后一行的参数。我想分%esi15。我只想要一个int,并且不需要double

谢谢

回答

13

div指令由操作数除以双字参数dx/ax。如果商数太大而不适合单词,它会抛出异常。

参考:http://siyobik.info.gf/main/reference/instruction/DIV

你在dx寄存器有哪些?最有可能的dx/ax除以15不适合16位单词。

+0

没有(或随机的东西),我认为我的操作是%si /%ax,它存储在%ax – juliensaad 2012-03-20 18:53:05

+1

然后你需要清除(设为零)'dx'寄存器。因为它代表了输入分红的前16位。 – Mysticial 2012-03-20 18:54:40

+0

工作!非常感谢,我会在7分钟内给出答案 – juliensaad 2012-03-20 18:56:48