- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二种参数传递方法使用C全局变量进行参数传递汇编函数C程序
鲁东大学 LUDONG UNIVERSITY 调用问题2: 参数传递 C调用函数使用的实参,根据APCS规则,编译器将按照顺序通过R0~R3寄存器传递给汇编函数。 汇编函数 C调用 func func(arg1,arg2,arg3,arg4) r0 r1 r2 r3 鲁东大学 LUDONG UNIVERSITY AREA SCopy, CODE EXPORT strcopy strcopy LDRB r2, [r1],#1 STRB r2, [r0],#1 CMP r2, #0 #include stdio.h extern void strcopy(char *d, char *s); int main() { char srcstr[] = First string - source ; char dststr[] = Second -destination ; strcopy(dststr,srcstr); } BNE strcopy MOV pc,lr END 鲁东大学 LUDONG UNIVERSITY 第二种参数传递方法 使用C全局变量进行参数传递 汇编函数 C程序 import globalvar 定义全局变量globalvar func extern func(void) ldr r0,=globalvar int main() ldr r1,[r0] { … func() } ;声明无形参 R1为globalvar的值 通过内存传递参数,速度慢 ;调用无实参 鲁东大学 LUDONG UNIVERSITY III.汇编程序中调用C函数 AREA SCopy, CODE EXPORT strcopy IMPORT srcstr IMPORT dststr strcopy LDR r0,=dststr LDR r1,=srcstr #include stdio.h char srcstr[] = First string - source ; char dststr[] = Second -destination ; extern void strcopy(void); int main() { strcopy(); } LDRB r2, [r1],#1 STRB r2, [r0],#1 CMP r2, #0 BNE strcopy MOV pc,lr END char型8位 int型16位 鲁东大学 LUDONG UNIVERSITY III.汇编语言中调用C函数 系统启动过程: 系统启动-0址 0元 B reset 复位异常处理程序为汇编语言程序对系统部分初始化 将控制权交给C语言编写的启动程序,继续对包括RAM,Cache在内的系统器件进行初始化 鲁东大学 LUDONG UNIVERSITY III.汇编语言中调用C函数 调用方法: IMPORT函数名,BL函数名 汇编程序 IMPORT 函数名 … r0 r1 r2 r3 BL 函数名 func(arg1,arg2,arg3,arg4) C函数 调用 传参 鲁东大学 LUDONG UNIVERSITY int sum(int a, int b, int c) { return a + b + c; } AREA f, CODE, READONLY IMPORT sum ENTRY start MOV r1,#1 MOV r2,#2 MOV r3,#3 BL sum END 内嵌汇编: C/C++编译器编译 汇编:汇编器直接汇编 突出的不同: 1)汇
原创力文档


文档评论(0)