我不断得到一个整数溢出问题,我不知道如何解决它可以有人帮忙吗?edx conatins 181和eax包含174
xor eax,edx
mov edx,2
div edx
Run Code Online (Sandbox Code Playgroud)
假设你在谈论x86,那div edx真的没有意义 - 一个32位的div将edx:eax除以指定的目标寄存器.幸运的是,要除以2,你根本不需要使用它div.
mov eax, 174
mov edx, 181
xor eax, edx
shr eax, 1
Run Code Online (Sandbox Code Playgroud)
如果div由于某种原因坚持使用a ,则需要使用其他寄存器.请注意,x86希望除法的结果适合一个寄存器,因此在除法之前需要将edx置零:
mov eax, 174
mov edx, 181
xor eax, edx
xor edx, edx
mov ebx, 2
div ebx
Run Code Online (Sandbox Code Playgroud)
使用32位寄存器进行分频时,被除数为edx:eax.由于eax最初为174,而edx最初为181,因此会发生以下情况:
edx:eax除以edx.这意味着0x20000001B除以0x2.此操作的结果是0x10000000D.CPU尝试将此值存储在eax中,余数为1,在edx中,但它不适合,因为1位于第33位.因此,你会溢出.您可以通过使用与edx不同的寄存器来解决此问题,以确保零edx:
xor eax,edx
mov ecx,2
xor edx,edx ; Zero edx
div ecx
; eax contains 0xD, edx contains 1
Run Code Online (Sandbox Code Playgroud)