7

我无法理解方向标志是如何工作的x86。我讲座中的文字说它增加减少目标寄存器,但它的名称没有意义。有人可以解释它的作用吗?

4

2 回答 2

11

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

对于字符串指令,ECX具有迭代次数、DS:ESI源地址和ES:EDI目标地址(因此有s inESId in EDI)。

每次迭代后,ECX减一,ESI并且EDI根据EFLAGS.DF.

如果EFLAGS.DF0,ESI并且EDI递增,否则递减。

于 2012-04-30T07:39:25.370 回答
5

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

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

当设置了方向标志时,处理器反而递减寄存器。这意味着您需要从它们指向您正在复制的内存块的末尾开始。它不是从头开始复制到结尾,而是从结尾开始并向后复制直到到达开头。

于 2012-04-30T07:43:46.773 回答