# A.5 指令集中的操作
<!-- source: p0682 -->

多数指令集体系结构支持的操作，可以按图 A.12 分类。对各种体系结构都适用的一条经验法则是：执行最频繁的通常是指令集中的简单操作。例如，在流行的 Intel 80x86 上运行一组整数程序时，图 A.13 中的 10 条简单指令占全部执行指令的 96%。因此，实现这些指令时应确保它们足够快，因为它们就是最常见的情形。

如前所述，图 A.13 的指令存在于面向各种应用——桌面、服务器、嵌入式——的每一种计算机中。图 A.12 中各类操作的差异，主要取决于指令集包含哪些数据类型。

| 操作类型 | 示例 |
| --- | --- |
| 算术与逻辑 | 整数算术、逻辑操作：加、减、与、或、乘、除 |
| 数据传送 | 加载、存储；在支持存储器寻址的计算机上为 move 指令 |
| 控制 | 分支、跳转、过程调用与返回、陷阱 |
| 系统 | 操作系统调用、虚拟存储器管理指令 |
| 浮点 | 浮点加法、乘法、除法、比较 |
| 十进制 | 十进制加法、乘法、十进制数与字符转换 |
| 字符串 | 字符串传送、比较、搜索 |
| 图形 | 像素与顶点操作、压缩／解压缩操作 |
{#fig-A.12 .wide .expand num="A.12" caption="指令操作的类别与实例。一般而言，所有计算机都完整提供前三类操作。不同体系结构对系统功能的指令支持差异很大，但都必须为基本系统功能提供一定支持。最后四类可以完全不支持，也可以提供大量专用指令。面向大量浮点运算应用的计算机会提供浮点指令，有时作为可选指令集。十进制和字符串操作可以是原生指令，如 VAX 或 IBM 360；也可以由编译器用更简单的指令合成。图形指令通常并行处理多个小数据项，例如对两个 64 位操作数执行八次 8 位加法。"}

<!-- source: p0683 -->

| 排名 | 80x86 指令 | 整数程序平均占比（占执行指令总数） |
| ---: | --- | ---: |
| 1 | 加载（Load） | 22% |
| 2 | 条件分支（Conditional branch） | 20% |
| 3 | 比较（Compare） | 16% |
| 4 | 存储（Store） | 12% |
| 5 | 加法（Add） | 8% |
| 6 | 按位与（And） | 6% |
| 7 | 减法（Sub） | 5% |
| 8 | 寄存器间传送（Move register-register） | 4% |
| 9 | 调用（Call） | 1% |
| 10 | 返回（Return） | 1% |
| | **总计** | **96%** |
{#fig-A.13 .wide .expand num="A.13" caption="80x86 使用最多的 10 条指令。简单指令占主导地位，合计占执行指令的 96%。百分比是五个 SPECint92 程序的平均值。"}

> **译注：** 原表所列已舍入百分比相加为 95%，原表总计与图注均为 96%。
