指令系统概述及指令格式
指令的基本概念
- 指令
- 计算机能直接识别、执行的操作命令(机器指令);
- 冯诺依曼结构计算机 “程序控制”原理实现的载体;
- 指令系统(指令集)
- 一台计算机中所有机器指令的集合;
- 系列机:同一公司不同时期生产,基本系统结构和指令系统相同的计算机。 如IBM,PDP-11,VAX-11,Intel-x86
- 兼容机:不同公司生产,基本系统结构和指令系统相同的计算机。 如IBM兼容机
- 指令字长
- 指令中包含的二进制位数
- 与机器字长相比: 单字长、双字长、半字长等长度指令
- 多字长指令:
- 解决寻址较大存储空间的问题
- 取指多次访问内存,影响速度,占用空间大
- 等长指令: 指令字长度固定。
- 变长指令: 指令字长度根据需要可变
指令分类
根据指令中操作数的物理位置分类:
- 存储器-存储器(SS)型
- 寄存器-寄存器(RR)型
- 寄存器-存储器(RS)型
根据指令功能分类:
- 传送指令 MOV 、PUSH/POP、 IN/OUT等
- 定点算术运算指令 ADD、SUB、INC、CMP、MUL等
- 位运算指令 NOT、AND、OR、SHL、SAL等
- 控制转移指令 JMP 、JNE、CALL、RET等
指令格式
- 操作码字段的位数与支持的最大指令数量有关
- 对于定长操作码而言,LengthOP =⌈log2 n⌉
- 支持变长操作码时,操作码向不用的地址码字段扩展
- 寻址方式字段的位数与支持的寻址方式种类有关
- 地址码字段的作用及影响与其位数和寻址方式有关
寻址方式及指令寻址
指令的顺序寻址
- 程序的指令序列在主存顺序存放。执行时从第一条指令开始(!),逐 条取出并执行,这种程序的顺序执行过程,称为顺序寻址方式。
- CPU中设置程序计数器(PC)对指令的顺序号进行计数。PC开始时存 放程序的首地址,每执行一条指令,PC 加”1”,指出下条指令的地址, 直到程序结束。
- 存储1条指令占用的字节单元数与存储字长有关!
跳跃寻址:
操作数寻址方式
立即数寻址
地址码字段是操作数本身
例 MOV AX,200H ( AX <- 200H)
特点:
- 取指操作将数据与指令一并读入CPU内部的寄存器,指令执行速度快
- 便于程序设计(变量赋初值)
- 数据大小受字段位数限制
寄存器寻址
操作数在CPU内部的寄存器中
例 MOV AX, BX ( AX <- ( BX))
特点:
- 操作数在寄存器中,指令执行速度快
- 能访问的数据大小一般与计算机字长有关
- 地址字段的位数与计算机通用寄存器数量相关
直接寻址
地址码字段直接给出操作数在内存的地址. E=D, S=(D)
例 MOV AX, [200H]
特点:
- 提供访问主存的操作
- 获得数据要访问主存,指令执行速度慢
- 地址字段的位数决定了访存空间大小
间接寻址
地址码字段给出的是操作数主存地址的地址. E=(D), S= ((D))
例 MOV AX, I[200H]
特点:
- 获得数据要访问主存2次,指令执行速度太慢
- 解决了直接寻址方式下地址字段的位数限制访存范围大小的问题
寄存器间接寻址
地址码字段给出的是寄存器编号R. E=(R), S= ((R))
例 MOV AX, [BX]
特点:
- 获得数据只需访问主存1次
- 解决了直接寻址方式下地址字段的位数限制访存范围大小的问题
相对寻址
E=D + (PC), D为指令中地址字段的值特点:
- 注意PC的改变对计算E的影响,如 本例中E = 200 + 2000 + 2
- 可节省指令中的地址位数,便于程序在内存中成块移动
例 某计算机采用双字节长指令,内存基于字节寻址,指令中的数据采用补码表示,且PC 的值在取指阶段完成修改。
1)若某采用相对寻址指令的当前地址为2003H,且要求转移后的目标地址为200AH, 则该指令形式地址字段的值为多少?
2)2)若某采用相对寻址的指令的当前地址为2008H,且要求转移后的目标地址为2001H, 则该指令的形式地址字段的值为多少?
解: 1)200AH – (2003H +2) = 5 (0000 0101)
2)2001H – (2008H +2) = -9 (1111 0111 即F7H)
若计算机字长32位, 且PC的值在取指阶段修改,情况如何?
+2变为+4
基址寻址
指定一个基址寄存器B,与本指令地址无关 E= D + (B), D为指令中地址字段的值
MOV AX, 32[B]
特点:
- 对某一程序而言,基址值设定后不变,故要访问不同数据需修改D
- 使用基址寄存器可以访问更大的主存空间
变址寻址
指定一个变址寄存器X,与本指令地址无关, 内容可随要求改变, E= D + (X), D为指令中地址字段的值
MOV AX, 32[SI] SI,DI 都称为变址寄存器
特点:
- 不改变指令即可改变数据的有效地址,可在循环中使用
- 在字符串处理,向量运算等等成批数据处理中非常有用
总结
指令格式设计
指令格式设计主要内容
- 根据指令数量的要求及是否支持操作码扩展,确定操作码字段的位数
- 根据对操作数的要求确定地址码字段的个数
- 根据寻址方式的要求,为每个地址码字段确定寻址方式字段位数
- 确定采用定长指令还是变长指令
指令格式设计举例
某机字长32位,采用三地址指令,支持8种寻址操作,完成60种操作,各 寻址方式均可在2K主存范围内取得操作数,并可在1K范围内保存运算结果。 问应采用什么样的指令格式?指令字长最少应为多少位?执行一条指令最多要 访问多少次主存?
字长16位,主存64K,指令单字长单地址,80条指令。寻址方式有直接、 间接、相对、变址。请设计指令格式
设某指令系统指令字长16位,每个地址码为6位。若要求设计二地址指令15 条、一地址指令34条,问最多还可设计多少条零地址指令?
解: OP(4) A1(6) A2(6)
操作码按从短码到长码进行扩展编码
假定二地址指令编码: (0000 – 1110) 共15条,1111作为扩展标识; 则一地址指令编码的全集可表示为: 1111 000000 – 111111(假定扩向A1); 因一地址指令只需34条,可将全集中多余的30种编码作为向零地址指 令扩展的标识,假定为: 100010 – 111111 故最多可支持的故零地址指令数为: 30*2^6 条
MIPS 指令概述
MIPS 指令概述
- MIPS (Microprocessor without Intellocked Pipleline Stages)是80年代初期由斯 坦福大学Hennessy教授领导的研究小组研制成功; Million Instructions Per Second
- 属于精简指令集计算机RISC(Reduced Instruction Set Computer);-> 复杂指令集计算机CISC(Complex Instruction Set Computer );
- MIPS指令集有MIPS I,MIPS II,MIPS III,MIPS IV,MIPS V,MIPS32,和 MIPS64多个版本;
- 早期主要用于嵌入式系统,如Windows CE的设备,路由器,家用网关和视频游 戏机,现在已经在PC机、服务器中得到广泛应用
MIPS指令集有以下特点:
- 简单的Load/Store结构
- 易于流水线CPU设计
- 易于编译器开发
- MIPS指令的寻址方式非常简单,每条指令的操作也非常简单
MIPS指令格式概述
MIPS 寄存器
MIPS 寻址方式
- 在MIPS32指令集中,不单设寻址方式说明字段
- 立即数寻址 ( Immediate addressing)
- 寄存器直接寻址(Register Addressing)
- 基址寻址(Basic Addressing)
使用基址寻址的指令:lw ,sw, lh, sh, lb, lbu等
LB rt , offset (base) - 相对寻址
使用相对寻址的指令:beq, bne
if (GRP[rs] == GPR[rt]) PC = PC + 4 + BranchAddr - 伪直接寻址(页面寻址)
使用伪直接寻址的指令:j, jal
MIPS指令详解
R型指令
操作数和保存结果均通过寄存器进行;
- op:操作码,所有R型指令中都全为0;
- rs:寄存器编号,对应第1个源操作数;
- rt:寄存器编号,对应第2个源操作数;
- rd:寄存器编号,据此保存结果;
- shamt:常数,在移位指令中使用;
- funct:功能码,指定指令的具体功能;
3寄存器R型指令
2寄存器R型指令
1寄存器R型指令
I型指令
操作数中涉及立即数,结果保存到寄存器;
- op:标识指令的操作功能;
- rs:第1个源操作数,是寄存器操作数;
- rt:目的寄存器编号,用来保存运算结果;
- imm:第2个源操作数,立即数;