《嵌入式体系结构及接口技术》第8章 ARM汇编语言与嵌入式C混合编程-教学课件(非AI生成).ppt

《嵌入式体系结构及接口技术》第8章 ARM汇编语言与嵌入式C混合编程-教学课件(非AI生成).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

8.5.3参数传递规则2.参数个数固定的子程序参数传递规则如果系统不包含浮点运算的硬件部件且没有浮点参数时,则依次将各参数传送到寄存器R0~R3中,如果参数个数多于4个,将剩余的字数据通过数据栈来传递;如果包括浮点参数则要通过相应的规则将浮点参数转换为整数参数,然后依次将各参数传送到寄存器R0~R3中。如果参数多于4个,将剩余字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。8.5.3参数传递规则[例8-15]在C语言程序中定义字符串string1和string2,通过调用ARM汇编语言程序将两个字符串内容进行互换。 EXTERN_main AREAstr_Swap,CODE,READONLY ENTRYstart BL _mainstop B stop END extern voidstring_swap(char[],char[]);void_main(void){ charstring1[100]=ARM9TDMI-S; charstring2[100]=IstudyARM; string_swap(string1,string2);}8.5.3参数传递规则[例8-15] EXPORTstring_swap AREAstr_swap,CODE,READONLYstring_swap LDRB R2,[R0],#1 LDRB R3,[R1],#1 STRB R2,[R1,#-1] STRB R3,[R0,#-1] CMP R2,#0 CMPNE R3,#0 BNE string_swap SUBS R2,R2,R3 BMI copy_string2copy_string1 LDRB R2,[R0],#1 STRB R2,[R1],#1 CMP R2,#0 BNE copy_string1 MOV PC,LRcopy_string2 LDRB R3,[R1],#1 STRB R3,[R0],#1 CMP R3,#0 BNE copy_string2 MOV PC,LR END8.5.3参数传递规则[例]传递的参数多于4个时的情况EXTERNsumAREAmain,CODE,READONLYENTRYCODE32startMOVR0,#100MOVR1,#100MOVR2,#100MOVR3,#100STMFDSP!,{R4}MOVR4,#100STMFDSP!,{R4}BLsumexitBexitENDintsum(inta,intb,intc,intd,inte){returna+b+c+d+e;}8.5.3参数传递规则3.子程序结果返回规则(1)结果为一个32位的整数时,通过寄存器R0返回;结果为一个64位整数时,通过寄存器R0,R1返回。(2)结果为一个浮点数时,可以通过浮点运算部件的寄存器F0、D0或者S0来返回;结果为复合型的浮点数(如复数)时,可以通过寄存器F0~Fn或者D0~Dn来返回。(3)对于位数更多的结果,需要通过内存来传递。返回值类型寄存器返回值类型寄存器charR032位结构体R0shortR0longlongR0,R1int/longR0doubleR0,R1floatR064位结构体R0,R132位指针R08.5.3参数传递规则[例8-16]分析执行下面的程序代码后,寄存器R0,R1中的值externlonglongFactorial();void_main(void){ Factorial(); /*注:单步调试在此处查看R0、R1中的内容*/ return0;}longlongFactorial(){chari;longlongNx=1;for(i=1;i=20;i++)Nx=Nx*i;returnNx;}8.6ARM汇编语言与嵌入式C混合编程在嵌入式程序设计中,有些场合(如对具体的硬件资源进行访问)必须用汇编语言来实现,可以采用在嵌入式C语言程序中嵌入汇编语言或嵌入式C语言调用汇编语言来实现。包括3种形式:C程序中内嵌汇编程序、C

文档评论(0)

188****7976 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档