7.1机器指令
7.1.1指令的一般格式
1.指令
指令:用二进制代码表示的结构形式,由操作码和地址码两部分组成
2.操作码
①指明该指令所要完成的操作
操作码的位数反映了机器的操作种类
②扩展操作码技术
在指令格式中,采用扩展操作码设计方案的目的是:保持指令字长度不变而增加指令的数量
操作码的位数随地址数的减少而增加(指令长度固定)
在设计指令系统时,尽量安排使用频度高的指令占用短的操作码,以缩短指令译码时间
3.地址码
设指令字长为32位,操作码固定为8位
*记住访存次数
①四地址
②三地址
③二地址
④一地址
⑤零地址
无地址码
注:当指令的地址字段为寄存器时:
当用一些硬件资源代替指令字中的地址码字段后:
①可扩大指令操作数的寻址范围
②可缩短指令字长
③可减少访存次数
7.1.2指令字长
指令字长取决于:操作码的长度、操作数地址的长度、操作数地址的个数
1.指令字长 固定
指令字长=机器字长=存储字长
2.指令字长 可变
半字长、单字长、双字长、多字长
7.2操作数类型和操作类型
7.2.1操作数类型
7.2.2数据在存储器中的存放方式
1.从任意位置开始(不对准边界)
以小端存储为例:
则不对准边界存放方式如下:
2.从存储字的起始位置开始
3.对准边界
数据存放的起始位置是数据长度的整数倍
注:数据长度根据编址单位计算,若数据为16位,可按字节编址,则数据长度为16/8=2
7.3寻址方式
7.3.1指令寻址
1.顺序寻址
(PC)+1—>PC
根据编址方式和指令长度不同,1是虚指(1个指令字长度)
2.跳跃寻址
PC的内容由转移指令给出
注:JMP即为转移指令
7.3.1数据寻址
寻址特征标识了有多少种寻址方式
寻址范围大于等于0 ???
立即数的范围用补码表示???
1.立即寻址
形式地址A就是操作数,所以在指令执行阶段不访存,执行速度最快
A的位数限制了立即数的范围
2.直接寻址
EA=A 有效地址由形式地址直接给出
执行阶段访问一次存储器
A的位数决定了该指令操作数的寻址范围
操作数的地址不易修改(必须修改A)
3.隐含寻址
操作数地址隐含在操作码中
指令字中少了一个地址字段,可缩短指令字长
4.间接寻址
EA=(A) 有效地址由形式地址间接提供
当多次间接寻址时,可用存储字的首位来标志间接寻址是否结束,当存储字首位为1时,标明还需要继续访存寻址;当存储字首位为0时,标明该存储字即为EA,由此可见,存储字首位不能作为EA的组成部分,因此,寻址范围会比一次间接寻址的范围少一位
注:此方式操作数寻址范围为2的主存存储字长次方,不由形式地址A的范围决定
5.寄存器(直接)寻址
EA=Ri 有效地址即为寄存器编号
执行阶段不访存,只访问寄存器,执行速度快
寄存器个数有限,可有效缩短指令字长
6.寄存器间接寻址
EA=(Ri) 有效地址在寄存器中
注:
操作数寻址范围由主存字长有关
有效地址在寄存器中,操作数在存储器中,执行阶段访存
7.偏移寻址
①直接寻址和寄存器间接寻址方式的结合
②有效地址EA=A+(R)
A是显式的形式地址字段,又称为位移量,常用补码表示
R可以是显式的,也可以是隐含的某个专用的寄存器
③常用的偏移寻址
④偏移寻址通过某个寄存器内容与一个形式地址相加而生成有效地址
8.基址寻址
①采用专用寄存器作为基址寄存器BR—隐式基址寻址
EA=(BR)+A
②采用通用寄存器作基址寄存器—显式基址寻址
EA=(R0)+A
可扩大寻址范围
基址寄存器的内容由操作系统确定
在程序的执行过程中基址寄存器内容不变,形式地址A可变
有利于多道程序
9.变址寻址
①采用专用寄存器作变址寄存器IX—隐式变址寻址
EA=(IX)+ A IX为变址寄存器(专用)
②采用通用寄存器作变址寄存器IX—显式变址寻址
EA=(R1)+ A R1为通用寄存器
10.相对寻址
EA=(PC)+A A是相对于当前指令的位移量(可正可负,补码)
小结:
基址寻址:在多道程序中极为有用
变址寻址:主要用于处理数组问题,在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任意数据的地址,特别适合编制循环程序
相对寻址:用来支持浮动程序设计