此标志用于字符串操作,并指定字符串是从低地址开始并继续到更高地址,反之亦然.
对于字符串指令,ECX具有迭代次数,DS:ESI具有源地址并ES:EDI具有目标(因此s in ESI和d in EDI).
每次迭代后,ECX减一,并ESI和EDI要么递增或元素大小(1字节操作,2字操作等)根据递减EFLAGS.DF.
如果EFLAGS.DF是0,ESI和EDI递增的,否则他们正在递减.
让我们以rep movsb依赖于方向标志的指令为例。
当执行a时rep movsb,您在中提供源地址,在esi中提供目的地地址edi,并计数ecx。处理器基本上执行循环。在正常情况下(方向标志清除时),它会递增,esi并且edi每次循环都会迭代,因此您将其初始化为指向要复制的源块和目标块的开头。执行时REP MOVSB,处理器会递增源地址和目标地址,直到到达要复制的块的末尾。
设置方向标志后,处理器将递减寄存器。这意味着您需要从它们开始,指向您要复制的内存块的末尾。它不是从头开始并复制到末尾,而是从头开始并向后复制直到到达头。