计算机组成:指令系统

正文索引 [隐藏]

一、概述

指令系统:一台计算机所具有的全部机器指令的集合,反映该计算机所拥有的基本功能

CISC vs RISC 指令系统

  • CISC:完善的指令系统,设计目标是尽可能减小程序中指令的条数
  • RISC:精简的指令系统,设计目标是降低每条指令的执行时间

二、主存编址

字编址

以字为单位编址,特点是地址不连续。

主存容量 = 存储字数 × 存储字长

例:128M × 32 位

字节编址

大端 vs 小端

image-20200105103514288

边界问题

边界对齐:空间浪费

image-20200105105107108

边界不对齐:一个字可能需要访存两次,时间浪费

image-20200105105127000

三、指令格式

  • 三地址指令:image-20200105105535269
  • 二地址指令:image-20200105105601416
  • 一地址指令:image-20200105105643055
  • 零地址指令:image-20200105105749147

地址码没什么好说的,位数取决于存储单元长度和寻址方式,操作码就会比较麻烦,分为以下两种:

  • 定长操作码:所有指令的操作码位数相同,并将操作码集中安排在指令字的一个固定的字段中
  • 变长操作码:各种指令的操作码位数不一致,并且操作码可以分散在指令字的不同字段中

其中定长操作码中有个重要的技术,就是操作码扩展技术,比如以下常见的扩展方式,类似于网络中用到的 CIDR 技术:

image-20200105110632822

四、寻址方式

这部分就和汇编里面学到的寻址没啥区别了,传送门但是为了应付考试还是再过一遍吧

指令寻址

顺序指令寻址:PC = (PC) + 1,其中 PC 为 Program Counter,就是汇编里的控制寄存器 IP

跳跃指令寻址:由转移类指令给出下一条指令的地址信息,PC 内容按转移地址重新设置

数据寻址

  • 立即寻址:一般只适合源操作数,操作数直接给出值,比如:addi $s1,$s2,100 中的 100
  • 寄存器寻址:操作数的值在寄存器中,比如:addi $s1,$s2,100 中的 $s1$s2
  • 存储器寻址
    • 直接寻址:直接给出操作数的值在存储器中的位置,比如:mov eax,[100]
    • 存储器间接寻址:给出操作数的值的地址在存储器中的位置,比如:jmp word ptr[1000]
    • 寄存器间接寻址:给出操作数的值的地址在寄存器中的位置,比如:mov eax, [ebx] 中的 [ebx]
    • 偏移寻址:综合寻址
    • 相对寻址:引用专门的程序计数器 PC,即 EA =(PC)+A,有利于程序在内存中浮动
    • 变址寻址:引用一个变址寄存器 Rx, EA =(Rx)+ A,RX 可变
    • 基址寻址 引用一个基址寄存器 Rb, EA =(Rb)+ A,Rb 不可变,寻址靠变 A