ARM汇编的一些规则
本帖最后由 havenow 于 2021-3-26 18:33 编辑ARM参数传入,返回在放在哪个寄存器
参数:R0-R3这4个寄存器用来传递函数调用第1到第4个参数,超出的参数通过堆栈。
返回值:结果为32位时,通过R0返回;结果为64位时,r0放低32位,r1放高32位。
ARM调用方法时,对于寄存器的压栈保护,调用方法与被调用方法分别对哪些寄存器进行压栈保护
被调用模块的寄存器使用
1.调用模块和被调用模块通过R0-R3传递参数,因此参数少于四个时可以随意 使用剩余的而不必保存和恢复
2.使用R4-R11之前一定要先在堆栈中保存起来,退出时再恢复
3.可以使用堆栈,但一定要保证堆栈指针(R13)在进入时和退出时相等
4.R14用于保存返回地址,使用前一定要备份被调用模块的堆栈使用
1.ATPCS规则规定堆栈是满递减(fD)型的,因此使用STMFD/LDMFD指令操作,
2.注意保证进入和退出时堆栈指针相等
ATPCS(ARM-ThumbProcedure Call Standard)寄存器的使用规则
1. 子程序通过寄存器R0~R3来传递参数。这时寄存器可以记作: A0~A3,被调用的子程序在返回前无需恢复寄存器R0~R3的内容。
2. 在子程序中,使用R4~R11来保存局部变量,这时寄存器R4~R11可以记作: V1~V8。如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作。在THUMB程序中,通常只能使用寄存器R4~R7来保存局部变量。
3.寄存器R12用作子程序间内部过程调用寄存器,记作ip;在子程序的连接代码段中经常会有这种使用规则。
4. 寄存器R13用作数据栈指针,记做SP,在子程序中寄存器R13不能用做其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。
5. 寄存器R14用作连接寄存器,记作LR;它用于保存子程序的返回地址,如果在子程序中保存了返回地址,则R14可用作其它的用途。
6. 寄存器R15是程序计数器,记作PC;它不能用作其他用途。
7. ATPCS中的各寄存器在ARM编译器和汇编器中都是预定义的。 R15:程序计数寄存器
指向当前的程序地址。如果修改它的值,就能改变程序的执行流(很多高级技巧就在这里面)。 原来这样,感谢大佬 这个是抄百度文库的吧……{:17_1089:}你确定是原创? 感谢楼主分享 感谢楼主分享
学习了 感谢楼主,收藏 感谢分享 感觉啥也没说啊 感谢楼主分享
页:
[1]
2