Luc*_*man 8 linux x86 assembly nasm
我正忙着学习装配,正在考虑分裂,但是我遇到了以下声明:
mov edx,0x00000001
mov eax,0x00000000
mov ecx,0x00000002
idiv ecx
Run Code Online (Sandbox Code Playgroud)
GDB:
0x08048071 <+17>: mov edx,0x1
0x08048076 <+22>: mov eax,0x0
0x0804807b <+27>: mov ecx,0x2
=> 0x08048080 <+32>: idiv ecx
Run Code Online (Sandbox Code Playgroud)
我想将0x100000000除以0x00000002,因为除法的范围是EDX:EAX我将0x1移动到EDX,将0x0移动到EAX.然后我将0x2移动到ECX并进行除法,这不幸地给了我一个浮点异常,我不确定我做错了什么.
当使用div(无符号)时它工作正常,所以我想知道这个导致异常的特定语句在div和idiv之间的解释有什么不同.
quotient(0x80000000
)不适合32位有符号整数(最大值:) 0x7fffffff
.因此你得到一个例外.它确实适合32位无符号整数(最大值0xffffffff
),因此无符号除法不会触发异常.