硬件软件接口 (RISC-V) Chapter 2

计算机组成与设计-硬件软件接口 Chapter2

  • 指令集
  • 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基本语法

  1. 32个寄存器标注为x0~x31,x0永远等于0。
  2. 共有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) Chapter 2_第1张图片

  • 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

逻辑运算

算术右移:把左边空出来的位用右边超出去的位来补齐

32个寄存器

编号 描述 call时是否受保护
x0 常数0 硬件编码
x1(ra) 返回地址寄存器(return address)
x2(sp) 栈指针(stack pointer)
x3(gp) 全局指针(global pointer)
x4(tp) 线程指针(thread pointer)
x5 ~ x7 临时寄存器
x8 ~ x9 保留寄存器
x10 ~ x17 传参或传递返回值
x18 ~ x27 保留寄存器
x28 ~ x31 临时寄存器

(未完待续)

你可能感兴趣的:(RISC-V)