计算机根据提供的指令执行任务。计算机中的指令包括称为字段的组。这些字段包含不同的信息,因为对于计算机来说,一切都在 0 和 1 中,因此每个字段都有不同的意义,CPU 决定执行什么。最常见的字段是:
- 操作字段指定要执行的操作,如加法。
- 地址字段,其中包含操作数的位置,即寄存器或内存位置。
- 指定如何建立操作数的模式字段。
指令长度可变,取决于它包含的地址数量。通常,CPU 组织根据地址字段的数量分为三种类型:
- 单累加器组织
- 一般注册机构
- 堆栈组织
在第一个组织中,操作涉及一个称为累加器的特殊寄存器。其次,多个寄存器用于计算目的。在第三种组织中,基于堆栈操作的工作由于它不包含任何地址字段。只需要应用一个组织,我们通常看到的大多是各种组织的混合。
根据地址的数量,指令分为:
请注意,我们将使用 X = (A+B)*(C+D) 表达式来展示该过程。
- 零地址指令 –
1.基于堆栈的计算机不使用指令中的地址字段。为了首先评估一个表达式,它被转换为尊敬的波兰表示法,即后缀表示法。
Expression: X = (A+B)*(C+D)
Postfixed : X = AB+CD+*
TOP means top of stack
M[X] is any memory location
PUSH | A | TOP = A |
PUSH | B | TOP = B |
ADD | TOP = A+B | |
PUSH | C | TOP = C |
PUSH | D | TOP = D |
ADD | TOP = C+D | |
MUL | TOP = (C+D)*(A+B) | |
POP | X | M[X] = TOP |
2 .One 地址说明 –
这使用隐含的 ACCUMULATOR 寄存器进行数据操作。一个操作数在累加器中,另一个在寄存器或内存位置中。隐含意味着 CPU 已经知道一个操作数在累加器中,因此无需指定它。
Expression: X = (A+B)*(C+D)
AC is accumulator
M[] is any memory location
M[T] is temporary location
LOAD | A | AC = M[A] |
ADD | B | AC = AC + M[B] |
STORE | T | M[T] = AC |
LOAD | C | AC = M[C] |
ADD | D | AC = AC + M[D] |
MUL | T | AC = AC * M[T] |
STORE | X | M[X] = AC |
3.两个地址说明——
这在商用计算机中很常见。这里可以在指令中指定两个地址。与前面的一条地址指令不同,结果存储在累加器中,这里的结果可以存储在不同的位置而不仅仅是累加器,但需要更多的位来表示地址。
这里目标地址也可以包含操作数。
Expression: X = (A+B)*(C+D)
R1, R2 are registers
M[] is any memory location
MOV | R1, A | R1 = M[A] |
ADD | R1, B | R1 = R1 + M[B] |
MOV | R2, C | R2 = C |
ADD | R2, D | R2 = R2 + D |
MUL | R1, R2 | R1 = R1 * R2 |
MOV | X, R1 | M[X] = R1 |
4.三个地址说明——
这有三个地址字段来指定一个寄存器或一个内存位置。创建的程序大小很短,但每条指令的位数增加。这些指令使程序的创建更容易,但并不意味着程序会运行得更快,因为现在指令只包含更多信息,但每个微操作(更改寄存器内容,加载地址总线中的地址等)都将在一个周期内执行只要。
Expression: X = (A+B)*(C+D)
R1, R2 are registers
M[] is any memory location
ADD | R1, A, B | R1 = M[A] + M[B] |
ADD | R2, C, D | R2 = M[C] + M[D] |
MUL | X, R1, R2 | M[X] = R1 * R2 |