第四节arm汇编语言设计2课件.ppt

第四节arm汇编语言设计2课件.ppt

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

精选课件ppt*例4ARM汇编子程序嵌套调用#includestdio.hintmain(){ printf(Helloworld\n); return0;};Example7_asm.sAREAAsm_C,CODE,READONLYENTRY LDR SP,=0x4000 IMPORT __main BL __main B . END精选课件ppt*其他内嵌汇编程序的编写注意点常量:在内嵌汇编指令中,常量前面的“#”可以省略。指令展开:内嵌汇编指令中,如果包含常量操作数,该指令可能被内嵌汇编器展开成几条指令。标号:C程序中的标号可以被内嵌的汇编指令使用,但是只有指令B可以使用C程序中的标号,而指令BL则不能使用。内存单元的分配:所有的内存分配均由C编译器完成,分配的内存单元通过变量供内嵌汇编器使用。内嵌汇编器不支持内嵌程序中用于内存分配的伪指令。精选课件ppt*#definea1intmain(void){chartmp;intr1=0;__asm{MOVtmp,a*aMOVtmp,a==1 MOVtmp,a^0xffffffff MOVtmp,r1=3}}精选课件ppt*MOVR0,#0;初始化MOVR2,#0;MOVtmp,a*aMOVR2,#0;MOVtmp,a==1MVNR2,#0;MOVtmp,a^0xffffffffMOVR3,R0,LSL#3;MOVtmp,r1=3MOVR0,R3MOVR1,R3MOVR0,R1MOVR2,R0精选课件ppt*内嵌汇编程序中的SWI和BL指令SWI和BL指令:在两个指令使用到内嵌汇编中,除了正常的操作数域外,还必须增加以下3个可选的寄存器列表:

用于输入参数的寄存器列表。

用于存储返回结果的寄存器列表。

用于表示那些寄存器将有可能会被修改的寄存器列表。精选课件ppt*内嵌汇编代码举例字符串复制#includestdio.hvoidstr_cpy(constchar*src,char*dst){ intch; __asm { loop://普通ARM汇编代码中的标号后面不能跟冒号。C程序中 //的标号可以被内嵌的汇编指令使用。ARM内嵌汇编代码中 //只有B指令可以使用C的标号,而BL指令不能够使用C代码 //的标号。C程序的标号后面跟冒号,由Goto语句转向标号处。 LDRB ch,[src],#1 STRB ch,[dst],#1 CMPch,#0 BNE loop }}精选课件ppt*LDRBr2,[r0],#1STRBr2,[r1],#1CMPr2,#0BNE{pc}-0xc;0x0MOVpc,r14精选课件ppt*内嵌汇编代码举例字符串复制intmain(void){ constchar*a=Helloworld!\n; charb[20]; __asm { MOVR0,a//将串a的串首地址送到R0寄存器 MOVR1,b//将串b的串首地址送到R1寄存器 BLstr_cpy,{R0,R1}//调用C函数str_cpy() } printf(Originalstring:%s\n,a); printf(Copiedstring:%s\n,b);//半主机方式显示复制前后的两个串 return(0);}精选课件ppt*STMFDr13!,{r4,r14}SUBr13,r13,#0x18ADDr4,pc,#0x2c;#0x50MOVr0,r4ADDr1,r13,#4BLstr_cpy;0x0MOV

文档评论(0)

糖糖老师 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档