新ちゃん 发表于 2020-8-18 15:42:15

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

本文目录:
[*]指令集
[*]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, Memory……


指令类别指令名称样例翻译
算术加法add x5. x6. x7x5 = x6 + x7
减法sub x5. x6. x7x5 = x6 - x7
立即数加addi x5. x6. 20x5 = x6 + 20
数据传输加载双字ld x5. 40(x6)x5 = Memory
加载字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 = 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. x7x5 = x6 & x7
或or x5. x6. x8x5 = x6 or x8
异或xor x5. x6. x9x5 = x6 ^x9
立即数与andi x5. x6. 20x5 = x6 & 20
立即数或ori x5. x6. 20x5 = x6 or 20
立即数异或xori x5. x6. 20x5 = x6 ^ 20
移位逻辑左移sll x5. x6. x7x5 = x6 << x7
立即数逻辑左移slli x5. x6. 3x5 = x6 << 3
逻辑右移srl x5. x6. x7x5 = x6 >> x7
算术右移srax5. x6 .x7x5 = x6 >> x7
立即数逻辑右移srli x5. x6. 3x5 = x6 >> 3
立即数算术右移srai x5. x6. 3x5 = x6 >> 3
条件分支相等时分支beq x5. x6. 100if (x5 == x6) go to PC + 100
不相等时分支bne x5. x6. 100if (x5 != x6) go to PC + 100
小于则分支blt x5. x6. 100if (x5 < x6) go to PC + 100
大于等于则分支bge x5. x6. 100if (x5 >= x6) go to PC + 100
无符号,小于时分支bltu x5. x6. 100if (x5 < x6) go to PC + 100
无符号,大于等于则分支bgeu x5. x6. 100if (x5 >= x6) go to PC + 100
无条件分支跳转并链接jal x1. 100x1 = 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:

funct7rs2rs1funct3rdopcode
7 bits5 bits5 bits3 bits5 bits7 bits

I(Immediate)-type: 12 bits用来存地址,rd表示目标寄存器,单寄存器

immediaters1funct3rdopcode
12 bits5 bits3 bits5 bits7 bits

S-type:

immediaters2rs1funct3immediateopcode
7 bits5 bits5 bits3 bits5 bits7 bits

opcode = 操作码,funct3和funct7是两个额外的存放操作码的空间
rd = register destination
rs = register source
逻辑运算
算术右移:把左边空出来的位用右边超出去的位来补齐

新ちゃん 发表于 2020-8-18 15:42:48

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单片机中文网


页: [1]
查看完整版本: 硬件软件接口 (RISC-V) Chapter 2