计算机组成原理-指令系统-笔记
第四章 指令系统
程序:用于解决实际问题的一系列指令;
指令:是计算机执行某种操作的命令
从层次结构来说,计算机指令可以分为如下3类:
- 微指令:微程序的命令,它属于硬件;
- 机器指令(指令):可完成一个独立的逻辑运算或算术运算;
- 宏指令:由若干机器指令组成的软件指令,它属于软件
指令系统是指,一台计算机所有指令的集合。由计算机的硬件结构直接决定,影响机器的适用范围。
复杂指令系统计算机(CISC)、精简指令系统计算机(RISC)
基本指令系统和基本体系结构都相同的计算机称为一个系列计算机
CISC(complex instruction set computer)
- 采用复杂的指令系统,来达到增强计算机功能、提高计算机速度的目的
特点:
- 指令系统庞大,指令条数多;
- 指令格式多,指令字长不固定,多种寻址方式;
- CPU内采用专用寄存器,指令访存不受限制;
- 各种指令执行时间相差很大;
- 大都采用微程序控制;
RISC(Reduced instruction set computer)
从简化指令系统和优化硬件设计的角度来提高系统的性能与速度
特点:
- 选取使用频率高的简单指令;
- 指令长度固定,指令格式少,寻址方式种类少;
- 采用流水线技术;
- 使用较多的通用寄存器,减少访存;
- 控制器以组合逻辑控制为主;
- 采用优化编译技术;
指令系统要具备:完备性、有效性、规整性、兼容性
完备性:指令齐全,编程方便
有效性:程序占用内存少,运行速度快
规整性:指令和数据使用规则统一,易学易记
- 规整性又要满足以下性质:
- 对称性:所有指令的操作数可以使用各种寻址方式;
- 匀齐性:一种操作性质的指令可以支持各种数据类型;
- 指令格式和数据长度的一致性
兼容性:同一系列的抵挡计算机能够在新的高档计算机上运行
指令格式
指令字(指令):表示一条指令的机器字
指令格式:指令字用二进制代码表示的结构形式,由操作码字段和地址码字段组成。操作码字段表征指令的操作特性与功能;地址码字段通常指参与操作的数据的地址。
指令字长一定是8的倍数
操作码
固定长度操作码
特征:所有指令长度相同
优点:控制简单,速度快,适用于指令条数不多的场合
可变长度操作码
特征:利用操作码扩展技术,将操作码扩展到地址码字段,使各类指令的操作码长度不相同;
优点:充分利用硬件资源,适用于大规模的指令系统
操作码扩展技术:指有的指令地址码比较少,仅用了一部分地址码字段,可以将操作码占用未被使用的地址码字段,进而产生更多地址码字段个数少的指令
地址码
一条指令中有几个地址码字段就成为几地址指令;有零地址指令、一地址指令、二地址指令、三地址指令、多地址指令(如四地址指令)
多地址指令功能性较强,一般用于高档小型机或中大型机,用于实现成批数据的处理、字符串处理、向量或矩阵运算指令等。
两地址指令的分类
根据A1,A2的存储位置不同进行分类;
- SS型指令,即A1,A2都在存储器中
- RS型指令,即A1在寄存器中,A2在存储器中
- RR型指令,即A1,A2都在寄存器中
指令长度
机器字长:运算器能一次处理的二进制数的位数。
指令字长:一个指令中包含的二进制代码的位数,由操作码字段、操作数长度和个数共同决定。
指令有半字长、单字长、双字长、多字长等不同长度类型;
指令系统可以分为等长指令字结构 和 变长指令字结构两种;
- 等长指令字执行时,控制器易解析,但指令类型受限
- 变长指令字执行时,控制器解析复杂,但指令类型灵活
指令助记符
使用3~4个英文字母来表示指令的操作码,在不同的计算机中,指令的助记符的规定是不一样的;指令助记符只是操作码字段表示的一种方式,机器内部保存的还是指令的二进制代码,作为机器指令。由汇编或编译程序将助记符翻译成机器代码。
机器指令通常对数据进行操作,数据通常分为以下四类:地址数据、数值数据、字符数据、逻辑数据
地址数据:如各类指令中的存储单元的寻址方式
数值数据:如各类指令中的立即数寻址方式
字符数据:文本数据或字符数据
逻辑数据:如各类指令中的标志位判断部分
指令和数据的寻址方式
指令寻址方式
- 顺序寻址方式
- 当程序执行的流向不发生变化时,指令的寻址方式;
- 由程序计数器/指令指针寄存器记录要执行的指令的地址;一般一次取址之后,其值加本条指令所占的单元数。
- 跳跃寻址方式
- 当程序的流向发生变化时,指令的寻址方式
- 程序计数器的内容由本条指令给出,而不是顺序改变;
- 直接寻址方式:指令中给出要转向的有效地址;
- 相对寻址方式:指令中给出要转向的单元与当前单元的偏移量
- 间接寻址方式:指令给出保存要转向地址的寄存器或存储单元
操作数寻址方式
给出一个单地址码指令的结构如下:
给出一个操作数信息的字段,称为地址码字段;地址码字段包括寻址特征位和形式地址A,寻址特征位用于区分形式地址A所采用的寻址方式,A字段的长度决定了操作数或操作地址的位数;
常见的寻址方式有:
- 隐含寻址
- 立即寻址
- 寄存器寻址
- 寄存器间接寻址
- 直接寻址
- 间接寻址
- 偏移寻址
- 堆栈寻址
具体的指令系统中,寻址方式可以单独或混合使用
隐含寻址
操作数地址隐含在操作码中
立即寻址
形式地址A就是操作数
优点:指令执行阶段不需要访存,执行速度快
缺点:形式地址A字段的位数,限制了立即数的范围
直接寻址
有效地址由形式地址A直接给出
特点:
- 执行阶段访问一次存储器;
- A的位数决定了该操作数的寻址范围;
- 改变操作数麻烦(必须修改指令中A字段)
间接寻址
有效地址由形式地址A指向的的空间存储的内容给出
特点:
- 可扩大寻址范围;
- A字段的长度受指令字长和指令格式的限制;
- 指令执行速度慢,现在较少使用;
- 可用寻址特征I字段区分直接寻址和间接寻址方式;
寄存器寻址
形式地址A,记录寄存器的编号,寄存器中存储操作数
特点:
- 不需要访存,只访问寄存器,执行速度快
- 寄存器个数有限,占用指令位数较少,可有效缩短指令字长
寄存器间接寻址
形式地址A为寄存器编号,寄存器存储的是操作的数的有效地址
特点:指令执行阶段需要访存,便于编制循环程序
基址寻址方式
有效地址由基址寄存器和形式地址A共同形成:EA = (基址R)+ A,形式地址可正可负,基址寄存器可以是专用寄存器,也可以是通用寄存器;
- 若使用通用寄存器作为基址寄存器,则需要在指令地址码字段显示指出该寄存器
变址寻址方式
由变址寄存器和形式地址A形成操作数有效地址:EA = (变址R)+ A
形式地址A作为基准地址,变址寄存器作为可修改量,可自动增减量
变址寻址方式适用于数组、字符串等成批连续数据处理的指令;变址寄存器可以用通用寄存器充当,一般包含多个;
相对寻址方式
是基址寻址的一种变通
程序计数器PC提供基址,形式地址A作为位移量D,可正可负;EA = PC + D
相对寻址方式常用于转移类指令
堆栈寻址方式
隐含寻址方式的一种变形,其隐含操作数在堆栈段中,由栈顶指针指定;
如8086CPU的入栈指令:PUSH SRC; ---> SP - 2 --> SP; SRC -->[SP];
出栈指令:POP DST; [SP] --> DST; SP + 2 --> SP;
操作码字段可以包含寻址特征,此包含意思是一个 OP 能体现其对应的寻址方式