一文带你熟练掌握android的arm32汇编指令。,kotlin枚举注解

一文带你熟练掌握android的arm32汇编指令。,kotlin枚举注解,第1张

一文带你熟练掌握android的arm32汇编指令。,kotlin枚举注解

STR,R0,[R1, #8]! :将R0字数据存入存储器地址R1+8的存储单元,并将新地址R2+8写入R0

STR,R0,[R1,R2]! 将R0字数据存入存储器R1+R2的存储单元中,并将新地址R2+R2写入R2

push{r0,r4-r7}将r0,r4-r7寄存器内容压人堆栈

pop{r0,r4-r7}}将r0,r4-r7寄存器内容从堆栈中d出

出栈使用LDM指令,进栈使用STM指令。

3.跳转指令简介


B 无条件跳转

BL 带连接的无条件跳转

BX 带状态却换的无条件跳转

BLX 带连接和状态的无条件跳转

4.存储寄存指令详解


LDR:从存储器中加载数据到寄存器–Load

LDR R8,[R9, #04]: R8为待加载数据的寄存器,加载值为R9+0x4所指向的存储单元

STR:将寄存器的数据存储到存储器中–store

STR R8, [R9,#04]: 将R8寄存器的数据存储到R9+0x4所指向的存储单元

LDM:将存储器的数据加载到寄存器列表→

LDM R0,{R1-R3}将R0指向的存储单元的数据依次加载到R1,R2,R3寄存器

STM:将一个寄存器列表的数据存储到指定的存储器中

PUSH:将寄存器值推入堆栈


POP:将堆栈值推出到寄存器

SWP:将寄存器与存储器之间的数据进行交换

SWP R1, R1 [R0] 将R1寄存器与R0指向的存储单元的内容进行交换

5.寄存器详解


ARM32汇编器对ARM寄存器进行了预定义,所有寄存器和协处理器名都是大小写敏感,

Ro-R15和r0-r15。

a1-a4(参数,结果或者临时寄存器,与r0-r3一样的)

v1-v8(变量寄存器,与r4-r11一样)

sb和SB(静态基址寄存器,与r9一样)

sl和SL(堆栈限制寄存器,与r10一样)

fp和FP(帧指针,与r11统一)

ip和IP(过程调用中间临时寄存器,与r12统一)

sp和SP(堆栈指针,与r13统一)

lr和LR(连接寄存器,与r14统一)

pc和PC(程序计数器,与r15统一)

cpsr和CPSR(程序状态寄存器)

spsr和SPSR(程序状态寄存器)

f0-f7和F0-F7(FPA寄存器)

s0-s31和S0-S31(VFP单精度寄存器)

d0-d15和D0-D15(VFP双精度寄存器)

p0-p15(协处理器0-15)

c0-c15(协处理器寄存器0-15)

6.汇编在函数中使用需关注点:


1.当函数参数少于4个时,子程序间通过寄存器R0-R3 来进行传递参数;当参数个数多于4个时, 将多余的参数通过数据栈进行传递,入栈顺序与参数顺序正好相反,子程序返回前无需恢复R0~R3的值。

2.在子程序中,使用R4~R11保存局部变量,若使用需要入栈保存,子程序返回前需要恢复这些寄存器;R12是临时寄存器,使用不需要保存。
3.R13用作数据帧指针,记作SP;R14用作链接寄存器,记作LR,用于保存子程序返回时的地址;R15是程序计数器,记作PC。
4.ATPCS规定堆栈是满递减堆栈FD;
需要恢复这些寄存器;R12是临时寄存器,使用不需要保存。
3.R13用作数据帧指针,记作SP;R14用作链接寄存器,记作LR,用于保存子程序返回时的地址;R15是程序计数器,记作PC。
4.ATPCS规定堆栈是满递减堆栈FD;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存