在检查 Intel x86 处理器的指令集时,我注意到有一些“直观”的指令,如“mov”、“add”、“mul”……而其他指令似乎有点不自然,如“sete”。这个问题更多是出于好奇而不是实际问题:为什么设计者会选择在单指令中实现特定的执行场景?您知道有什么阅读 Material 可以解释此类设计决策吗?
最佳答案
设计者用来决定“特定执行场景”是否是指令的合理候选者的一些标准:
无状态行为 - 操作必须仅依赖于执行时的操作数或其他可见的机器状态(例如算术标志)。不允许隐藏状态。此限制排除了在指令看似完成后仍保持忙碌状态的非阻塞指令。
有限的内存访问 - 内存访问通常是速率限制器。除了提高代码密度之外,如果由于内存瓶颈而执行相同的操作,则将离散操作组合成一条大指令是没有意义的。
计算上有趣 - 新指令应该比其他指令更有效地完成一些事情。 x86 AES 指令是极端的例子。像位混合这样相对简单的操作如果经常发生的话也很重要。
商业值(value) - 实现指令的芯片面积和验证工作是否能收回成本?
兼容性值 - 最后但并非最不重要的一点是,许多指令的存在只是为了支持旧版软件。
关于assembly - 一般而言,对于 x86 的 SETCC,CPU 指令集背后的基本原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380907/