ARM和MIPS架构下函数参数传递与代码优化分析
1. ARM架构参数传递规则
ARM传统的参数传递方案(调用约定)规定,前4个参数通过R0 - R3寄存器传递,其余参数通过栈传递,这与fast - call或win64的参数传递方案类似。
2. 32位ARM不同编译器及模式下的代码分析
2.1 非优化的Keil 6/2013(ARM模式)
.text:00000000 main
.text:00000000 10 40 2D E9 STMFD SP!, {R4,LR}
.text:00000004 03 30 A0 E3 MOV R3, #3
.text:00000008 02 20 A0 E3 MOV R2, #2
.text:0000000C 01 10 A0 E3 MOV R1, #1
.text:00000010 08 00 8F E2 ADR R0, aADBDCD ; "a=%d; b=%d; c=%d"
.text:00000014 06 00 00 EB BL __2printf
.text:00000018 00 00 A0 E3 MOV R0, #0 ; return 0
.text:0000001C 10 80 BD E8 LDMFD SP!, {R4,PC}
前4个参数按顺序通过R0 - R3寄存器传递,R0存储 printf() 格式字符串的指针,R1为1,R2为2,R3为3。地址0x18处的指令将0写入R0,表
ARM与MIPS架构函数参数传递及代码优化
超级会员免费看
订阅专栏 解锁全文
28

被折叠的 条评论
为什么被折叠?



