我无法理解方向标志是如何工作的x86
。我讲座中的文字说它增加或减少源或目标寄存器,但它的名称没有意义。有人可以解释它的作用吗?
user379888
问问题
7549 次
2 回答
11
此标志用于字符串操作,并指定字符串是否从低地址开始并继续到更高地址,反之亦然。
对于字符串指令,ECX
具有迭代次数、DS:ESI
源地址和ES:EDI
目标地址(因此有s inESI
和d in EDI
)。
每次迭代后,ECX
减一,ESI
并且EDI
根据EFLAGS.DF
.
如果EFLAGS.DF
是0
,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 回答