C语言和ARM汇编语言的相互调用

上传人:206****923 文档编号:37521436 上传时间:2018-04-17 格式:DOC 页数:3 大小:30.50KB
返回 下载 相关 举报
C语言和ARM汇编语言的相互调用_第1页
第1页 / 共3页
C语言和ARM汇编语言的相互调用_第2页
第2页 / 共3页
C语言和ARM汇编语言的相互调用_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《C语言和ARM汇编语言的相互调用》由会员分享,可在线阅读,更多相关《C语言和ARM汇编语言的相互调用(3页珍藏版)》请在金锄头文库上搜索。

1、C C 语言和语言和 ARMARM 汇编语言的相互调用汇编语言的相互调用1.汇编程序访问 C 语言全局变量全局变量只能通过地址间接调用,为了访问 C 语言中全局变量,首先要通过 extern 伪指令引入全局变量,然后将其地址装入寄存器中。对于 unsigned char 类型,使用 LDRB/STRB 访问;对于 unsigned short 类型,使用 LDRH/STRH 访问;对于 unsigned int 类型,使用 LDR/STR 访问;对于 char 类型,使用 LDRSB/STRSB 访问;对于 short 类型,使用 LDRSH/STRSH 访问;例子:.text.global

2、asmsubroutine.extern globvarasmsubroutine:LDR R1,=globvarLDR R0,R1ADD R0,R0,#2STR R0,R1MOV PC,LR.end2.C 程序调用汇编程序C 程序调用汇编程序首先通过 extern 声明要调用的汇编程序模块,声明中形参 个数要与汇编程序模块中需要的变量个数一致,且参数传递要满足 ATPCS 规则, 然后在 C 程序中调用。例子:#includeextern void *strcopy(char*d,char*s);/模块声明int main()char*srcstr=“first“;char*dststr=“

3、second“;strcopy(dststr,srcstr);/汇编模块调用;.text.global strcopyStrcopy:LDRB R2,R1,#1STRB R2,R0,#1CMP R2,#0BNE SstcopyMOV PC,LR.end汇编程序调用 C 程序在调用之前必须根据 C 语言模块中需要的参数个数,以及 ATPCS 参数规则,完 成参数传递,即前四个参数通过 R0-R3 传递,后面的参数通过堆栈传递,然后 再利用 B、BL 指令调用。例子:int g(int a,int b,int c,int d,int e)/C 语言函数原型return(a+b+c+d+e);汇编语言完成是求 i+2i+3i+4i+5i 的结果;.global _start.text_start:.extern g ;引入 c 程序STR LR,SP,-#4!;保存 PCADD R1,R0,R0ADD R2,R1,R0ADD R3,R1,R2STR R3,SP,#-4!ADD R3,R1,R1BL g ;调用 C 函数 gADD SP,SP,#4LDR PC,SP,#4.endreturn(0);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号