汇编之标志寄存器(flag)——EFL

Posted codexlx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编之标志寄存器(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)其它位待补充。

 

以上是关于汇编之标志寄存器(flag)——EFL的主要内容,如果未能解决你的问题,请参考以下文章

汇编11:标志寄存器

《汇编语言(第三版)》标志寄存器

汇编_标志寄存器flag_串数据的传送

8086汇编语言学习 8086标志寄存器

汇编之使用标志寄存器进行指令转移

汇编LAHF指令学习 - 使用emu8086