下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 ARM汇编语言调用C函数之参数传递

ARM汇编语言调用C函数之参数传递.

ARM汇编语言调用C函数之参数传递

危险恋情1981
2019-06-25 0人阅读 举报 0 0 暂无简介

简介:本文档为《ARM汇编语言调用C函数之参数传递doc》,可适用于职业教育领域

arm汇编语言调用C函数之参数传递于ARM体系来说,不同语言撰写的函数之间相互调用(mixcalls)遵循的是ATPCS(ARMThumbProcedureCallStandard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS的详细内容可以查看ADSOnlineBooksDeveloperGuide的节。这篇文档要讲的是汇编代码中对C函数调用时如何进行参数的传递以及如何从C函数正确返回。不同于x的参数传递规则,ATPCS建议函数的形参不超过个,如果形参个数少于或等于,则形参由R,R,R,R四个寄存器进行传递若形参个数大于,大于的部分必须通过堆栈进行传递。我们先讨论一下形参个数为的情况实例:testasmargsasmIMPORTtestcargs声明testcargs函数AREATESTASM,CODE,READONLYEXPORTtestasmargstestasmargsSTRlr,sp,#!保存当前lrldrr,=x参数ldrr,=x参数ldrr,=x参数ldrr,=x参数bltestcargs调用C函数LDRpc,sp,#将lr装进pc(返回main函数ENDtestcargscvoidtestcargs(inta,intb,intc,intd{printk("testcargs:n"printk("xxxxn",a,b,c,d}maincintmain({testasmargs(for(}程序从main函数开始执行,main调用了testasmargs,testasmargs调用了testcargs,最后从testasmargs返回main。代码分别使用了汇编和C定义了两个函数,testasmargs和testcargs,testasmargs调用了testcargs,其参数的传递方式就是向R~R分别写入参数值,之后使用bl语句对testcargs进行调用。其中值得注意的地方是用红色标记的语句,testasmargs在调用testcargs之前必须把当前的lr入栈,调用完testcargs之后再把刚才保存在栈中的lr写回pc,这样才能返回到main函数中。如果testcargs的参数是个呢这种情况testasmargs应该怎样传递参数呢实例:testasmargsasmIMPORTtestcargs声明testcargs函数AREATESTASM,CODE,READONLYEXPORTtestasmargstestasmargsSTRlr,sp,#!保存当前lrldrr,=x参数ldrr,=x参数ldrr,=x参数ldrr,=x参数ldrr,=xstrr,sp,#!参数入栈ldrr,=xstrr,sp,#!参数入栈ldrr,=xstrr,sp,#!参数入栈ldrr,=xstrr,sp,#!参数入栈bltestcargslotsADDsp,sp,#清除栈中参数,本语句执行完后sp指向参数ADDsp,sp,#清除栈中参数,本语句执行完后sp指向参数ADDsp,sp,#清除栈中参数,本语句执行完后sp指向参数ADDsp,sp,#清除栈中参数,本语句执行完后sp指向lrLDRpc,sp,#将lr装进pc(返回main函数ENDtestcargscvoidtestcargs(inta,intb,intc,intd,inte,intf,intg,inth{printk("testcargslots:n"printk("xxxxxxxxn",a,b,c,d,e,f,g,h}maincintmain({testasmargs(for(}这部分的代码和实例的代码大部分是相同的,不同的地方是testcargs的参数个数和testasmargs的参数传递方式。在testasmargs中,参数~参数还是通过R~R进行传递,而参数~参数则是通过把其压入堆栈的方式进行传递,不过要注意这四个入栈参数的入栈顺序,是以参数>参数>参数>参数的顺序入栈的。直到调用testcargs之前,堆栈内容如下:sp>|参数|继续阅读

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/6

ARM汇编语言调用C函数之参数传递

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利