Assembly 整数溢出问题
我一直遇到一个整数溢出问题,我不知道如何解决它,有人能帮忙吗? edx conatins 181和eax包含174Assembly 整数溢出问题,assembly,x86,Assembly,X86,我一直遇到一个整数溢出问题,我不知道如何解决它,有人能帮忙吗? edx conatins 181和eax包含174 xor eax,edx mov edx,2 div edx 使用32位寄存器进行除法时,被除数为edx:eax。由于eax最初为174,edx最初为181,因此情况如下: eax和edx是xor ed,结果存储在eax中。eax现在27岁了 2存储在edx中 edx:eax除以edx。这意味着0x200001b除以0x
xor eax,edx
mov edx,2
div edx
使用32位寄存器进行除法时,被除数为
edx:eax
。由于eax最初为174,edx最初为181,因此情况如下:
edx:eax
除以edx。这意味着0x200001b除以0x2。此操作的结果为0x10000000D。CPU尝试将该值存储在eax中,剩余值1存储在edx中,但它不适合,因为1位于第33位。因此,您会得到一个溢出xor eax,edx
mov ecx,2
xor edx,edx ; Zero edx
div ecx
; eax contains 0xD, edx contains 1
假设您谈论的是x86,
div-edx
没有真正意义——32位div将edx:eax除以指定的目标寄存器。幸运的是,要除以2,实际上根本不需要使用div
mov eax, 174
mov edx, 181
xor eax, edx
shr eax, 1
如果出于某种原因坚持使用div
,则需要使用不同的寄存器。请注意,x86希望除法的结果适合一个寄存器,因此需要在除法之前将edx归零:
mov eax, 174
mov edx, 181
xor eax, edx
xor edx, edx
mov ebx, 2
div ebx
需要更多信息:例如,目标体系结构,汇编程序版本。@suddnely\u me目标体系结构?意味着汇编程序版本OFC>\uu@suddnely\u me o right没有看到汇编程序版本位x86汇编问题必须与体系结构标记一起出现。没有人能确保您使用的是x86、ARM、MIPS或其他体系结构