XOR与div

请说说这两个命令,另外xoredx,edxdiv[ecx+0x24]是指EDX与[ecx+0x24]相除吗?谢谢... 请说说这两个命令,
另外
xor edx,edx
div [ecx+0x24]
是指EDX与[ecx+0x24]相除吗?
谢谢
展开
 我来答
帐号已注销
2012-11-06 · TA获得超过3000个赞
知道大有可为答主
回答量:1338
采纳率:75%
帮助的人:1298万
展开全部
为防抽,加一行汉字。
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,此时结果就和上面不一样了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式