在x86 nasm中分割时浮点exception

我忙于学习大会,看着分裂,但我遇到了一个泡菜,下面的声明:

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 

我想通过0x00000002来划分0x100000000,所以既然划分的范围是EDX:EAX,我把0x1移到EDX和0x0到EAX。 然后,我将0x2移到ECX中,然后除法,这不幸给了我一个浮点exception,我不知道我做错了什么。

当使用div(无符号)它正常工作,所以我想知道是什么区别是在div和idiv之间的解释导致exception这个特定的陈述。

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