指令格式
指令由两大部分组成:操作码 + 地址码
操作码:怎么操作数据
地址码:操作的数据在哪里
操作码可以分成 定长操作码和不定长操作码
根据指令中地址码数量的不同,将其划分为以下几类:
(1)零地址指令
零地址指令没有地址码,只有操作码字段OP
常见有堆栈指令和不需要操作数的指令
(2)一地址指令
只有一个地址码的指令
访存次数:3次访存 / 2次访存
3次访存:只有目的操作数的单操作数指令
2次访存:指令中隐含目的地址(如ACC)的双操作数指令
(3)二地址指令
有两个地址码的指令
需要4次访存次数
(A1)OP(A2) -> A2
(4)三地址指令
有三个地址码的指令
需要4次访存次数
(A1)OP(A2) -> A3
(5)四地址指令
有四个地址码的指令
需要4次访存次数
(A1)OP(A2) -> A3
A4指明下一条指令的地址
定长编码和不定长编码(重点)
定长操作码指令:指令字的最高位部分分配固定的位数来表示操作码。
不定长操作码指令:操作码的位数不固定
要求:
(1)较短的操作码不能是较长操作码的前缀;
(2)各指令的操作码不允许重复。
例题:假设指令字长固定长度为16位,设计一套指令系统满足下列要求:
(1)有15条三地址指令;
(2)有12条二地址指令;
(3)有62条一地址指令;
(4)有30条零地址指令。
指令寻址
确定指令存放的位置的过程
(1)顺序寻址:PC自加1寻找到下一条指令的地址
(2)跳跃寻址:直接寻址,相对寻址和间接寻址
数据寻址(重点)
确定当前要操作的数据的地址
一般设置一个寻址特征,用来告诉这是属于哪一种寻址方式
(1)立即寻址
直接给出的是操作数本身而不是操作数的地址。
优点:简单,直接拿出来就能用,不用花时间访存
缺点:操作数地址码的位数限制的此数据的大小
用处:对某寄存器或者是内存单元赋初值
(2)直接寻址
访问一次存储器即可得到操作数。
优点:简单,访存一次即可找到
缺点:操作数地址码的位数一般不会太大,所以操作数的地址范围有限
(3)隐含寻址
不必明显的给出操作数的地址,操作数隐含在操作码或者某个寄存器当中。
比如,一地址格式的操作数一般都在ACC中
(4)间接寻址
其给出的是操作数有效地址的地址。
间接寻址也分为一次间接寻址和多次间接寻址
优点:便于子程序返回和查表
缺点:多次访问主存,花费更多的时间
用处:中断中的寻找中断服务程序入口(类似查表),子程序的返回
(5)寄存器寻址
地址码字段指明的不是主存地址而是寄存器地址(编号)。
优点:操作数在寄存器中,不必访存;因为寄存器编号比较小,需要的位数也少,所以减少了指令字的长度
缺点:占用寄存器资源
(6)寄存器间接寻址
其地址码是寄存器编号,对应的寄存器中存储的是操作数的主存地址。
优点:便于编址循环程序
缺点:要多一次的访存次数
(7)基址寻址
设置一个基址寄存器,操作数的有效地址等于指令字中的形式地址加上基址寄存器中的内容。
EA = A + (BR)
基址寄存器分为两种:隐式和显式
基址寄存器中的内容由操作系统确定,程序执行时用户不能随便更改
不过倒是可以知道具体哪个寄存器被当成了基址寄存器
优点:扩大操作数的寻址范围
用处:解决多道程序问题
(8)变址寻址
设置一个变址寄存器,操作数的有效地址等于形式地址加上变址寄存器中的内容。
EA = A + (IX)
变址寄存器中的内容由用户设定,并且程序运行中可以更改,而形式地址不可变
优点:扩大操作数的寻址范围
用处:处理数组问题和循环程序
(9)相对寻址
操作数的有效地址等于程序计数器中的内容与形式地址相加。
EA = (PC) + A
优缺点不考
用处:转移类指令和便于编制浮动程序
CISC和RISC(重点)
CISC特点:
(1)指令系统复杂,指令数目多;
(2)指令长度不固定,指令种类多,寻址种类多;
(3)访存指令不受限制;
(4)CISC指令的使用频率差别较大;
(5)大多数指令需要多个指令周期才能完成;
(6)大多数采用微程序控制;
(7)难以优化编译成高效代码程序。
RISC特点:
(1)指令系统较简单;
(2)指令长度固定,指令种类少,寻址种类少;
(3)访存指令只有取数 / 存数指令,其余指令的操作在寄存器内完成;
(4)CPU中有多个寄存器;
(5)采用流水线技术,大部分指令只需要一个时钟周期完成;
(6)采用组合逻辑控制;
(7)采用优化的编译程序。
比较:RISC机器通过简单指令的组合实现复杂的功能,效率较高;CISC机器指令系统丰富,有专用的指令完成特殊的任务,处理特殊任务的效率较高。