汇编之标志寄存器(flag)——EFL
作者:互联网
标志寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。
如一个flag寄存器为:
0000 0206 (16进制)
拆成(2进制):
0000 0000 0000 0000 0000 0010 0000 0110
(1)DF位/方向位(第十位):
第10位从下标开始算:
0000 0000 0000 0000 0000 0010 0000 0110
DF位如果是0的时候,每次执行完MOVS指令后,ESI和EDI的地址都会发生变化。
- 当DF位是0的时候,ESI和EDI的值都会 +1或者+2或者+4(加几取决于移动了1、2、4个字节)
- 当DF位是1的时候,ESI和EDI的值都会 -1或者-2或者-4(加几取决于移动了-1、-2、-4个字节)
Debug工具中双击D即可修改:
例:MOVS指令复制内容:MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
正常执行结束,ESI和EDI的值应该变成98和78
ESI和EDI存的地址:,且DF位设置为1。正
ESI&EDI存的地址的值:
F8执行完结果:可见94位置的数据两个字的数据已经被全数复制到了74位置。
这时再看ESI和EDI的变化:,原本的94和74已经变成了90和70。两个的值都向后退了4位。
(2)其它位待补充。
标签:0000,DF,EDI,flag,EFL,寄存器,MOVS,ESI 来源: https://www.cnblogs.com/codexlx/p/13245935.html