CPU 将自己呈现为能够执行机器指令的设备。例如,
mov (%esi,%ebx,4), %edx
是将地址 ESI+4*EBX 处的 4 个字节数据移动到寄存器 EDX中的机器指令。机器指令是公开的——它们由 CPU 制造商在用户手册中发布。gcc 等编译器将输出包含机器指令的文件,这些文件通常以 EXE/DLL 文件结尾。
如果您仔细查看上面的说明,您会发现这是一个相当复杂的操作。它涉及一些算术(乘法和加法)来获取内存地址,然后将数据从该地址移动到寄存器中。从 CPU 的角度来看,使用已经存在的算术单元也是有意义的。因此,将这条指令分解为微指令是很自然的。本质上,mov
指令是由 CPU 在内部实现为用微指令编写的微程序。然而,这是 CPU 的实现细节。微指令是 CPU 内部的,除了 CPU 制造商之外,任何人都看不到它们。
微指令有几个好处:
- 它们简化了内部 CPU 架构、设计和测试,从而降低了单位成本
- 它们使创建丰富而强大的机器指令集变得容易(您只需以不同的方式组合微指令)
- 它们在不同的 CPU 上提供一致的机器语言(例如,Xeon 和 Pentium 都实现了基本的 x86_64 指令集,尽管它们在硬件上非常不同)
- 创建优化(即一个 CPU 上的相同指令可以由硬件实现,另一个可以在微指令中模拟)
- 修复错误(例如,您可以在机器运行时修复 Spectre 漏洞,而无需购买新的 CPU 并打开您的服务器)
有关更多信息,请参阅https://en.wikipedia.org/wiki/Micro-operation