gpt4 book ai didi

assembly - x86 汇编语言中的 CLD 和 STD 有何用途? DF是做什么的?

转载 作者:行者123 更新时间:2023-12-02 13:32:20 24 4
gpt4 key购买 nike

嗯,我知道 CLD 清除方向标志,STD 设置方向标志。但是设置和清除方向标志有什么意义呢?

最佳答案

方向标志用于影响字符串指令偏移指针寄存器的方向。这些是可以使用的相同指令 with the REP prefix重复该操作。 (尽管 lods 对于 rep 来说不是很有用)。

字符串指令为:MOVS (将mem复制到mem),STOS(存储AL/AX/EAX/RAX),SCAS(扫描字符串),CMPS(比较字符串) )和LODS(加载字符串)。还有用于在内存和 IO 端口之间进行复制的 ins/outs。这些指令均提供字节、字、双字和四字操作数大小。

简而言之,当方向标志为 0 时,指令通过在每次迭代后递增指向数据的指针来工作(直到 ECX 为零或其他条件,具体取决于指令的风格) REP 前缀),如果标志为 1,则指针递减。

例如,movsd将一个双字从 [ds:esi] 复制到 [es:edi] (或 64 位模式下的 rdi),并执行以下操作:(请参阅“操作”部分在从英特尔 PDF 中提取的链接 ISA 引用手册条目中)

dword [es:edi] = dword [ds:esi]      // 4-byte copy memory to memory
if (DF == 0)
esi += 4;
edi += 4;
else // DF == 1
esi -= 4;
edi -= 4;
fi

使用 REP 前缀,它会执行此 ECX 次,并且现代 x86 CPU 已优化“快速字符串”微代码,该微代码使用 16 字节或 32 字节内部进行复制(或 stos 存储)操作。另请参阅this Q&A about memory bandwidth and the ERMSB feature 。 (请注意,只有 rep stosrep movs 以这种方式优化,而不是 repne/repe scascmps) .

关于assembly - x86 汇编语言中的 CLD 和 STD 有何用途? DF是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com