大纲
一、指令
1. 1 定义
指令:指令就是计算机能识别的硬件能够直接执行的一种语言,计算机全部指令集合称为指令系统。
1.2 分类
指令分为变长指令与定长指令。
变长指令:位数(指令字长)是可以变化的,这取决于操作码的位数、地址码位数。有多字长指令、单字长指令。但多字长指令需要多次访存,因此CPU速度会下降。
一台机器可以有位数不同的指令,也就是指令字长可变。
1.3 组成
指令由 操作码 + 地址码 组成。
所以指令系统就是一堆的 地址码操作码组合 的集合。
1.3.1 操作码
操作码顾名思义就是用来说明操作类型的,比如加减乘除。如果有三位操作码,就可以进行八种操作,两位就是四种。他长度可以是固定的也可以是变化的。
定长操作码:硬件设计简单、压缩了操作码的平均长度,在字长短的计算机中广泛使用,译码快。但指令数量增多,就需要更多的地址位数,操作码长度固定会导致地址位不足。
变长操作码:操作码位数随地址位增多而减少,但译码和控制器的设计会更复杂。
扩展操作码:定长指令+变长操作码
扩展操作码的注意事项:
1.不允许短码(新加上去的后缀)是长码(之前设计好的前缀)的前缀,也就是短码不能和前缀一样。
如前缀如果最多到1110,那么使用扩展码技术设计新的指令时第一个是“1111”,但最后不能是“1111 1111”
2.各指令操作码不能重复
1.3.2 地址码
注意:地址码不是指令的地址⚠️⚠️⚠️
而是操作数(一个或两个)、结果的地址、以及下一条指令的地址。
总的来说就是:数据地址、下一条指令地址
指令地址与地址码区别:
指令的地址是指在内存中存放指令的位置,是CPU执行指令时需要的数据(PC->PC+1)。地址码是操作对象在内存中的位置。是不一样的。
(1)四地址指令
四次访存,执行当前指令
1.指令地址
2.取第一操作数
3.取第二操作数
4.结果存放访存一次
(2)三地址指令
把下一条指令地址不放地址码里里,放PC里
(3)二地址指令
4次访存,因为存放结果还是要访存,但是如果把结果放在累加器中就只需要三次
(4)一地址指令
累加器做两个工作 ,先存放其中一个操作数,结果出来了又存放结果
(5)零地址指令
陷阱(Trap)与陷阱指令:
陷阱是意外事故的中断,例如输入输出设备损坏,电脑电压不稳等。因此计算机发生意外时就会发出陷阱信号。
计算机的陷阱指令指令系统里没有,而是CPU自动产生并执行。也有的机器设置用户使用的陷阱指令,这样就可以利用它进行系统调用和程序请求。
二、寻址方式
寻址方式:确定当前指令数据地址,以及下一条指令地址。
所以寻址方式分为:指令寻址与数据寻址。
2.1 指令寻址
一条指令一条指令往下执行(PC->PC+1),叫做:顺序寻址
跳着执行(JUMP指令:直接跳到指定指令,略过中间的)叫做:跳跃寻址
2.2 数据寻址
提到数据,我们能想到的有数据本身、存储器、寄存器,所以有以下几种寻址方式
关于存储器:
(1)立即寻址
数据本身就放在地址码里,不用去存储器或者寄存器里找,立马就找到了,就是立即寻址。
eg:你去超市买东西,老板直接给你了,不用自己找就是立即寻址。
(2)直接寻址
地址码里是数据在存储器里的真地址。
EA=A
eg:取快递,知道了取件码,自己照着去取
(3)间接寻址
不直接告诉你真实地址,告诉你一个假地址,你找到这个假地址之后,假地址里放着真地址,再继续找。
EA=(A)
关于寄存器
(4)隐含寻址
操作数的地址隐含在操作码或寄存器中。
例如二地址指令,就把其中一个操作数放在ACC中。
(5)寄存器寻址
给出寄存器的编号,操作数在指明的Ri寄存器内
EA=R i
(6)寄存器间接寻址
给出寄存器编号,但里面还不是你想要的数,而是放着他在主存的居住地址。
EA=(Ri)
(7)基址寻址
就是在寄存器间接寻址的基础上加上形式地址。例如基址寄存器是BR
EA=(BR)+A
(8)变址寻址
类似于(7)
假如变址寄存器是IX
EA=(IX)+A
下面两个特殊记
(9)相对寻址
EA=(PC)+A
(10)堆栈寻址
利用堆栈SP指针出栈入栈。
三、RISC与CISC
1.随着计算机不断发展,功能越来越复杂,指令系统也越来越复杂
2.出现了CISC(复杂指令系统计算机)
3.但指令过于复杂时执行周期长,资金花费大,需要复杂的控制器,占用了较大芯片面积
4.后来发现一般程序里80%的语句仅仅处理了处理机20%的指令,而且这些指令都是简单指令
5.想用20%的语句组合出80%的不常用语句
6.提出RISC(精简指令系统计算机),用较小的芯片面积制作逻辑控制电路,大部分空间做成寄存器。
(优点总结在大纲里)