指令系统

一、指令格式:

1.|操作码|地址码|
其中操作码告诉机器要做什么操作,而地址码存放的是操作数的地址或本身。

2.其中根据地址码数目不同分为五类:

1)四地址指令:
|操作码|A1|A2|A3|A4|
A1、A2为操作数的地址,A3为结果的存放地址,A4为下一条指令地址。

2)三地址指令:
|操作码|A1|A2|A3|
下一条指令的地址由PC寄存器中的现有地址直接加1形成。

3)二地址指令:
|操作码|A1|A2|
将A1与A2的操作所得结果放在A1或A2中。

4)一地址指令:
|操作码|A1|
包含两种情况:1.只有操作数的单操作数指令,如加1、取反、求补等等。2.另一个操作数的地址隐含是在ACC累加寄存器中,将两个数相加后结果也放在ACC中。

5)零地址指令:
包含两种情况:1.不含操作数的指令,如空操作指令、停机指令、关中断指令等。2.堆栈计算机中的零地址运算类指令。堆栈计算机中参与运算的两个操作数隐含地从栈顶和次栈顶弹出,送到运算器运算,结果再压入栈中。

假设指令长度为32位,若随着地址的减少而指令长度位数不变则为定长指令,否则为变长指令。
而如果操作码部分位数始终不变,则随着地址码的数目的减少,定长指令地址码部分位数变长,所表示的地址范围也变多。如二地址指令中操作码8位,则每个地址码占12位,寻址范围为212,而一地址指令寻址范围为224

2.而在定长指令格式中又根据操作码长度的变化分为定长操作码指令格式不定长操作码指令格式

1)定长操作码指令格式中若操作码有n位,则能表示的指令有2n条。

2)不定长操作码指令格式:

|操作码|A1|A2|A3|(假设指令格式为左边的格式,而每个有4位)
则操作码表示范围本应该为0000 ~1111,而现在保留1111作为下次扩展,则操作码表示的范围为0000 ~ 1110。当计算机遇到操作码为1111说明A1的4位也留作指令部分而不是数据的地址,同样A1范围为 (1111) 0000 ~ (1111) 1110,同样当A1为1111代表A2也作为指令位。这样,指令表示的范围就变大了。

现在操作码位数增加了,自然的要减少地址码的位数。于是产生了不同的地址码寻址(操作数寻址)。

二、指令寻址

1.操作数寻址:由于操作数不同的寻址方式,所以在指令中设置了寻址特征来表示是什么寻址。而此时的地址是形式地址,就是根据某种寻址方式加上形式地址。EA为有效地址。而(M)代表M寄存器中的内容,M代表寄存器M的地址。

|操作码|寻址特征|形式地址A|

1)立即寻址:
形式地址为操作数本身,而寻址特征为‘#’表示立即寻址。只需要取出指令,就可以获得操作数,所以只需要一次访存。 但是由于操作数表示的范围受形式地址位数的限制。

用途:例如
1)作为数组首地址送入PC中。
2)当需要循环次数的时候可以将循环次数作为立即数送入。
总之:通常用于对某种寄存器或内存单元的初始化。

2)直接寻址:
形式地址为操作数的主存地址。简单方便寻找,但是操作数的寻址范围受形式地址的位数限制。访存两次,一次取出指令,一次找到操作数。
EA = A
指令系统

3)隐含寻址:
通常隐含操作数的地址在ACC寄存器中。
指令系统
4)间接寻址:
形式地址是操作数在主存中的地址的地址。EA = (A)。
指令系统
5)寄存器寻址:
将操作数地址放在寄存器中。因为寄存器存取速度比主存快,而且寄存器比较少,所以形式地址的位数可以减少。需要一次访存,一次取指令。
EA = IR
指令系统
6)寄存器间接寻址:寄存器存放的是操作数的地址的地址,这样可以扩大寻址范围。需要两次访存,一次取指令,一次访问操作数的地址的地址所在存储单元的内容。
EA =(IR)
指令系统

7)基址寻址:
由操作系统来规定基址寄存器BR的内容,用户无法修改,但是用户有权知道基址寄存器使用的是哪个寄存器。
EA = (BR) + A
基址寄存器给出一个基础的地址,有效地址为基础地址加上形式地址。如假设地址为1000,本来程序的地址为0~99,但是现在要把这个程序放在1000 ~ 1099号存储单元,那么只需要加上一个基址就可以了。便于在多道程序中使用。

8)变址寻址:
形式地址不变,用户可以改变变址寄存器IX中的内容。这样地址可以不断的相对形式地址变化,这样形式地址可以存放数组的首地址,而数组中每个元素的地址可以相对形式地址加N。
EA = (IX) + A
用途:
1)可以扩大寻址范围,前提是变址寄存器中的位数大于形式地址的位数。
2)非常适合处理数组问题和循环程序。

9)相对寻址:
基于程序的局部性原理,将PC程序计数器的内容与指令中的形式地址相加:EA=(PC)+A
指令系统
用途:
1)用于转移类指令。
2)便于编制浮动程序

相关文章: