note-RISC-V
伪指令与基本指令
伪指令就是并不是硬件实现的直接指令,只是给解释器看的,比如li
就是说向li这种指令,其实并不直接对硬件进行操作
实际上他就是一个addi指令
加法、减法
1 | li t0, 20 # li: load immediate 加载立即数,现在这种写法是10进制 |
系统调用
一共4步
1 | # Step 1. Load the service number in register a7. |
mv其实是cp并不是会把原来的地方的数据就清空了的
.data .text
.text就是代码指令开始的地方
带.
的就是写给汇编器看的,比如.data编译器就会放到.data的块的地方
.text就会放到存放代码的地方(如0x0040 0000)
.word = 4byte
1 | .data |
数组
1 | .data |
branch-max.asm
1 | # 实现c = max(a,b) |
array-index-bit.asm求一个数组正数的和与负数的和
1 | .data |
proc-max.asm函数调用
1 | .data |
调用函数
参数多了可以考虑用栈来传递
1 | jalr zero 0(ra) # jalr: jump and link register |
zero的作用:
jalr会做两件事情
-
一是按照后面给的0(ra)进行跳转
-
二是会把目前所在位置的下一条指令的地址存入给出的寄存器中,如果把zero换成t0就会保存到t0,写zero的话就表示不想存这个下一条地址(用不到),因为写到zero的东西都会被清零
proc-fact.asm递归
1 | .text |
注意ra的值会变
- 标题: note-RISC-V
- 作者: SYuan03
- 创建于 : 2023-06-23 21:13:08
- 更新于 : 2024-09-30 20:52:04
- 链接: https://bblog.031105.xyz/posts/2023-Spring-Courses-编译原理/note-risc-v.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
推荐阅读
推荐阅读
评论