gpt4 book ai didi

delphi - CLD 在这里做什么?

转载 作者:行者123 更新时间:2023-12-03 18:13:52 24 4
gpt4 key购买 nike

我看过代码

procedure FillDWord(var Dest; Count, What: dword); assembler ;
asm
PUSH EDI
MOV EDI, Dest
MOV EAX, What
MOV ECX, Count
CLD
REP STOSD
POP EDI
end;

我用谷歌搜索了 CLD,它说它清除了方向标志……所以它在这里很重要吗?在我删除它之后,该功能似乎工作正常。

最佳答案

方向标志控制在 REP STOSD 执行期间,EDI 寄存器是否递增或递减。

在清除方向标志的情况下(例如,在执行 CLD 之后)指针将递增,因此函数会填充内存。

CLD 在此代码中,因为程序员可能无法保证方向标志已被清除。因此,他确保在执行 REP STOSD 之前将其清除。

如果删除 CLD 后代码有效,则方向标志在函数入口处已清除。由于方向标志不是幸运的调用约定的一部分。下次可能是相反的,在这种情况下你的程序很可能会崩溃。

清除/设置标志是一个非常快速的操作,因此最好将它们添加到汇编代码中。这也使其他程序员更容易理解您的函数,因为方向标志的状态是明确定义的。

关于delphi - CLD 在这里做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21387912/

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