XOR与div
请说说这两个命令,另外xoredx,edxdiv[ecx+0x24]是指EDX与[ecx+0x24]相除吗?谢谢...
请说说这两个命令,
另外
xor edx,edx
div [ecx+0x24]
是指EDX与[ecx+0x24]相除吗?
谢谢 展开
另外
xor edx,edx
div [ecx+0x24]
是指EDX与[ecx+0x24]相除吗?
谢谢 展开
展开全部
为防抽,加一行汉字。
XOR就是按位异或,两个二进制位相同则结果为0,不同则结果为1.
div指令,根据其后面的操作数不同而有不同的行为:
div x
若x为8位寄存器/内存数,则为AX/X,商放到AL中, 余数放到AH中
若x为16位寄存器/内存数,则为DX:AX/X,商放到AX中, 余数放到DX中
若x为32位寄存器/内存数,则为EDX:EAX/X,商放到EAX中, 余数放到EDX中
上面第一句是把EDX置为0,第二句写法不严谨,不知道编译器会怎么解释,严格地写应该这样:
div dword ptr[ecx + 0x24]
此时,是用EDX:EAX除以放在[ecx+0x24]单元的一个32位数。因为EDX已经被置为0,所以就相当于用EAX除以这个单元的数,结果的商放到EAX中,余数放到EDX中。
XOR就是按位异或,两个二进制位相同则结果为0,不同则结果为1.
div指令,根据其后面的操作数不同而有不同的行为:
div x
若x为8位寄存器/内存数,则为AX/X,商放到AL中, 余数放到AH中
若x为16位寄存器/内存数,则为DX:AX/X,商放到AX中, 余数放到DX中
若x为32位寄存器/内存数,则为EDX:EAX/X,商放到EAX中, 余数放到EDX中
上面第一句是把EDX置为0,第二句写法不严谨,不知道编译器会怎么解释,严格地写应该这样:
div dword ptr[ecx + 0x24]
此时,是用EDX:EAX除以放在[ecx+0x24]单元的一个32位数。因为EDX已经被置为0,所以就相当于用EAX除以这个单元的数,结果的商放到EAX中,余数放到EDX中。
追问
谢谢~再问一下,EDX:EAX/X 如果EDX不是为0,是怎么计算的, 不明白EDX:EAX是怎么计算。
追答
EAX和EDX都是32位寄存器,而EDX:EAX就是把这两个32位寄存器组合起来,得到一个64位数。比如EAX = 0X11111111,而EDX=2,那么EDX:EAX = 0X0000000211111111
假如下面这条:
DIV EBX
假设EBX = 0X11111111,EDX = 0, EAX = 0X11111111,那么DIV EBX就相当于用EAX除以EBX,结果EAX = 1,EDX = 0;
假如EBX = 0X11111111,EDX = 2, EAX = 0X11111111,那么DIV EBX就相当于:
0X0000000211111111除以0X11111111,此时结果就和上面不一样了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询