4.指令系统及程序的机器级表示
4.1 指令设计
-指令必须包含的信息
1.操作码(指定操作类型)
2.源操作数(一个或多个)或其地址
3.结果的地址
4.下一条指令的地址(隐含在PC 【程序计数器】 中)
-指令格式设计原则
1.尽量短
2.必须预留足够的操作码位数
3.操作码编码必须有唯一的解释
4.指令长度为字节的整数倍(内存通常以字节编址【8bit=1byte】)
5.合理选择地址字段个数(涉及指令长度与规整性问题)
6.尽量规整
-操作数类型
1.指针或地址(unsigned int)
2.带符号数值数据
3.位、位串、字符、字符串
4.布尔数据(表示逻辑值)
-寻址方式
1.立即寻址
给出操作数本身
2.直接寻址
给出操作数的有效地址
3.间接寻址
给出存操作数有效地址的存储单元的地址
4.寄存器寻址
给出操作数所在的寄存器的编号,操作数在寄存器中
5.寄存器间接寻址
给出寄存器编号,寄存器中是操作数的有效地址
6.变址寻址
用于对线性表之类的访问,有效地址为(形式地址+变址寄存器)
7.相对寻址
8.基址寻址
9.其他寻址方式
-操作类型
1.算术与逻辑运算
2.移位指令
3.传送指令(mov、load、store等)
4.串指令
5.顺序控制指令(jmp、skip、call、ret等)
6.CPU控制指令(停机、开中断、关中断等)
7.输入输出指令
-标志信息的生成与使用
指令执行后,会根据运算结果产生相应的标志并在寄存器中。
-指令系统设计风格
按操作数位置,常用的有:
1.通用寄存器型指令系统
使用通用寄存器存放临时数据,操作数和指令可以为多种类型。
2.Load/Store型指令系统(RISC风格采用此类型)
使用通用寄存器存放临时数据,但只有使用Load、Store指令时才可以访问寄存器。
4.2 RISC-V架构及程序的机器级表示
核心是基础的32位整数指令集RV32I,在其之上可以运行一个完整的软件栈。
-RISC-V采用32位定长指令字格式
共有6种指令格式:R型(寄存器操作数指令)、I型(短立即数操作或装入指令)、S型(存储指令)、B型(条件跳转指令)、U型(长立即数操作指令)、J型(无条件跳转指令)。
低7位都是操作码字段:opcode
rd、rs1、rs2都是5位:32位的RISC-V架构有32个32位通用寄存器,所以需要5位来编码
func3、func7分别表示3位和7位的功能码,定义指令的操作功能
imm位表示立即数