什么是机器指令?
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 漏洞)
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 漏洞)