指令结构
指令的分类
1次访存
2次访存
4次访存
扩展操作码
指令寻址
指令寻址和编码方式有关
定长之指令结构
变长指令,通过读取第一个字节在判断指令长度
无条件转移指令
数据寻址
六种普通寻址方式
直接寻址
有效地址就是真实地址
间接寻址方式
存储的是数据地址的地址
寄存器寻址
操作数在寄存器里面
寄存器间接寻址
寄存器里面存放的是操作数的地址
隐含寻址
地址不是明显的给出
立即寻址
操作数会直接放在指令中,这种操作数被称为立即数
三种偏移寻址
基址寻址
根据基址寄存器作为基地址,在根据基地址和数据码求和得到真实的地址,也可以用通用寄存在来存放这个基地址,每个程序的位置都是不定的,在程序移动的时候基地址也会改变,这样不论程序在什么位置都这个操作码都能指向正确的地址
基址寄存器的值不由人为控制,完全面向操作系统
变址寻址
变址寄存器和基址寄存器的原理一模一样,都是地址码加上寄存器的值得到真实地址,唯一的区别是变址寄存器可以人为的指定,且地址码作为基地址而寄存器里面的值作为偏移量。
基址寻址&变址复合寻址
相对寻址
通过程序和数据的分段可以很好的解决程序内代码移动造成的数据位置改变的问题。相对寻址又可以解决跳转指令因为代码移动而给改变的问题。
堆栈寻址
硬堆栈;用寄存器存储
软堆栈:用内存存储
总结
# CISC和RISC
真题
2020:直接寻址的地址码从0开始到2n位,n为地址码个数
2018:按字节编址的计算机中,变址寻址访问double数组A,数组A的首地址为2000H,变址寄存器的初始值为0,每次循环取一个数组元素,偏移地址为变址值乘以sizeof(double),取完之后变址寄存器内容自动加一,若某一次取元素的地址为2100H,则进入该次循环时变址寄存器的内容是多少?
解:2100H相对于2000H地址变换了100H=256D 每次偏移量为double乘以寄存器的值,double含64位8B,计算机按字节编址,变址寄存器的值每次加一,则256/8=变址寄存器的值=32,
2014:某计算机有16个通用寄存器,采用32位定长指令字,操作码为8位,store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量永不吗表示,则store指令中的偏移量的取值范围是多少?
解:指令长度为32,操作码占8位,一共有16个通用寄存器,需要4位来表示,源操作数和目的操作数都需要选择寄存器,所以选择寄存器需要占8位,所以剩下来的16全部用来表示基址寄存器的偏移量,16位的补码表示范围是-32768~+32767