x86中的方向标志

时间:2012-04-30 07:36:54

标签: assembly x86 microprocessors

我无法理解方向标志在x86中的工作原理。我的讲座中的文字说增量减少 来源目的地注册,但这没有意义以它的名字。有人可以解释它的作用吗?

2 个答案:

答案 0 :(得分:7)

此标志用于字符串操作,并指定字符串是从低地址开始并继续到更高地址,反之亦然。

对于字符串说明,ECX具有迭代次数,DS:ESI具有源地址,ES:EDI具有目标(因此{em> s 在{{ 1}}和ESI中的 d

每次迭代后,EDI递减1,ECXESI递增或递减元素大小(1表示字节操作,2表示字操作等)根据{{​​1}}。

如果EDIEFLAGS.DF,则EFLAGS.DF0会递增,否则会递减。

答案 1 :(得分:4)

让我们以rep movsb为例依赖于方向标志的指令。

当您执行rep movsb时,您会在esi中提供源地址,在edi中提供目标地址,并在ecx中计数。处理器基本上执行循环。在正常情况下(当方向标志清除时)它会在循环的每次迭代中递增esiedi,因此您将它们初始化为指向要复制的源块和目标块的开头。执行REP MOVSB时,处理器会递增源地址和目标地址,直到它到达正在复制的块的末尾。

当设置方向标志时,处理器会递减寄存器。这意味着您需要从指向要复制的内存块的 end 开始。它不是从头开始并复制到最后,而是从最后开始,然后向后复制,直到它开始。