gpt4 book ai didi

assembly - 选择 EFLAGS 位的概率

转载 作者:行者123 更新时间:2023-12-04 15:30:21 29 4
gpt4 key购买 nike

我们都知道,在查看源代码时,可以安全地假设方向标志是明确的。方向标志的概率很低。

我想了解其他标志的概率。这就是为什么我编写了一个测试程序来单步执行我现有的一些软件,为前 12 个 EFLAGS 位中的每一个增加一个计数器。

Probability of x86 processor flags

结果证实了关于方向标志 (DF) 的假设,并且毫不奇怪地表明溢出标志 (OF) 的概率非常低。

但是其他标志呢?进位标志 (CF)、辅助标志 (AF)、零标志 (ZF) 和符号标志 (SF) 似乎稳定在 25%,但奇偶标志 (PF) 跳出远远超过 50%。

我想知道为什么 CF、AF、ZF 和 SF 的概率如此之低。

对于 PF,我自己的两分钱解释告诉我,鉴于所有可能的 8 位位模式中奇偶校验和奇偶校验的 50-50 分布,并且意识到几个最常用的数字(0 和 -1)具有即使平价,超过 50% 的机会也是合理的。

最佳答案

某些 EFLAGS 位被更改的事实通常仅反射(reflect)了早期 Intel 8086 指令(顺便说一句仍然非常常用的指令)旨在无条件更新标志的事实。该设计决策并没有得到很好的返回,但在有人使用标志值之前,它也不会损害现代 x86 设计。标志的使用(作为条件分支的谓词)会在代码流中产生依赖性,并且可能会影响性能。

如果有两条(三、四……)条指令因此更新了相同的标志位,但只有最后一个值被第三条指令稍后使用,则可以省略所有先前的标志计算。或者,可以延迟 E​​FLAGS 的重新计算,直到某些东西要求其实际值。

因此,使用单个 EFLAG 位的频率是一个更有趣的问题。有研究可以回答这个问题。

下图来自 Yair Lifshitz 等人。 “Zsim:用于 ISA 设计空间探索的快速架构模拟器”第 3.2.3 节 PDF :

EFLAGS use

如您所见,没有人关心辅助标志,而进位和零标志会影响代码中的许多决策。其他作者得出了类似的结论,这在例如的背景下很重要。软件模拟设计,因为它们允许在二进制翻译器和解释器中应用惰性标志评估的重要优化。

关于assembly - 选择 EFLAGS 位的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490225/

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