考研—计算机组成原理—指令系统

综述:什么是指令那?指令就是计算机底层cpu能识别的不同操作,这是整个计算机最基础的操作,其他所有的实现都是使用这些不同的指令拼接而成的。本章就是介绍指令的基本构成和分类。

 

指令格式

指令最基本的格式由操作码和地址码构成,操作码(op)就是指令最核心的部分了,指出该指令应该执行什么样的操作,而地址码(ad)是被操作的数据或指令的地址。

根据不同指令的不同功能而所需要的被操作数的个数不同,就会有不同数量的地址码。地址码数量从0到4.

而操作码被分为两种,定长操作码(效率低,但是硬件简单)和变长操作码(效率高,但是硬件复杂)

ps:变长指令操作码要求,不允许短码是长码的前缀,这样会无法识别。

 

指令寻址

指令中的指令部分和数据部分都需要寻址,但是寻址的方式和内容不太一样。指令寻址是寻找下一条指令的地址,而数据寻址是寻找本条指令中地址码的地址。(地址码中的值不代表就是真实地址,所以需要结合寻址方式计算出真实地址)

指令寻址方式非常简单,顺序寻址和跳跃寻址,也即,没有指令要求你跳跃到其他地址时,就通过pc+1的方式寻址。(跳跃寻址实现了循环操作)

数据寻址的方式非常多,最后的真实地址要依靠寻址特征和形式地址A得出。

列举如下:

  1. 隐含寻址:不明显的给出操作数的地址,而是规定了某个寄存器中的数就是所要用的操作数,此种方式属于某些指令专用。(缩短指令长度,硬件复杂)
  2. 立即(数)寻址:立即就是立即数,立即数就是地址码字段没有给出地址,而是直接把操作数本身了,这种方法适合固定的某个操作数(补码),而不是变量。(不需要访存时间,地址码的位数限制了操作数的大小)
  3. 直接寻址:直接俩字意味着,地址码中的地址就是操作数真实的地址。(简单,位数限制了寻址范围,操作数地址不易修改)
  4. 间接寻址:地址码中给出的是操作数的地址(的地址)^n的地址,此所谓间接寻址。(可以方便完成子程序返回,多次中转速度比较慢,比不上寄存器间寻址)(寄存器存取速度最快)
  5. 寄存器寻址:地址码中直接给出寄存器代号(速度很快,价格昂贵资源有限)
  6. 寄存器间接寻址:地址码给出寄存器代号,但是寄存器中存的是操作数的主存单元的地址。可以扩大寻址范围。
  7. 相对寻址:此种方法要使用程序计数器pc,地址码给出偏移地址(计算机中的偏移量都是一个地址的动态部分,也就是说一个地址由固定部分和动态部分组成)。pc➕偏移地址得到真正地址。(适用于程序浮动,广泛应用于转移指令)
  8. 基址寻址:此种方法特别的用到了基址寄存器(用户可以指定用哪个,os决定内容),地址码给出的形式地址加上基址寄存器中的地址得到真正的地址。(可以扩大寻址范围,主要面向系统)
  9. 变址寻址:相比于基址寻址,变址寻址中的变址寄存器是专用的,而不像基址寻址中的可以用户自己指定。(主要面向用户)
  10. 堆栈寻址:设置一片堆栈空间,可以使用主存空间,也可以使用寄存器组(价格昂贵,空间小,速度很快),这一片空间符合先进后出的原则,就像一个栈。此种方法有些类似隐含寻址,使用此种方式的指令表面上无地址码操作数,但是其实就像隐含寻址一般有规定好的使用栈中的数据。由堆栈指针决定。

 

 

CISC(复杂指令集)和RISC(精简指令集)

复杂指令集:

  1. 指令系统庞大,指令数目多(200以上)
  2. 使用变长指令
  3. 指令访存不受限制(相比于精简指令集来说)
  4. 指令依据频度会分为常用指令和不常用指令
  5. 指令执行时间所需要的时钟周期不同
  6. 控制器使用微程序控制
  7. 难以优化编译生成高效代码

精简指令集:

  1. 指令数目少,使用一些频率较高的简单指令
  2. 使用定长指令
  3. 只有LORD/STORE两个指令可以访存,其他指令依靠寄存器之间进行
  4. 通用寄存器相比复杂指令集多很多
  5. 一定使用指令流水线
  6. 以硬布线控制为主(相对于复杂指令集的微程序控制)
  7. 相比于复杂指令集更容易优化代码

 

   复杂指令集对应的就是x86架构,就是我们常用的Windows桌面系统。而精简指令集对应的就是arm架构,就是移动端的设备,相比硬件更加简单。

你可能感兴趣的:(考研—计算机组成原理—指令系统)