assembly - 一般而言,对于 x86 的 SETCC,CPU 指令集背后的基本原理是什么?

标签 assembly x86 cpu-architecture instruction-set instructions

在检查 Intel x86 处理器的指令集时,我注意到有一些“直观”的指令,如“mov”、“add”、“mul”……而其他指令似乎有点不自然,如“sete”。这个问题更多是出于好奇而不是实际问题:为什么设计者会选择在单指令中实现特定的执行场景?您知道有什么阅读 Material 可以解释此类设计决策吗?

最佳答案

设计者用来决定“特定执行场景”是否是指令的合理候选者的一些标准:

  1. 无状态行为 - 操作必须仅依赖于执行时的操作数或其他可见的机器状态(例如算术标志)。不允许隐藏状态。此限制排除了在指令看似完成后仍保持忙碌状态的非阻塞指令。

  2. 有限的内存访问 - 内存访问通常是速率限制器。除了提高代码密度之外,如果由于内存瓶颈而执行相同的操作,则将离散操作组合成一条大指令是没有意义的。

  3. 计算上有趣 - 新指令应该比其他指令更有效地完成一些事情。 x86 AES 指令是极端的例子。像位混合这样相对简单的操作如果经常发生的话也很重要。

  4. 商业值(value) - 实现指令的芯片面积和验证工作是否能收回成本?

  5. 兼容性值 - 最后但并非最不重要的一点是,许多指令的存在只是为了支持旧版软件。

关于assembly - 一般而言,对于 x86 的 SETCC,CPU 指令集背后的基本原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380907/

相关文章:

assembly - NASM的resb以二进制输出格式做什么?

cpu - 如何使用(读/写)CPU 缓存 L1、L2、L3

assembly - 比较汇编中的位

assembly - 什么是 MTMSREE PowerPC 操作?

linux - Linux 如何使用 PCID 的值?

cpu-registers - 英特尔 8086 : Why 4 memory segments

assembly - MIPS 和 ARM 数据路径之间的区别

c - 此汇编 x86 代码的反编译 (C) 代码构造是什么?

assembly - Intel x86手册中是否确实存在像直接/间接寻址模式这样的术语?

assembly - 英特尔 64 和 IA-32 |原子操作,包括获取/释放语义