ARM 汇编与C程序的混合编程(怎样实现4个以上的参数的传递)!
答案:1 悬赏:30
解决时间 2021-01-24 08:13
- 提问者网友:爱了却不能说
- 2021-01-23 08:07
ARM 汇编与C程序的混合编程(怎样实现4个以上的参数的传递)!
最佳答案
- 二级知识专家网友:夜余生
- 2021-01-23 08:48
ADD proc
arg_C equ 0xC
arg_8 equ 8
arg_4 equ 4
arg_0 equ 0
MOV R12, SP
STMFD SP!, {R0-R3} ;四个参数
STMFD SP!, {R4-R10,R12,LR}
SUB SP, SP, #0x10
LDR R0, [SP,#0x34+arg_0]
LDR R1, [SP,#0x34+arg_4]
LDR R2, [SP,#0x34+arg_8]
ADD R0, R0, R1
ADD R0, R0, R2
ADD SP, SP, #0x10
LDMFD SP, {R4-R10,SP,PC}
ENDP
如果参数传递大于 4 个,那么你在 BL 的地方应使用:
....
STR R0, [SP,#0x8] ;第七个
STR R0, [SP,#0x4] ;第六个
STR R0, [SP,#0x0] ;第五个
============================================
我理解你的意思了
LDR r0,=0x1
LDR r1,=0x2
LDR r2,=0x3
BL add
改为:
LDR r0,=0x1
STR R0, [SP,#0x0]
LDR r1,=0x2
STR R1, [SP,#0x4]
LDR r2,=0x3
STR R2, [SP,#0x8]
BL ADD
你是这个意思吧?
------------
int a = R0
int b = R1
int c = R2
arg_C equ 0xC
arg_8 equ 8
arg_4 equ 4
arg_0 equ 0
MOV R12, SP
STMFD SP!, {R0-R3} ;四个参数
STMFD SP!, {R4-R10,R12,LR}
SUB SP, SP, #0x10
LDR R0, [SP,#0x34+arg_0]
LDR R1, [SP,#0x34+arg_4]
LDR R2, [SP,#0x34+arg_8]
ADD R0, R0, R1
ADD R0, R0, R2
ADD SP, SP, #0x10
LDMFD SP, {R4-R10,SP,PC}
ENDP
如果参数传递大于 4 个,那么你在 BL 的地方应使用:
....
STR R0, [SP,#0x8] ;第七个
STR R0, [SP,#0x4] ;第六个
STR R0, [SP,#0x0] ;第五个
============================================
我理解你的意思了
LDR r0,=0x1
LDR r1,=0x2
LDR r2,=0x3
BL add
改为:
LDR r0,=0x1
STR R0, [SP,#0x0]
LDR r1,=0x2
STR R1, [SP,#0x4]
LDR r2,=0x3
STR R2, [SP,#0x8]
BL ADD
你是这个意思吧?
------------
int a = R0
int b = R1
int c = R2
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯