我们都知道,在查看源代码时,一个安全的假设是,方向标志将是清晰的。方向标志的概率很低。
我想知道其他旗帜的可能性。这就是为什么我编写了一个测试程序,对我现有的一些软件进行单个步骤,为前12个EFLAGS位中的每一个增加一个计数器。

结果证实了关于方向标志(DF)的假设,并且毫不奇怪地表明溢出标志( of )的概率很低。
但是其他的旗帜呢?进位标志(CF)、辅助标志(AF)、零标志(ZF)和符号标志(SF)似乎稳定在25%,但奇偶校验标志(PF)在50%以上跳出。
我想知道为什么CF,AF,ZF,SF的概率如此之低。
对于PF,我自己的2美分解释告诉我,考虑到奇偶奇偶和奇偶在所有可能的8位位模式中的分布,并且意识到几个最常用的数字(0和-1)具有奇偶偶数,超过50%的概率是合理的。
发布于 2018-02-22 22:28:26
某些EFLAGS位经常被更改,这一事实仅仅反映了这样一个事实:早期的Intel 8086指令(顺便说一句仍然是经常使用的指令)被设计成无条件地更新标志。这个设计决定没有很好的效果,但它也不会损害现代的x86设计,直到有人使用标志的值。使用标志(作为条件分支的谓词)会在代码流中创建依赖项,它可能会影响性能。
如果有两个(3,4…)因此,第三条指令更新相同的标志位,但只使用最后一个值的指令,则可以省略所有先前的标志计算。或者,EFLAGS的重新计算可以推迟到某物要求它的实际值。
因此,使用单个EFLAG位的频率是一个更有趣的问题。有一些研究可以回答这个问题。
以下图片取自Yair等人。"Zsim:一种用于ISA设计-空间探索的快速建筑模拟器“3.2.3节PDF格式

正如您所看到的,没有人关心辅助标志,而进位和零标志会影响代码中的许多决策。其他作者也得出了类似的结论,这些结论在软件仿真设计中很重要,因为它们允许在二进制翻译和口译中应用一个重要的惰性标志评估优化。
https://stackoverflow.com/questions/48490225
复制相似问题