一台计算机能够直接识别并执行的程序只能是机器语言程序。因此,任何问题无论使用哪一种计算机语言来编程实现,都必须通过翻译程序转换成对应的机器语言程序后才能执行。
机器语言程序是由机器指令序列组成的,它们产生各种控制信息的基础。
一台计算机的所有指令的集合构成该机的指令系统。指令系统即是软件设计者提供的最低层次的程序设计语言,也是硬件设计者的最基础的设计依据。因此,指令系统是软件和硬件的接口。
一、指令中的基本信息
计算机是通过执行指令来处理各种数据。为了指出所执行的操作、操作数的来源、操作数的结果去向,以及下一条指令从哪里取,一条指令一般应包含以下信息:
-
操作码:用来表示指令所要完成的操作,一台计算机可能有几十至几百条指令,每一条指令都有一个对应的操作码,CPU通过识别操作码来控制完成不同的操作,而操作码也是区别不同指令的重要依据。
-
操作数的地址:给出操作数存放处的地址,如主存单元地址或寄存器地址。CPU通过该地址可以获得所需的操作数。
-
操作结果的地址:把对操作数进行处理所产生的结果存放在该地址中,以便再次使用。
-
下一条指令地址:由于存储在主存储器中的程序是按指令执行顺序连续存放的,并且在大多情况下程序是顺序执行的,因此可以设计一共程序计数器PC专门存放指令地址,每取出一条指令后,PC自动增值指出下一条指令地址,这样就不需要指令中直接给出下一条指令的地址。当需要改变程序执行顺序时,可由转移类指令实现。
二、地址码结构
主要问题是一条指令中直接或间接指明几个地址:每个地址采用什么方式给出。
OP表示操作码;A1、A2、A3分别表示操作数1的地址、操作数2的地址、操作数3的地址,A1、A2和A3可以是主存单元地址或寄存器地址。
1. 三地址指令
| OP | A1 | A2 | A3 |
|---|---|---|---|
| 操作码 | 操作数1 | 操作数2 | 操作数3 |
2. 二地址指令
| OP | A1 | A2 |
|---|---|---|
| 操作码 | 操作数1 | 操作数2 |
3. 一地址指令
| OP | A1 |
|---|---|
| 操作码 | 操作数1 |
4. 零地址指令
| OP |
|---|
| 操作码 |
三、操作码结构
1. 固定长度操作码
操作码的长度固定,且集中放在指令字的一个字段中,指令的其余部分全部用于地址码。
2. 可变长度操作码
如果指令长度一定,则地址码与操作码的长度是相互制约的,为了解决这一矛盾,可采用扩展操作码的办法,即操作码和地址码位数补固定,操作码位数允许有几种不同的选择。
使用操作码拓展技术的一个重要原则是,使用频率(指在程序中出现的概率)高的指令应分配短的操作码;使用频率低的指令则分配较长的操作码。这样不仅有效的减少了操作码在程序中的总位数,节省了存储空间,而且还缩短了常用指令的译码时间。
3. 复合型操作码
在有的计算机中,因为指令字长有限,致使指令条数有限。为了使一条指令能表示更多的操作信息,采用复合型操作码,将操作码分为几个部分,它们组合使操作含义更丰富。