赞
踩
ARM64有34个寄存器,包括31个通用寄存器、SP、PC、CPSR
63 32 31 0
|--------------------|--------------------|
| | |
|--------------------|--------------------|
|---------Wn---------|
|-------------------Xn--------------------|
用于寄存器和内存之间传数据
str x0, [sp] //x0->sp寄存器指向的内存位置 用于将寄存器数据存入内存
ldr x0, [sp] //x0<-sp寄存器指向的内存位置 用于将内存数据加载到寄存器
ldr x5, [x6, #0x8] // => *x5 = *(x6 + 0x8) 前变址
ldr x5, [x6], #0x8 // => *x5 = *x6, x6 += 0x8 回写 后变址
ldr x5, [x6, #0x8]! // => *x5 = *(x6 + 0x8), x6 += 0x8 回写 前变址
ARM64中栈空间以16字节(128bit)作为一个存储单元,而stp和ldp指令可以同时操作两个寄存器,所以出入栈一般用stp和ldp指令实现
stp x29, x30, [sp, #-16]! //入栈(压栈)
ldp x29, x30, [sp], 16 //出栈
只能用于在寄存器之间传递数据
mov x1, x0 // x1 <- x0
add x0, x1, x2 // *x0 = *x1 + *x2
sub x0, x1, x2 // *x0 = *x1 - *x2
bl ffff000008dc566c
//下一条指令
先把下一条指令的地址
放在寄存器lr(x30)中,再跳转到ffff000008dc566c
调用ret指令会把lr寄存器的值放在PC寄存器里,从而跳转回下一条指令
ret
负载将寄存器lr(x30)的值放入PC寄存器
注意:PC寄存器的值不能直接改写,但可以用ret指令间接改写
···待补充···
https://blog.csdn.net/weixin_43549265/article/details/121993888
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。