有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本文目录:- 指令集
- RISC-V简介
- RISC-V基本语法
- 计算机硬件的操作数
- 指令格式
- 逻辑运算
- 32个寄存器
指令集
The words of a computer’s language are called instructions, and its vocabulary is called an instruction set.
----Computer Organization and Design: The Hardware / Software Interface
RISC-V简介
RISC-V由UC Berkeley于2010年开发,与此相对应的,MIPS诞生于1980s,Intel x86则诞生于1970s。
RISC-V基本语法
- 32个寄存器标注为x0~x31,x0永远等于0。
- 共有261个存储字,记为Memory[0], Memory[4]……
指令类别 | 指令名称 | 样例 | 翻译 | 算术 | 加法 | add x5. x6. x7 | x5 = x6 + x7 | | 减法 | sub x5. x6. x7 | x5 = x6 - x7 | | 立即数加 | addi x5. x6. 20 | x5 = x6 + 20 | 数据传输 | 加载双字 | ld x5. 40(x6) | x5 = Memory[x6 + 40] | | 加载字 | lw x5. 40(x6) | | | 加载无符号字 | lwu x5. 40(x6) | | | 加载半字 | lh x5. 40(x6) | | | 加载无符号半字 | lhu x5. 40(x6) | | | 加载比特 | lb x5. 40(x6) | | | 加载无符号比特 | lbu x5. 40(x6) | | | -------- | | | | 存储双字 | sd x5. 40(x6) | Memory[x6 + 40] = x5 | | 存储字 | sw x5. 40(x6) | | | 存储无符号字 | swu x5. 40(x6) | | | 存储半字 | sh x5. 40(x6) | | | 存储无符号半字 | shu x5. 40(x6) | | | 存储比特 | sb x5. 40(x6) | | | 存储无符号比特 | sbu x5. 40(x6) | | | -------- | | | | load reserved | | | | store conditional | | | | load upper immediate | | | 逻辑 | 与 | and x5. x6. x7 | x5 = x6 & x7 | | 或 | or x5. x6. x8 | x5 = x6 or x8 | | 异或 | xor x5. x6. x9 | x5 = x6 ^x9 | | 立即数与 | andi x5. x6. 20 | x5 = x6 & 20 | | 立即数或 | ori x5. x6. 20 | x5 = x6 or 20 | | 立即数异或 | xori x5. x6. 20 | x5 = x6 ^ 20 | 移位 | 逻辑左移 | sll x5. x6. x7 | x5 = x6 << x7 | | 立即数逻辑左移 | slli x5. x6. 3 | x5 = x6 << 3 | | 逻辑右移 | srl x5. x6. x7 | x5 = x6 >> x7 | | 算术右移 | srax5. x6 .x7 | x5 = x6 >> x7 | | 立即数逻辑右移 | srli x5. x6. 3 | x5 = x6 >> 3 | | 立即数算术右移 | srai x5. x6. 3 | x5 = x6 >> 3 | 条件分支 | 相等时分支 | beq x5. x6. 100 | if (x5 == x6) go to PC + 100 | | 不相等时分支 | bne x5. x6. 100 | if (x5 != x6) go to PC + 100 | | 小于则分支 | blt x5. x6. 100 | if (x5 < x6) go to PC + 100 | | 大于等于则分支 | bge x5. x6. 100 | if (x5 >= x6) go to PC + 100 | | 无符号,小于时分支 | bltu x5. x6. 100 | if (x5 < x6) go to PC + 100 | | 无符号,大于等于则分支 | bgeu x5. x6. 100 | if (x5 >= x6) go to PC + 100 | 无条件分支 | 跳转并链接 | jal x1. 100 | x1 = PC + 4 | | 跳转并链接寄存器 | jalr x1. 100(x5) | x1 = PC + 4 |
计算机硬件的操作数
- RISC-V的单个寄存器64bits宽。
- least significant bit用来指代右下的bit(图中的0),most significant bit指代左上的bit(图中的63)
- 每条RISC-V指令翻译成二进制代码之后由六个"fields"组成,分别长7,5,5,3,5,7bits。其中三个5bits用来存放三个操作数所对应的寄存器编号。
- 为了和汇编语言相区分,我们把二进制版本的命令称为机器语言或机器码。
- Java依靠软件解释器(software interpreter)来执行。它的指令集称为Java字节码而不是类似RISC-V这样的机器语言,效率较低
指令格式
R(register)-type:
funct7 | rs2 | rs1 | funct3 | rd | opcode | 7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
I(Immediate)-type: 12 bits用来存地址,rd表示目标寄存器,单寄存器
immediate | rs1 | funct3 | rd | opcode | 12 bits | 5 bits | 3 bits | 5 bits | 7 bits |
S-type:
immediate | rs2 | rs1 | funct3 | immediate | opcode | 7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
opcode = 操作码,funct3和funct7是两个额外的存放操作码的空间
rd = register destination
rs = register source
逻辑运算
算术右移:把左边空出来的位用右边超出去的位来补齐
|