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