废话:
大三老菜狗来更新啦,哎,感叹一下生活不易,天天犯困。
注释:
RISC-V汇编学习笔记系列是RISC-V学习笔记系列下的一个分支,在这里着重讲解的是RISC-V的汇编指令是如何实现的。对读懂RISC-V有一定的帮助,但因为不是主线剧情所以会更加随意一点。
汇编的变量:
汇编的变量是通过寄存器实现,为了硬件设计简单,汇编语言不使用变量作为操作数
汇编的操作数是寄存器:CPU中采用有限数量的寄存器操作直接在寄存器中完成
优点:硬件化的寄存器的数据传递与处理速度很快
寄存器:
寄存器作为处理器数据通路中的组件,数据转移与操作受到控制器的控制,通过ALU单元实现对寄存器操作数二点运算操作,通过控制器与存储单元键的读写访存操作实现处理器系统与存储系统键的数据交换
寄存器的设计通用原则:数量适量,少而快
(寄存器是物理上存在的,因此数量有限)RISC-V是有32个寄存器的
这里说明一下,我使用的开源RISC-V项目是32位宽(32bits)的也就是RV32,但使用的教材是RV64的
RISC-V寄存器编号:
1.x0 - x31
2.x0寄存器的值总为0,其他寄存器为其他值
RISC-V汇编语言与C的区别
因为汇编操作的是寄存器所以不需要定义变量的类型,寄存器中的值以何种方式处理是由指令操作决定
RISC-V注释符:
RISC-V汇编语言是以" # "作为注释符,这与python的注释符是一样的
(注释符能让代码更具可读性,因此正确的使用注释符是很重要的)
RISC-V汇编指令的基本用法:
-One two, three, four add x1, x2, x3
—One :操作数的名
—two :物理操作数
—three :第一个原操作数
—four :第二个原操作数
RISC-V的加法和减法:
1.加法
add x1, x2, x3 (in RISC-V) <——> a = b + c (in C)
x1 <=> a x2 <=> b x3 <=> c
2.减法
sub x1, x2, x3 (in RISC-V) <——> a = b - c (in C)
x1 <=> a x2 <=>b x3<=>c
RISC-V的加减法整合(突出一个麻烦):
add x10, x1, x2 # a = b +c
1.a = b + c + d - e (in C) <——> add x10, x10, x3 # a = a + d
sub x10, x10, x4 # a = a - e
RISC-V带括号的加减法整合:
add x5, x20, x21 # a = g +h
2.f = (g + h)- (i + j) (in C) <——> add x6, x22, x23 # b = i + j
sub x19, x5, x6 # f = a - b
RISC-V含立即数的加减法:
1.加法
addi x3, x4, 10 (in RISC-V) <——> f = g + 10 (in C)
x3 <=> f x4 <=> g
2.减法
addi x3, x4, -10 (in RISC-V) <——> f = g - 10
x3 <=> f x4 <=> g
3.立即数0在RISC-V中通过硬连线的方式固定为0,及x0寄存器
因此x0寄存器无法作为物理操作数