计算机组成原理——指令系统
指令概念
指令是指计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该计算机的指令系统,也称为指令集。
一台计算机只能够执行自己的指令集中的指令,通常不能执行其他架构的指令。如ARM的机器只能执行ARM指令集的指令,而不能执行X86架构指令集的指令,但是一些工程师会设计一些转译器,将X86的某些程序翻译成ARM指令的,从而实现在ARM机器上跑X86应用程序。
指令格式
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。一条指令通常包括操作码OP和地址码A两个部分。
操作码指明了用户要干什么,例如停机中断、加减乘除等;地址码指明了对谁进行操作。
一条指令可能包含多个地址码,根据地址码数目不同,可以分为零地址指令、一地址指令、二地址指令……
如果机器的指令长度固定不变,那么地址码数量越多,寻址能力就越差。
n位地址码寻址范围2n2^n2n
按地址数目分类
零地址指令
零地址指令不需要给出地址码。
通常有以下两种情况需要用零地址指令:
-
不需要操作数,如空操作、停机、关中断等指令。
-
堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶。
一地址指令
一地址指令需要一个地址码。
通常以下情况用到这种指令:
- 只需要单操作数,如加1、减1
OP(A1)→A1 OP(A_1)\to A_1 OP(A1)→A1
- 需要两个操作数,单其中一个隐含在寄存器中(如隐含在ACC)
(ACC)OP(A1)→ACC (ACC)OP(A_1)\to ACC (ACC)OP(A1)→ACC
A1A_1A1指某个主存地址,(A1)(A_1)(A1)表示存放的内容,下标表示操作码后跟的第1个地址码。
二地址指令
二地址指令后根两个地址码,第一个地址码A1A_1A1为目的操作数,第二个地址码为源操作数A2A_2A2。
二地址指令常用于需要两个操作数的算术运算、逻辑运算相关指令。
(A1)OP(A2)→A1 (A_1)OP(A_2)\to A_1 (A1)OP(A2)