汇编语言概念介绍
- 一种低级语言,只是把机器语言改造了一下。抽象层次低。抽象层次高意味着更接近人的思维。汇编语言与机器思维类似
- 缺点:难读,难写,难移植
- 难写:高级语言对应的一条需要写很多条
- 难移植:汇编语言与机器码一一对应
- 优点:灵活,强大
- 灵活:优化过程 编译器来完成当翻译高级语言时;运用机器的特性。绕开编译器去优化。高级语言用c语言编写库
- 强大:底层对硬件控制,做更深入的优化
- 应用:
- 需要直接访问底层硬件的地方
- 需要对性能执行极致优化
汇编语言语法介绍
- gnu汇编器
- 大写S:包含预处理的东西小写s:纯粹的汇编指令
- .s文件有多条语句组成statement
- 每一条语句由三部分组成
[label:][operation][comment]方括号表示可选,全为方括号可选 。注释
- label:给指令加了一个地址,通过地址引用
- operation可以有多种类型:
- 指令
- 伪指令:非原生,为了提高写代码的效率;起了一个别名,多条指令集合。指令组合的别名。
- directive:指示/伪操作。以小点开头。汇编器的东西 .
text告诉汇编器放到text的一个section中
- 宏:macro

- 注释
risc-v汇编指令操作对象:寄存器与内存
寄存器:32个通用寄存器x0~x31
- hart 处理器最小单元,在执行算术逻辑运算时所操作的数据必须直接来自寄存器*
内存:
- 读写操作使用字节为基本单位
- rv32最多可访问2^32个字节内存空间
汇编指令编码格式
- 指令长度:4字节
- 指令对齐:加载到内存的地址,4的倍数
- 32个bit划分为不同的域field
- func3/7和opcode一起决定最终的指令类型
- 最低两位都为11
- rs1 rs2 rd5位 32个寄存器
- 指令在内存中按照小端序排列
逻辑运算指令
- 与或非操作。二进制底层操作。
- 没有直接提供非的操作,但提供了xor.
- 非的操作通过异或来实现。和-1进行异或操作。
移位运算指令
逻辑移位
- 补的是0sll( shift left logical)
算术移位
内存读写指令load and store
- lb(u),lh(u)符号扩展,zero扩展;一个字节,两个字节;lw;
- sb,sh,sw;
条件分支指令
- b type
- 立即数不是放在一起的,分布在两块地方,非连续

- 跳转的目标地址的计算方法:立即数*2,考虑压缩指令?指令最小对齐方式。两个字节。?符号扩展后和pc值相加,-4096的由来
- imm没有0位
- 具体编程时用标号代替,标号label地址,由编译器来决定Imm
- 变量看成是寄存器;
int i =0
while(i<5)i++;
- while 循环条件判断;li 构成大数麻烦
- 这段代码两个寄存器
li x5,0
li x6,5
loop:
addi x5,x5,
bne x5,x6,loop
无条件跳转指令
jal 函数调用的地方
jalr 将目标地址放到寄存器中