计算机组成原理——指令系统的那点事

在这里插入图片描述

前言

最近计组老师换了,还不能适应老师的讲课方式,关于很多问题的理解也是不甚了解,在这里和大家掰扯掰扯,企图在复读中实现人生的真谛QAQ。

Q1:扩展操作码到底是咋扩展的???

关于扩展操作码我们都知道它是操作码的位数可变,尽可能多地表示指令。相信下面这道例题大家都不陌生,这道例题很好理解,但是当自己扩展起来就没那么容易了,究其原因,还是对扩展的原则了解不够。
在这里插入图片描述
在进行指令扩展时,以下两个原则必须严格遵守:

  1. 短码不能是长码的前缀
  2. 各指令的操作码不能重复

只要遵守上述两个原则,那么进行的扩展就是有效的、合法的扩展。

Q2:边界对齐、小端格式、大端格式咋搞啊???

首先先看一下定义咋说的吧

边界对齐:多字节数据在存储器中采用对准边界的方式存储。
小端格式:低地址存放低字节,高地址存放高字节
大端格式:高字节存放低地址

这些概念好像看上去有那么点意思了,但是还是感觉朦朦胧胧的,这个时候,需要例题来磨练一下:
(没错!俺又从PPT上偷题了!毕竟这题俺也不明白呜呜呜)
在这里插入图片描述
这道题第一问没啥毛病,第二问就需要考虑边界对齐了,这里按照上面的边界对齐的定义就做不了了,因为并没有说怎么对准边界啊。。。感觉说了个寂寞,面向百度老师学习一波,才恍然大悟。

边界对齐通俗的定义就是K字节大小的数据必须存储在K的整数倍的地址上。

也就是说,对于题目中的int型,即4字节,必须存储在4的倍数上;short型,即2字节,必须存储在2的整数倍上;char型,1字节,就任意存储啦~因此答案就如下:
在这里插入图片描述

Q3:这么多寻址方式都有啥区别???

在我印象里我们学了好多好多寻址方式,包括直接、间接、立即…,这些汉字听着也没啥不一样,好家伙,我直接好家伙,看上去还挺多。咱逐个击破。

  • 立即寻址:在指令里直接给出操作数
  • 直接寻址:直接给出操作数地址
  • 寄存器寻址:给出操作数所在寄存器编号
  • 间接寻址:给出操作数的间接地址,包括存储器间址、寄存器间址等,
  • 变址、基址寻址:提供操作数的基准量或偏移量

这里的前两种寻址方式还都比较容易理解,关键在于后三种。这里用汇编语言的思想去理解,就简化了许多。

  • 立即寻址:mov ax,12h
  • 直接寻址:mov ax,[1234h]
  • 寄存器寻址:mov ax,bx
  • 寄存器间接寻址:mov ax,[di] (ds*16+di)
  • 变址基址寻址:mov ax,[bx+di]

Q4:CISC和RISC不得不说的事

CISC即英文Complex Instruction Set Computer的缩写,故名思意就是复杂的。RISC则是Reduced的缩写,意即简单的。快问快答一下,CISC和RISC哪个先被发明出来的(手动滑稽)。当然是咱们CISC啦!!!CISC和RISC的关系可以参考下面这个小故事(我老师讲的!我觉得挺形象的!)

刚开始建房子,开始的时候可能只有一间,随着需求的增加,在原来的房子基础上,又加盖了很多房子,这就是咱们的CISC。而RISC呢,就是CISC的邻居,他看CISC盖房子那么费劲,直接一步到位,把所有可能会用的房子建好了。

这里建房子的过程,也就是计算机指令系统扩充的过程,初始时的CISC在使用过程中变得庞大且复杂,之后根据使用习惯设计出了精简的RISC。

RISC的优点需要格外注意一下!会考嗷~
与CISC相比,RISC具有如下优点(这里俺只列举俺不太理解的优点嘿嘿,像什么优先使用频率高的指令俺就略过啦!):

  • 指令长度固定:相当于前面边界对齐的效果,读取起来快啊!
  • 硬布线逻辑为主,不用或少用微码控制:这里硬布线可以实现直接产生指令信号,而微码程序则是先存储起来,使用时读取,相比之下就慢了起来。
  • 用高级语言编程:这一点啊,是说RISC牛批,可以支持高级语言…