在x86 nasm中划分时的浮点异常

时间:2013-03-24 18:45:29

标签: linux assembly x86 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之间的解释有什么不同。

1 个答案:

答案 0 :(得分:7)

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