什么是机器指令?

What exactly is a machine instruction?

The user's program in main memory consists of machine instructions and data. In contrast, the control memory holds a fixed microprogram that cannot be altered by the occasional user. The microprogram consists of microinstructions that specify various internal control signals for execution of register microoperations. Each machine instruction initiates a series of micro instructions in control memory. These microsinstructions generates microoperations to fetch the instruction for main memory; to evaluate the effective address, to execute the operation specified by the instruction, and to return control the fetch phase in order to repeat the cycle for the next instruction

我不是很明白机器指令、微指令和微操作之间的区别。我当然明白,根据给定的段落,微指令是中级指令,但其他 2 条指令中哪一条更接近机器语言。 CLA、ADD、STA、BUN、BSA、AND等是机器指令还是微操作?

我想你的问题的答案就在这三句话中:

  • The user's program in main memory consists of machine instructions and data
  • Each machine instruction initiates a series of micro-instructions in control memory.
  • These micro-instructions generate micro-operations.

所以:

  • 用户提供机器指令
  • 那些被翻译成微指令
  • 那些被转化为微操作

您提到的助记符是用户可能用来编写或读取机器指令列表的内容(实际指令只是处理器理解的位模式)。 “临时用户”(即芯片设计者以外的所有人)从不需要直接处理微指令或微操作,因此永远不会知道他们的个人名称。

一个 CPU 向外界展示自己是一个能够执行 机器指令 的设备。例如,

mov (%esi,%ebx,4), %edx

是一条机器指令,它将地址 ESI+4*EBX 处的 4 个字节的数据移动到寄存器 EDX 中。 机器指令是 public - 它们由 CPU 制造商在用户手册中发布。 gcc 等编译器将输出包含机器指令的文件,这些文件通常以 EXE/DLL 个文件结束。

如果你仔细看上面的指令,你会发现这是一个相当复杂的操作。它涉及一些算术(乘法和加法)来获取内存地址,然后将数据从该地址移动到寄存器中。从CPU的角度来看,使用已经存在的算术单位也是有意义的。所以把这条指令分解成条微指令就很自然了。本质上,mov指令是由CPU在内部实现为用微指令编写的微程序。然而,这是 CPU 的一个实现细节。 微指令是 CPU 内部的,除 CPU 制造商外,任何人都看不到它们。

微指令有几个好处:

  • 他们简化了内部 CPU 架构、设计和测试,从而降低了单位成本
  • 它们使创建丰富而强大的机器指令集变得容易(您只需要以不同的方式组合微指令)
  • 它们在不同的 CPU 之间提供一致的机器语言(例如 Xeon 和 Pentium 都实现了基本的 x86_64 指令集,尽管它们在硬件上有很大不同)
  • 创建优化(即一个 CPU 上的相同指令可以由硬件实现,另一个可以在微指令中模拟)
  • 修复错误(例如,您可以在机器处于 运行 且无需购买新的 CPU 并打开服务器的情况下修复 Spectre 漏洞)

有关详细信息,请参阅 https://en.wikipedia.org/wiki/Micro-operation