硬件软件接口 (RISC-V) Chapter 2
生活随笔
收集整理的这篇文章主要介绍了
硬件软件接口 (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基本语法
| 算术 | 加法 | 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:
| 7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
I(Immediate)-type: 12 bits用来存地址,rd表示目标寄存器,单寄存器
| 12 bits | 5 bits | 3 bits | 5 bits | 7 bits |
S-type:
| 7 bits | 5 bits | 5 bits | 3 bits | 5 bits | 7 bits |
opcode = 操作码,funct3和funct7是两个额外的存放操作码的空间
rd = register destination
rs = register source
逻辑运算
算术右移:把左边空出来的位用右边超出去的位来补齐
32个寄存器
| 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) Chapter 2的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 京东云,走进产业数字化深处
- 下一篇: 漫谈高数(转载)