当前位置: 首页 > 逆向 > 正文

汇编指令DIV的说明

在汇编中DIV表示的是无符号的除法,在32位的系统下商保存在eax中,余数保存在EDX中

DIV只有一个操作数,但是参与运算的却有两个;因为他默认包含了EAX这个寄存器

但是这里要特别注意的一个误区,其实DIV默认包含了三个

其中两个寄存器和一个操作符,

这里假设下面的指令:

DIV ECX

DIV的操作数是ECX寄存器,但是还不止有EAX参与运算

这里我们随便找一个反汇编指令指令中包含了DIV的程序,做下面的实验:

修改EAX的寄存器值为1234(h)

修改ECX寄存器的值为4567(h)

修改edx寄存器的值为1;

经过了div ecx后,查看eax和edx的值:
eax的内容为:0003B04A(h)==241738(d)

edx的内容为:0000326E(h)==12910(d)

然后,如果DIV没有edx的参与的话eax的值应该为0;edx的值应该为4567h

将edx考虑运算后,因为EDX保存的是高16位的值,那么也就是说上面的运算实际上是:
eax = 100001234 (h)/4567(h)

edx =100001234(h)%4567(h)

通过16进制计算器我们可以得到

100001234 (h)/4567(h) ==0003B04A(h);

100001234(h)%4567(h) == 0000326E(h)

那么可以可以肯定的是:
DIV指令隐含了EAX和EDX两个寄存器参与运算



本文固定链接: http://kuaile.in/archives/823 | 蒲公英的博客

该日志由 蒲公英 于2012年04月09日发表在 逆向 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 汇编指令DIV的说明 | 蒲公英的博客
关键字:

汇编指令DIV的说明:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter