![在这里插入图片描述](https://img-blog.csdnimg.cn/7d874b098063451eacf9e9c5dd733608.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX19wb3Bf,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8dc35be156ad4312915d43bf2aad9232.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAX19wb3Bf,size_20,color_FFFFFF,t_70,g_se,x_16)
ARM64与ARM32
aarch64的指令集是 A64
A64移除了批量加载寄存器指令 LDM/STM, PUSH/POP, 使用STP/LDP 一对加载寄存器指令代替;
A64没有提供访问CPSR的单一寄存器,但是提供访问PSTATE的状态域寄存器;
A64没有协处理器的概念,没有协处理器指令MCR,MRC;
A64相比A32少了很多条件执行指令,只有条件跳转和少数数据处理这类指令才有条件执行.
b.<cond>
在Arm-v8架构中,直接访问PC的方式也同x86一样,被禁止了
ARM64与RV
RISCV也有一个恒为0的寄存器为x0 ,ARM64中为 ZR寄存器
RISCV 和 ARM64 一样,不能直接访问(读写)PC
没有mv,bic,neg,无条件跳转label指令,
而是采用伪指令
没有位set,位clr指令
而是用其他指令替代
Bitwise operations supported are OR (bit set), AND (bit clear), and XOR (bit toggle)
没有多字节load/store 指令
只有一个sp寄存器(X2)
arm32 为一个特权级准备了多个bank,arm64为每一个特权级准备了一个
riscv 指令没有 cond 和S 后缀
ARM32的指令模板 为 MNEMONIC{S}{cond} {Rd}, Operand1, Operand2
ARM64 的指令模板中没有 {S} {cond} ,但是将某些指令加上{S} {cond} 直接做成了指令
例如 ADCS (在arm32中没有ADCS,只有ADC,可以加后缀生成ADCS)
例如 b.eq (在arm32中没有b.eq,只有b,可以加后缀生成beq)
但是可见
riscv 没有后缀的概念
根本不存在 S(不管是后缀还是直接带有S的指令)
怎么处理进位
x10是低32位相加的结果,如果结果小于一个加数,那么表示是有进位的,否则就没有。因此通过sltu指令,就可以得到低32位的进位结果。
没有{cond} , 但存在很多跳转指令带了 类似条件的东西,例如 beq,但是这个条件和ARM64/32 完全不同
riscv 的 beq 中的 eq 不是后缀 ,beq是个指令
且 beq 不根据之前指令的状态来运行,而是判断当前操作数中的 大小,来决定走不走分支