esp32 c6价格乐鑫wifi模块代理商RISC-V指令集长度/助记符/指令格式,模块化是 RISC-V 指令集的大特点之一。基本指令集 RV32I 充分体现了RISC-V 指令集简单、精炼的风格。esp32 c6价格乐鑫wifi模块代理商RV321指令集共有 47 条指令,包括算术和逻辑运算、存储器访问,以及分支与跳转等操作。与 RV32I相比,RV64I、RV128I仅扩展了64 位、128 位数据访问指令,其他基本操作指令没有变化。
RV32I 指合
esp32 c6价格乐鑫wifi模块代理商RV32I 指令是能够被处理器内核解码并执行的二进制数。在汇编语言中,用助记符表示指令,以便于编程和理解。下面首先介绍 RV32I 指令格式和助记符,然后详细讨论 RV32I指令集中的指令。
1.指令长度
RISC-V 架构支持固定长度指令。
一条指令通常包括两个部分:操作码和操作数。操作码标识该指令的操作类型,操作数则是该指令的操作对象。
RV32I是 32 位 RISC-V 处理器架构的基础指令集。esp32 c6价格乐鑫wifi模块代理商RV32I 指令集指令长度是32 位,其中低 7 位是指令的操作码(Opcode),高 25 位是指令的操作数(Operands)。
RV64I和RV128I指今中的指今长度也是 32 位,扩展指令集“M”“A”“F”“Q”“D”,以及CSR寄存器访问指令的长度也是32位,扩展指令集“C”的指令长度是16位。
其结构与图 4.2相厨为展"我Y-Q-D以及CSK寄存器访同指今的长度也是32亿,打集“C”的指令长度是 16 位。
在内存中,32位指令必须位于4字节对其的边界,16位指令必须是2字节边界对其,否则,处理器内核运行程序时将无法正确取指令,出现异常错误
2.助记符
为了便于记忆和编程,编写汇编程序时用文本格式符号表示指令,即助记符。
RISC V汇编语言采用字母联想方式定义指令的助记符。通常,如果播述书的短语只有一个单词,则取单词的前3 个字母构成助记符。如果描述操作的短语。于一个单词,则取短语中所有单词的首字母,顺序构成助记符。
esp32 c6价格乐鑫wifi模块代理商RV32I指令集中包括算术、逻辑和移位 3 种整数运算指令。通常在运算助记后增加“i”,构成新的助记符,表示源操作数是立即数。如果助记符后附加“u",则示操作数是无符号整数。表列出了 RV32I整数计算指令的助记符。其中,助符后的“(i)”和“(u)”是可选项,分别说明操作数是立即数和无符号整数类型
RV32I整数计算指令助记符
功能 操 作 助记符 解释
整数计算(Integer Computation) addition (immediate) add(i) “加法”运算(i,立即数)
subtract sub “减法”运算(i,立即数)
and (immediate) and(i) “与”运算(i,立即数)
or (immediate) or(i) “或”运算(i,立即数)
xor (immediate) xor(i) “异或”运算(i,立即数)
shift left logical (immediate) sll(i) 逻辑左移(i,立即数)
shift right arithmetic(immediate) sra(i) 算术右移(i,立即数)
shift right logical(immediate) srl(i) 逻辑右移(i,立即数)
load upper immediate lui 装载立即数到寄存器的高 20位
add upper immediate to pc auipc 把立即数加到程序指针的高 20位
set less than immediate unsigned slt(i)(u) 根据比较结果设置寄存器值
在RV32I指令集中,内存访指令装载(load)和存储(store)支持 32 位(word)、16位(halfword)和 8 位(byte)三种数据格式。esp32 c6价格乐鑫wifi模块代理商对于 halfword 和 byte 类型数据指令还支持无符导(unsigne)形式,不需要扩展所装载数据的符号位。为了RV32I的不同类型load和sore 指令助记符。load 和store指令要求中内存数据地址按所访问的数据型对齐。例如,"lw”指令要求数据地址4字节对齐。
RV32Iload和store 指令助记符
功能 操 作 助记符 解 释
装载与储存(Load and Store) load byte (unsigned) Ib(u) 读取 1字节(8 位,u,无符号)
load halfword (unsigned) lh(u) 读取 2字节(16 位,u,无符号)
load word lw 读取4字节(32位)
store byte sb 保存1字节(8位)
store halfword sh 保存2字节(16位)
store word sw 保存4字节(32位)
RV32I跳转指令助记符
功能 操 作 助记符 解 释
跳转(Control Transfer) branch equal beq 如果相等则跳转
branch not equal bne 如果不等则跳转
branch less than (unsigned) blt(u) 如果小于则跳转(u,无符号数)
branch greater and equal( unsigned) bge(u) 如果不小于则跳转(u,无符号数)
jump and link jal 可返回跳转,PC=PC十立即数
jump and link register jalr 可返回跳转,PC-寄存器中的值
RV32I指令集包括分支跳转(branch)和无条件跳转(jump)两种程序跳转指令。esp32 c6价格乐鑫wifi模块代理商branch 指令支持相等(equal)不等(not equal)、大于或等于(greater than or equal)和小于(less than)四种条件判断。branch 指令跳转时,将 12 位立即数以2字节的倍数(忽略立即数的低位)与 PC 相加,作为分支跳转的目标地址。
执行jump 指令时,将jump 的下一条指令的地址(PC + 4,PC 是当前指令jump的指针)保存到返回地址寄存器 ra,然后跳转到目标地址。处理器从子程序返回到主程序时,从 ra 寄存器读取程序返回的指针。因为 x0 不能更改,如果使用 x0 作为目标寄存器,则实现无条件和无返回跳转。
在跳转指令中,获取目标指令地址的方式有立即数寻址和寄存器寻址两种。esp32 c6价格乐鑫wifi模块代理商RV32I 指令集中还包括一些其他(Miscellaneous)指令。其他指令包括控制状态寄存器访问、运行时环境调用以及同步访问指令。
3.指令格式
RV32I 指令集包括算术运算、逻辑运算、移位操作、存储访问、跳转和其他指令不同类型指令的格式有所差别。