ARM汇编语言程序标准和范例学习课件.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C/C++程序与ARM汇编语言程序的相互调用 C/C++程序与汇编程序相互调用时,应遵守相应的ATPCS,主要有五种调用。 ARM汇编子程序调用C语言子程序 ARM汇编子程序调用C++语言子程序 C语言程序调用ARM汇编语言子程序 C++语言程序调用ARM汇编语言子程序 C语言程序调用C++语言子程序 下面就每种具体情况逐一举例说明。 2008年10月23日 南京大学计算机系 * C/C++程序调用ARM汇编子程序要点 设计汇编程序必须遵守ATPCS,保证程序调用时参数的正确传递。 在汇编程序中使用EXPORT指示符声明本程序可以被别的程序调用。 在C语言程序中使用extern关键词声明该汇编程序可以被调用,C++语言程序使用extern “C”来声明该汇编程序可以被调用。 2008年10月23日 南京大学计算机系 * 例1 C程序调用ARM汇编子程序 /* main_0522.c semihosting output mode */ #include stdio.h extern int asmfile(int arg1, int arg2, int arg3); int main(void) { int a1=1,a2=2,a3=4; printf(Example of C Program calling Assembly program!\n); printf((%d + %d + %d) * 600 = %d\n,a1,a2,a3,asmfile( a1, a2, a3)); } 2008年10月23日 南京大学计算机系 * C程序调用ARM汇编子程序(续) ; ASM_0522.s EXPORT asmfile AREA My_pro, CODE, READONLY asmfile STMFD SP!, {R4-R6,R8,R7} add r0, r0, r1 add r0, r0, r2 mov r4, #600 mul r3, r0, r4 mov r0, r3 LDMFD SP!, {R4-R6,R8,R7} mov pc, lr END 2008年10月23日 南京大学计算机系 * 例2 ARM汇编程序调用C语言子程序 本案例程序比较两个IP地址的大小,a1~a4存放IP地址1的值(按照ATPCS传递参数),b1~b4存放IP地址2的值(通过栈传递参数),如果IP地址1的值大于IP地址2的值则返回1,如果IP地址1的值小于IP地址2的值则返回-1 ,如果两者相等则返回零。 IP地址1取值:192, 168, 1, 152, IP地址2取值: 172, 0, 0, 151 2008年10月23日 南京大学计算机系 * 例2 ARM汇编程序调用C子程序(续) /* C代码部分 */ #include stdio.h extern int function(void); /* 声明function是外部函数 */ int compare_ip(int a1, int a2, int a3, int a4, int b1, int b2, int b3, int b4){ if(a1!=b1) return a1b1?1:-1; if(a2!=b2) return a2b2?1:-1; if(a3!=b3) return a3b3?1:-1; if(a4!=b4) return a4b4?1:-1; return 0; } int main(){ printf(This is a example of semihosting\n); printf(result is %d\n,function()); } 2008年10月23日 南京大学计算机系 * 例2 ARM汇编调用C子程序(续2) AREA FUNCTION, CODE, READONLY ;ARM汇编子程序 IMPORT compare_ip EXPORT function function STMFD r13!,{r0-r3,r14} ;保存寄存器到栈区 MOV r3,#0x97 ;存入IP地址2的4个数, 0x97=151 MOV r2,#0 ; 存入0 MOV r1,#0 ; 存入0 MOV r0,#0xac ; 存入0xac=172 STMIA r13, {r0-r3} ; R0-R4覆盖存入栈区的R0-R4位置 MOV r3,#0x98 ; 存入IP地址1的4个数, 0x98=152 MOV r2,#1 ; 存入1 MOV r1,#0x

文档评论(0)

liuxiaoyu98 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档