指令系统
基本概念
指令:计算机执行某种操作的命令
指令系统:一台计算机所有机器指令的集合
系列机:同一公司不同时期生产,基本系统结构和指令系统相同的计算机。各机种有共同的指令集能够解决软件兼容问题。
指令字长
指令字长:令中包含的二进制位数
与位数正相关 |
---|
能表示的操作信息和地址信息 |
指令占用的存储空间 |
读取指令的时间 |
长指令优点 | 缺点 |
---|---|
扩大寻址范围或可以带几个操作数 | 占用空间大,取指速度较慢 |
短指令优点 | 缺点 |
---|---|
占用空间较小,取指速度快 | 寻址范围较小 |
定字长指令:指令字长固定
变字长指令:指令字长根据需要可变
操作数
机器中常见的操作数类型
- 地址
- 数字
- 字符
- 逻辑数据
根据指令中操作数的物理位置,可将指令分为:
类型 | 访问主存次数 |
---|---|
存储器 - 存储器(SS)型 | 访问主存两次 |
寄存器 - 寄存器(RR)型 | 不访问主存 |
寄存器 - 存储器(RS)型 | 访问主存一次 |
操作码
操作码指出指令应该执行什么性质的操作和具有何种功能
定长操作码:一般固定n位操作码的指令系统最多能够表示2n条指令
变长操作码:
- 当地址部分位数较多时,减少操作码位数;
- 当地址部分位数较少时,增加操作码位数,增加指令种类。
地址码
根据指令中地址码字段的个数分为:
- 三地址指令
按A1和A2的地址读取操作数,按操作码OP运算,将结果存入A3地址指定的主存单元或寄存器。 - 二地址指令
A2称为源地址,A2提供的操作数,运算后保持不变。
A1称为目的操作数地址,A1提供的操作数,运算后不保留,A1地址改用来存放运算结果。 - 一地址指令
只有目的操作数的单操作数指令 | 隐含约定目的地址的双操作数指令 |
---|---|
单操作数指令:操作码含义是+1,-1,求反,求补一类 | 双操作数指令:操作码含义是:+,-,*,/一类 |
按A1地址读操作数,进行OP操作,结果存回原地址 | 按A1地址读源操作数,AC地址提供隐含的目的操作数,运算结果也存放在AC |
- 零地址指令
可能的情况 | 举例 |
---|---|
不需要操作数的指令 | 空操作,停机 |
对累加器AC内容操作,AC为隐含约定 |
指令功能
操作类型 | 举例 |
---|---|
数据传送 | MOV、PUSH / POP(进栈出栈)、IN / OUT |
算术运算 | ADD、SUB、INC、CMP、MUL |
位运算 | AND、OR、NOT、OR、XOR |
控制转移 | JMP、JNE、CALL、RET |
指令格式
- 根据指令数量的要求及是否支持操作码扩展,确定操作码字段的位数
- 根据对操作数的要求确定地址码字段的个数
- 根据对寻址方式的要求,为每个地址字段确定寻址方式字段位数
- 确定采用定长指令还是变长指令
编址方式
- 字编址:每个编址单位所包含的二进制位数与读或写一次寄存器、主存所获得的信息量相同。
优点 | 缺点 |
---|---|
控制方式实现简单 | 不支持非数值应用 |
地址信息没有任何浪费 |
- 字节编址
编址单位与信息的基本单位(1个字节)相一致
优点 | 缺点 |
---|---|
适应非数值计算 | 存在地址信息的浪费 |
- 位编址
主要优缺点与字节编址方式相同,但地址信息的浪费更大。
指令寻址方式
两种基本方式:
- 顺序寻址
指令地址在内存中按顺序排列,执行时从第一条指令开始(操作系统把程序从辅存写入主存时会提供第一条指令的地址)
在CPU中设置程序计数器PC来计数指令的顺序号,该顺序号即指令在内存的地址。每执行一条指令,PC加1(1的含义是存储1条指令占用的字节单元数),指向下条指令的地址。 - 跳跃寻址
跳跃,是指下条指令的地址码不是PC给出的,而是本条指令给出,例如JMP。
操作数寻址方式
以8086为例
- 立即数寻址
MOV AH,ACH
地址码字段是操作数本身,不需要访问主存,一般用来给变量赋初始值。数据字段的位数限制了立即数的范围
- 寄存器寻址
MOV AL,BL
地址码字段指出寄存器编号,操作数在寄存器中,不需要访问主存。指明寄存器编号的做法使指令字较短(计算机中寄存器数量有限),节省存储空间。
- 直接寻址
MOV AX,[1680H]
地址码字段直接给出操作数在内存的地址,不需要专门计算操作数的地址,地址码字段位数限制了操作数的寻址范围。
-
间接寻址
地址码字段给出的是操作数主存地址的地址。访问内存取得操作数的地址,再由这个地址访问操作数(类比**p和*p)。扩大了操作数的寻址范围。 -
寄存器间接寻址
MOV AX,[BX]
地址码字段给出的是寄存器编号,寄存器内存放的操作数是地址,通过这个地址访问主存。
-
相对寻址
以PC的内容作为基准地址,指令给出的形式地址为位移量(可正可负),二者相加后形成操作数的有效地址(采用字节编址的机器,若采用双字节指令(16位),相加时要另外加2)。 -
基址寻址
由B101(基址寄存器)提供基准量,指令给出形式地址(32)作为偏移量。可以扩大操作数的寻址范围。 -
变址寻址
MOV CL,[SI+200H]
操作数地址为变址寄存器(SI)中的内容和位移量(200H)之和。
操作数寻址方式总结
方式 | 优点 / 缺点 |
---|---|
立即寻址 | 快,能赋初值 / 不能访存,初值的大小受限制 |
寄存器寻址 | 快,适合做算术逻辑运算 / 不能访存 |
直接寻址 | 能访存 / 访存一次,慢,访存范围受限 |
间接寻址 | 解决直接寻址范围受限的问题 / 访存两次,很慢 |
寄存器相对寻址 | 解决直接寻址范围受限的问题 / 访问主存一次,慢 |
相对寻址 | 节省指令中地址位数,便于程序在内存中成块移动 / 访存一次,较慢,且不能在循环中使用 |
变址寻址 | 不改变指令即可改变数据的有效地址,可在循环中使用 / 访存一次,较慢 |
基址寻址 | 提供更大范围的访存能力 / 慢,且不能在循环中使用 |
RISC和CISC
RISC(Reduced Instruction Set Computer,精简指令系统计算机)
CISC(Complex Instruction Set Computer,复杂指令系统计算机)
CISC | RISC |
---|---|
指令多 | 指令少 |
不同指令使用频率差异大 | 不同指令使用频率大致相当 |
可变长指令 | 定长指令 |
执行效率低 | 执行效率高 |
实现复杂功能只需较少指令 | 实现复杂功能需要较多指令 |
存储器寻址方式丰富 | 存储器寻址方式单一 |
程序设计较简单 | 程序设计较难 |
CPU电路更复杂,成本高 | CPU较简单,成本低 |
对程序编译器要求较低 | 对程序编译器要求较高 |