人们习惯把每一条机器语言的语句称为机器指令,将全部机器指令的集合称为机器的指令系统。指令系统反映了机器的功能,与机器的硬件有关。
操作码字段 | 地址码字段 |
---|
指令由操作码和地址码两部分组成
四地址:
OP | A1 | A2 | A3 | A4 |
---|
OP为操作码; A1 为第一操作数地址; A2 为第二操作数地址; A3 为结果地址; A4 为下一条指令的地址
三地址:
用PC代替A4,将后续指令的地址隐含在程序计数器PC中
OP | A1 | A2 | A3 |
---|
OP为操作码; A1 为第一操作数地址; A2 为第二操作数地址; A3 为结果地址
二地址:
用 A1 或 A2 代替 A3,即在运算结束后将运算结果放入操作数地址中
OP | A1 | A2 |
---|
OP为操作码; A1 为源操作数地址 (和运算结果地址); A2 为源操作数地址 (和运算结果地址)
一地址:
用 ACC 代替 A1 或 A2,即ACC既存放参与运算的操作数,又存放运算的中间结果
OP | A1 |
---|
OP为操作码; A1 为源操作数地址
零地址:
无地址码的指令地址,例如空操作、停机这类指令只有操作码,没有地址码
当用一些硬件资源代替指令字中的地址码字段后
- 可扩大指令操作数的寻址范围
- 可缩短指令字长
- 可减少访存次数
指令字长取决于:
不同的机器指令字长不同,指令字长可以是固定的 (指令字长 = 存储字长),也可以是可变的 (按字节的倍数变化)
寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,它与硬件结构有关,而且直接影响指令格式和指令功能。
寻址方式分为指令寻址和数据寻址两大类。
指令寻址比较简单,分为顺序寻址和跳跃寻址两种。
(PC) +1 --> PC
数据寻址的方式种类较多,因此在指令字中必须设一字段来指明属于哪种寻址方式。指令的地址码字段通常不代表操作数的真实地址,把它称为形式地址,记作A。操作数的真实地址称为有效地址,记作EA,它是由寻址方式和形式地址共同确定的。指令格式如下:
操作码 | 寻址特征 | 形式地址A |
---|
1. 立即寻址
特点:
形式地址A不是操作数的地址,而是操作数本身,又称为立即数。
优点:
速度快(不访存,可立即获得操作数)
缺点:
A 的位数限制了立即数的范围
2. 直接寻址
特点:
形式地址A就是操作数的真实地址EA,即 EA = A
优点:
寻找操作数简单(执行阶段访问一次存储器)
缺点:
A 的位数决定了该指令操作数的寻址范围, 并且操作数的地址不易修改(必须修改A)
3. 隐含寻址
特点:
操作数的地址隐含在操作码或某个寄存器中
优点:
指令字中少了一个地址字段,可缩短指令字长
4. 间接寻址
特点:
形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储地址。EA = (A) 有效地址由形式地址间接提供
优点:
扩大了操作数的寻址范围, 便于编制程序
5. 寄存器寻址
(广泛应用)特点:
有效地址即为寄存器编号
优点:
1. 执行阶段不访存,只访问寄存器,执行速度快(所有寻址方式中最快的一种)
2. 因为计算机中寄存器个数有限,所以指令字较短,可缩短指令字长,节省了存储空间
6. 寄存器间接寻址
特点:
Ri中的内容不是操作数,而是操作数所在主存单元的地址号,即有效地址在寄存器中, 操作数在存储器中,执行阶段访存。EA = ( Ri )
优点:
便于编制循环程序
7. 基址寻址
特点:
1. 有效地址等于指令字中的形式地址与基址寄存器中的内容(基地址)相加。EA = ( BR ) + A。
2. 基址寄存器的内容由操作系统给定,且在程序的执行过程中不可变。
优点:
可扩大操作数的寻址范围, 有利于分段管理
8. 变址寻址
特点:
1. 有效地址等于指令字中的形式地址与变址寄存器中的内容相加。EA = ( IX ) +A
2. 变址寄存器的内容由用户给定,且在程序的执行过程中可变。
优点:
可扩大寻址范围,便于处理数组问题
9. 相对寻址
特点:
1. 有效地址等于指令字中的形式地址与程序计数器PC中的内容(即当前指令地址)相加。 EA = ( PC ) + A
2. 形式地址A相对于当前指令的位移量(可正可负,补码)
3. 转移地址不固定,可随PC值的变化而变,广泛用于转移指令。
缺点:
A 的位数决定操作数的寻址范围
10. 堆栈寻址
堆栈:
用作数据暂时存储的一组寄存器或存储单元称为堆栈。
堆栈的特点:
硬堆栈: 多个寄存器; 软堆栈: 指定的存储空间
栈顶地址由堆栈指针SP指出
为了继承已有的软件,必须考虑新机器的指令系统与同一系列机器指令系统的兼容性,即高档机必须能兼容低档机的程序运行,称之为“向上兼容”。
设计指令格式需要考虑的因素:
RISC 即 精简指令系统计算机,与其对应的是CISC 复杂指令系统计算机。
为了解决日益复杂的计算机的运算速度问题,人们研究CISC发现了80-20 规律,即典型程序中 80% 的语句仅仅使用处理机中 20% 的指令。
这就导致执行频度高的简单指令,因复杂指令的存在,执行速度无法提高。那么能否用 20% 的简单指令组合不常用的 80% 的指令功能呢?这便引发出RISC技术。
(完)