计算机体系结构(二)——指令系统

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/swadian2008/article/details/96574485

目录

一、指令系统结构的分类

二、寻址方式

1、寄存器寻址

2、立即数寻址

3、偏移寻址

4、索引寻址

5、直接寻址或绝对寻址

6、存储器间接寻址

三、CISC指令集和RISC指令集

1、CISC指令集弊端

扫描二维码关注公众号,回复: 7198536 查看本文章

2、RISC指令集优势

3、总结


一、指令系统结构的分类

计算机指令为二进制格式,一般使用字节的物理存储空间组织方式。

指令的组成:操作码+操作数

(1)指令的操作由操作码编码表示

(2)操作数是一些存储单元的地址,每条指令所需要的操作数为0-3个不等

下图是表达式Z=X+Y在4种类型指令系统结构上的代码:

堆栈:两条PUSH指令把加数和被加数送到栈顶,因为堆栈默认从栈顶取值,所以ADD没有必要指明取数地址。最后POP把累加结果进行存储

累加器:其中一个加数放在累加器,所以add只要指明被加数,然后STORE把累加结果返回累加器。

堆栈型和累加器型计算机的优点是指令字比较短,程序所占用的空间比较小。

但是他们的缺点难以克服

堆栈型不能随机的访问堆栈,难以生成有效代码,而且对栈顶的访问是个瓶颈。

累加器型,由于只有一个中间结果暂存器(累加器),所以需要频繁的访问存储器,性能比较低。

寄存器-存储器寄存器-寄存器型的区别是ADD指令能不能访问存储器,因为寄存器-寄存器型计算机是不能直接访问存储器的,所以它的加数和被加数都需要提前放到寄存器中(两条Load指令),指令数量要比寄存器-存储器型计算机多。

二、寻址方式

寻址方式:指指令系统中产生要访问数据地址的方法。

对于存储器操作数来说,由寻址方式确定的存储器地址称为有效地址

对操作数的操作首先是需要获取操作数的地址,然后才能对操作数进行读和写,因此寻址加速,就是要缩短有效地址的生成时间。

1、寄存器寻址

指令实例:ADD R1,R2

含义:Regs[R1] <- Regs[R1] + Regs[R2]

把寄存器R1,寄存器R2的内容相加,保存到寄存器R1中

2、立即数寻址

指令实例:ADD R3 ,#6

含义:Regs[R3] <- Regs[R3] + 6

把寄存器R3的内容和立即数6相加保存在寄存器R3中

#6 代表立即数6;指操作数和指令绑定到一块的形式。当操作数和指令数一起被放到CPU时,程序不需要入额外的去访问寄存器和存储器,因而速度会比较快。

3、偏移寻址

指令实例:ADD R3,120(R2)

含义:Regs[R3]<-Regs[R3] + Mem[120+Regs[R2]]

以寄存器R2的内容作为基址,加上100的偏移量作为存储单元的地址,然后再与寄存器R3的内容相加保存到寄存器R3当中。

4、索引寻址

指令实例:ADD R4,(R2+R3)

含义:Regs[R4]<-Regs[R4]+Mem[Regs[R2]+Regs[R3]]

把R2和R3寄存器的内容相加作为存储单元的地址,然后加上寄存器R4中的内容,保存到寄存器R4中。

5、直接寻址或绝对寻址

指令实例:ADD R4,(1010)

含义:Regs[R4]<-Regs[R4]+Mem[1010]

(1010)为存储单元地址,像这种直接给出存取单元地址的方式称为直接寻址

6、存储器间接寻址

指令实例:ADD R2,@(R4)

含义:Regs[R2]<-Regs[R2]+Mem[Mem[Regs[R4]]]

这种方式寻址需要访问两次寄存器,因而效率最低,速度最慢。(使用较少

说明:除了寄存器寻址和立即寻址,其他都是存储单元取址。一般来说,涉及到Load和Store指令时,会采用存储单元取址的方式,这是因为读写数据会访问存储单元,当然现在为了提高取址速度(获取有效地址),也有采用预取址的方法(跟采用缓存的道理差不多),注:此说明为笔者自己理解,如有不当之处欢迎指点。

三、CISC指令集和RISC指令集

1、CISC指令集弊端

(1)复杂度高,不易实现,效率和性能会比较低

(2)指令功能复杂,不利于采用流水线技术

2、RISC指令集优势

(1)指令条数少,指令功能简单

(2)采用简单而又统一的指令格式,比减少寻址方式

(3)指令的执行在单周期内完成(采用流水线技术后)

(4)采用Load-Store结构。即只有Load-Store指令才能访问存储器,其他指令的操作都是在寄存器之间进行。

(5)大多数指令都采用硬连逻辑来实现。

(6)强调优化编译器的作用,为高级语言程序生成优化代码

(7)充分利用流水线技术提高性能

3、总结

好的指令集:硬件实现比较简单,编译生成比较快。

猜你喜欢

转载自blog.csdn.net/swadian2008/article/details/96574485