计算机根据提供的指令执行任务。计算机中的一条指令由称为字段的组组成。这些字段包含与计算机不同的信息,每件事都在0和1中,因此每个字段具有不同的重要性,CPU会根据这些重要性来决定要执行的操作。最常见的字段是:
- 操作字段,指定要执行的操作(如加法)。
- 地址字段,其中包含操作数的位置,即寄存器或存储器的位置。
- 模式字段,指定如何建立操作数。
一条指令的长度各不相同,具体取决于它包含的地址数。通常,根据地址字段的数量,CPU的组织分为三种类型:
- 单一累加器组织
- 通用登记机构
- 堆栈组织
首先,组织工作涉及一个称为累加器的特殊寄存器。其次,多个寄存器用于计算目的。在第三个组织中,基于堆栈的操作不包含任何地址字段,因此无法进行任何操作。我们通常看到的是,不必只应用单个组织,而是将各种组织混合在一起。
根据地址数,指令分为:
请注意,我们将使用X =(A + B)*(C + D)表达式来演示该过程。
- 零地址说明–
基于堆栈的计算机不使用指令中的地址字段。要首先对表达式求值,将其转换为显示波兰语表示法,即后期修正表示法。
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 - 一个地址说明–
这使用一个隐含的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 - 两个地址说明–
这在商用计算机中很常见,可以在指令中指定两个地址,与前面的一条地址指令不同,结果存储在累加器中,这里结果存储在不同的位置而不是仅存储在累加器中,但是需要更多的位来表示地址。
此处目标地址也可以包含操作数。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 - 三个地址说明–
它具有三个地址字段,用于指定寄存器或存储位置。创建的程序大小很短,但是每条指令的位数增加了。这些指令使程序的创建变得容易得多,但这并不意味着程序将运行得更快,因为现在指令仅包含更多信息,但是每个微操作(更改寄存器的内容,在地址总线中加载地址等)将在一个周期内执行。只要。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