2013-03-24 57 views
8

我忙于学习大会,并一直在寻找将在浮点异常,但是我跑进用下面的语句咸菜:在86 NASM将

mov edx,0x00000001 
mov eax,0x00000000 
mov ecx,0x00000002 
idiv ecx 

GDB:

0x08048071 <+17>: mov edx,0x1 
    0x08048076 <+22>: mov eax,0x0 
    0x0804807b <+27>: mov ecx,0x2 
=> 0x08048080 <+32>: idiv ecx 

我想0x100000000除以0x00000002,所以既然划分的跨度是EDX:EAX我将0x1移入EDX,0x0移入EAX。然后我将0x2移入ECX并划分,这不幸给了我一个浮点异常,我不知道我做错了什么。

当使用div(无符号)时,它工作正常,所以我想知道在导致异常的特定语句的div和idiv之间的差异是什么。

回答

7

商(0x80000000)不适合32位有符号整数(最大值:0x7fffffff)。因此你会得到一个例外。它确实拟合成32位无符号整数(最大值0xffffffff),所以没有异常由无符号除法触发。

+0

当然我忘记了签名时我只能上到2147483647。啊愚蠢的错误,谢谢:) – 2013-03-24 18:56:55