ARM 汇编与C程序的混合编程(怎样实现4个以上的参数的传递)!

用的编译器是Codewarrior,调试器是AXD请高手编出具体程序!比如这样的两段程序,如何实现从3个参数传递到5个参数的传递的扩展!对应的汇编程序是:AREAasm,... 用的编译器是Codewarrior ,调试器是AXD
请高手编出具体程序!
比如这样的两段程序,如何实现从3个参数传递到5个参数的传递的扩展!
对应的汇编程序是:
AREA asm,CODE,READONLY
IMPORT add
ENTRY
LDR r0,=0x1
LDR r1,=0x2
LDR r2,=0x3
BL add
B .
END
对应的add函数的C程序为:
int add(int a, int b, int c)
{
return a+b+c;
}
请高手编出具体实现的程序!
展开
 我来答
gjcn1234
2011-04-10 · TA获得超过133个赞
知道答主
回答量:75
采纳率:0%
帮助的人:0
展开全部
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式