其他
新手 RISC-V 编程的几点内容
关注+星标公众号,不错过精彩内容
来源 | CSDN
原文:
https://blog.stephenmarz.com/2021/05/12/tips-to-writing-assembly/
嵌入式专栏
1
在译者的理念中,汇编语言是专门用于填补空白,只有当其它语言不能胜任的时候才会考虑用汇编语言上场工作,不过从这篇博文中透露出的信息来看,国外在教学过程中对于汇编语言的运用范围也是不设限的,而在译者印象中能用汇编语言实现任何功能的程序员,在国内只有求伯君,严援朝等廖廖数人而已,由此可见我们在 IT 基础教育领域要做的工作还很多。
嵌入式专栏
2
嵌入式专栏
3
嵌入式专栏
4
在汇编语言中编写一个函数是一项非常艰苦的任务,大多数 ISA 体系结构(如ARM和RISC-V)的芯片都将附带专门的工作手册,当然这些手册中只是制定了一些基本规则,如何传递参数,如何接收返回结果,又如何构造函数栈祯等等具体的话题都值得深入讨论。
不过幸运的是 RISC-V 寄存器的 “ABI” 命名规则,有助于程序员理解它们的含义。比如:
整数参数在寄存器 A0-A7 中,浮点参数在寄存器 FA0-FA7 中
通过对堆栈指针的 sub 操作去分配函数堆栈。在调用完成后使用 add 操作进行销毁
堆栈大小必须以 8 的整数倍形式分配
所有参数和临时寄存器必须在函数调用后,被视为销毁态
在函数调用之后,已保存寄存器才能被显式保存。如果使用了任何已保存的寄存器,则必须在函数返回之前还原它们的原始值
通过 a0 寄存器做为返回值,将数据返回给调用方。
以下面这段代码为例:
.global main
main:
addi sp, sp, -8
sd ra, 0(sp)
la a0, test_solve
call solve
mv a0, zero
ld ra, 0(sp)
addi sp, sp, 8
ret
嵌入式专栏
5
# used |= 1 << ( x[i * 9 + col] - 1)
li t0, 9
mul t1, s3, t0 # t1 = i * 9
add t1, t1, s2 # t1 = i * 9 + col
slli t2, t1, 2 # Scale by 4
add t2, t2, s6 # x + i * 9 + col
lw t3, 0(t2) # x[i * 9 + col]
addi t3, t3, -1 # x[i * 9 + col] - 1
li t4, 1
sll t4, t4, t3 # 1 << x[i * 9 + col] - 1
or s5, s5, t4 # used |= ...
后台回复『单片机』『电子基础』阅读更多相关文章。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。