我无法理解方向标志在x86
中的工作原理。我的讲座中的文字说增量或减少 来源或目的地注册,但这没有意义以它的名字。有人可以解释它的作用吗?
答案 0 :(得分:7)
此标志用于字符串操作,并指定字符串是从低地址开始并继续到更高地址,反之亦然。
对于字符串说明,ECX
具有迭代次数,DS:ESI
具有源地址,ES:EDI
具有目标(因此{em> s 在{{ 1}}和ESI
中的 d 。
每次迭代后,EDI
递减1,ECX
和ESI
递增或递减元素大小(1表示字节操作,2表示字操作等)根据{{1}}。
如果EDI
为EFLAGS.DF
,则EFLAGS.DF
和0
会递增,否则会递减。
答案 1 :(得分:4)
让我们以rep movsb
为例依赖于方向标志的指令。
当您执行rep movsb
时,您会在esi
中提供源地址,在edi
中提供目标地址,并在ecx
中计数。处理器基本上执行循环。在正常情况下(当方向标志清除时)它会在循环的每次迭代中递增esi
和edi
,因此您将它们初始化为指向要复制的源块和目标块的开头。执行REP MOVSB
时,处理器会递增源地址和目标地址,直到它到达正在复制的块的末尾。
当设置方向标志时,处理器会递减寄存器。这意味着您需要从指向要复制的内存块的 end 开始。它不是从头开始并复制到最后,而是从最后开始,然后向后复制,直到它开始。