欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    中国矿业大学嵌入式课件5复习过程.ppt

    • 资源ID:77674246       资源大小:390KB        全文页数:41页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    中国矿业大学嵌入式课件5复习过程.ppt

    中国矿业大学嵌入式课件中国矿业大学嵌入式课件5 52.6.2 指令集介绍(序)lARM伪指令ARM伪指令不属于ARM指令集中的指令,是为了编程方便而定义的。伪指令可以像其它ARM指令一样使用,但在编译时这些指令将被等效的一条或多条ARM指令所代替。ARM伪指令有四条,分别为ADR伪指令、ADRL伪指令、LDR伪指令、NOP伪指令。ARM伪指令小范围的地址读取ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。ADRcond register,exprADR伪指令格式指令执行的条件码加载的目标寄存器地址表达式地址表达式expr的取指范围:当地址值是字节对齐时,其取指范围为-255255;当地址值是字对齐时,其取指范围为-10201020;ARM伪指令小范围的地址读取ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。.ADR R0,Delay .Delay MOV R0,r14 .应用示例(源程序):使用伪指令将程序标号Delay的地址存入R0 .0 x20 ADD R1,PC,#0 x3c .0 x64 MOV R0,R14 .ARM伪指令小范围的地址读取ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。.ADRL R1,Delay .Delay MOV R0,R14 .应用示例(源程序):编译后的反汇编代码:使用伪指令将程序标号Delay的地址存入R1地址程序代码ARM伪指令小范围的地址读取ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。.ADRL R1,Delay .Delay MOV R0,R14 .应用示例(源程序):.0 x20 ADD R1,PC,#0 x3c .0 x64 MOV R0,R14 .编译后的反汇编代码:使用伪指令将程序标号Delay的地址存入R0ADR伪指令被汇编成一条指令ARM伪指令小范围的地址读取ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。应用示例2(查表):ADR R0,DISP_TAB;加载转换表地址 LDRB R1,R0,R2;使用R2作为参数,进行查表 DISP_TAB DCB 0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8ARM伪指令中等范围的地址读取ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。ADRLcond register,exprADRL伪指令格式指令执行的条件码加载的目标寄存器地址表达式地址表达式expr的取指范围:当地址值是字节对齐时,其取指范围为-64K64K;当地址值是字对齐时,其取指范围为-256K256K;ARM伪指令中等范围的地址读取ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。.ADRL R0,Delay .Delay MOV R0,r14 .应用示例(源程序):使用伪指令将程序标号Delay的地址存入R0ARM伪指令中等范围的地址读取ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。.ADRL R0,Delay .Delay MOV R0,R14 .应用示例(源程序):.0 x20 ADD R1,PC,#0 x400 x24 ADD R1,R1,#0 xFF00 .0 xFF68 MOV R0,R14 .编译后的反汇编代码:使用伪指令将程序标号Delay的地址存入R0地址程序代码ARM伪指令中等范围的地址读取ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。.ADRL R0,Delay .Delay MOV R0,R14 .应用示例(源程序):.0 x20 ADD R1,PC,#0 x400 x24 ADD R1,R1,#0 xFF00 .0 xFF68 MOV R0,R14 .编译后的反汇编代码:使用伪指令将程序标号Delay的地址存入R0ADRL伪指令被汇编成两条指令ARM伪指令大范围的地址读取LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。LDRcond register,=expr|label_exprLDR伪指令格式指令执行的条件码加载的目标寄存器基于PC的地址表达式或外部表达式注意:1.从指令位置到文字池的偏移量必须小于4KB;2.与ARM指令的LDR相比,伪指令的LDR的参数有“=”号。ARM伪指令大范围的地址读取LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。应用示例(加载常量):LDR R2,=0 xFF0 ;MOV R2,#0 xFF0LDR R0,=0 xFF000000 ;MOV R0,#0 xFF000000LDR R1,=0 xFFFFFFFE ;MVN R1,#0 x1ARM伪指令大范围的地址读取LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。应用示例(加载地址):.LDR R1,=InitStack .InitStack MOV R0,LR .使用伪指令将程序标号InitStack的地址存入R1ARM伪指令大范围的地址读取LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。应用示例(加载地址):编译后的反汇编代码:.LDR R1,=InitStack .InitStack MOV R0,LR .0 x60 LDR R1,0 xb4 .0 x64 MOV R0,LR .0 xb4 DCD 0 x64使用伪指令将程序标号InitStack的地址存入R1地址程序代码ARM伪指令大范围的地址读取LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。应用示例(加载地址):编译后的反汇编代码:.LDR R1,=InitStack .InitStack MOV R0,LR .0 x60 LDR R1,0 xb4 .0 x64 MOV R0,LR .0 xb4 DCD 0 x64使用伪指令将程序标号InitStack的地址存入R1LDR伪指令被汇编成一条LDR指令,并在文字池中定义了一个常量,该常量为InitStack标号的地址ARM伪指令空操作伪指令NOP伪指令在汇编时将会被代替成ARM中的空操作,比如可能是“MOV R0,R0”指令等。NOP可用于延时操作。NOPNOP伪指令格式应用示例(延时子程序):MOV R1,#0 x1234Delay NOP;空操作 NOP NOP SUBS R1,R1,#1;循环次数减一 BNE Delay;如果循环没有结束,跳转Delay继续 MOV PC,LR;子程序返回ARM汇编程序设计l由于高级编程语言隐藏了CPU执行指令的许多细节,因此在只关心系统所具有功能的系统中,采用高级语言编写程序更为合适。但是,CPU执行指令的细节差异会反应在系统的非功能特性上,例如系统程序的规模和运行速度。因此,掌握汇编语言程序设计对于嵌入式系统的设计者来说是非常必要的。lARM汇编程序中每一行的通用格式为:l标号 指令|指示符|伪指令;注解。l在ARM汇编语言源程序中,除了标号和注释外,指令、伪指令和指示符都必须有前导空格,而不能顶格书写。如果每一行的代码太长,可以使用字符“”将其分行书写,并允许有空行。指令助记符、指示符和寄存器名既可以用大写字母,也可以用小写字母,但不能混用。注释从“;”开始,到该行结束为止。l标号代表一个地址,段内标号的地址值在汇编时确定,段外标号的地址值在链接时确定。ARM汇编程序设计 AREA Word,CODE,READONLY ;name this block of codenum EQU 20 ;Set number of words to be copied ENTRY ;mark the first instruction to callstart LDR r0,=src ;r0=pointer to source block LDR r1,=dst ;r1=pointer to destination block MOV r2,#num ;r2=number of words to copywordcopy LDR r3,r0,#4 ;a word from the source STR r3,r1,#4 ;store a word to the destination SUBS r2,r2,#1 ;decrement the counter BNE wordcopy ;.copy morestop MOV r0,#0 x18 ;angel_SWIreason_ReportException LDR r1,=0 x20026 ;ADP_Stopped_ApplicationExit SWI 0 x123456 ;ARM semihosting SWIAREA BlockData,DATA,READWRITEsrc DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ENDARM汇编程序设计符号类型指示符功能符号定义指示符GBLA声明和初始化一个全局算术变量,初始值为0GBLL声明和初始化一个全局逻辑变量,初始值为FALSEGBLS声明和初始化一个全局字符串变量,初始值为空LCLA声明和初始化一个局部算术变量,初始值为0。局部算术变量只能在宏中进行声明。LCLL声明和初始化一个局部逻辑变量,初始值为FALSE。局部逻辑变量只能在宏中进行声明。LCLS声明和初始化一个局部字符串变量,初始值为空。局部字符串变量只能在宏中进行声明。SETA给一个局部或全局算术变量置值SETL给一个局部或全局逻辑变量置值SETS给一个局部或全局字符串变量置值RLIST给寄存器集命名CN给一个协处理器寄存器命名CP给一个特定协处理器命名,协处理器号为015DN给一个双精度VFP寄存器命名SN给一个单精度VFP寄存器命名FN给一个特定的浮点寄存器命名ARM汇编程序设计数据定义指示符LTORG指示汇编器汇编当前文字池 或MAP置存储映射的起点到一个特定的地址#或FIELD描述指示符所定义的存储映射中的空间%或SPACE定义一块值为0的存储器区域=或DBC分配一个或多个字节&或DCD分配一个或多个字,从4字节边界开始DCDU分配一个或多个字,但不一定从4字节边界开始DCDO分配以字边界开始的存储区域,并指定初始值为到静态基址寄存器的偏移DCFD分配给双精度浮点数一段以字边界开始的内存区域DCFDU分配给双精度浮点数一段以任意边界开始的内存区域DCFS分配给单精度浮点数一段以字边界开始的内存区域DCFSU分配给单精度浮点数一段以任意边界开始的内存区域DCI分配以字边界开始的存储区域,并指定初始值。标记此地址存储的是代码而不是数据DCQ分配给双精度浮点数一段以4字节边界开始的内存区域DCQU分配给双精度浮点数一段以任意边界开始的内存区域DCW分配给一个或多个半字以半字边界开始的内存区域DCWU分配给一个或多个半字以任意边界开始的内存区域DATA标识一个标号是代码段中数据的标号,该符号后是DCB或DCDARM汇编程序设计报告指示符ASSERT对于声明错误,在第二次汇编时产生错误信息!或INFO在汇编时显示信息OPT可在源代码中设置列表选项TTL在一个列表文件每页的开始插入一个标题,每一页的标题在下一个TTL之前都有效SUBT在一个列表文件的页中设置一个子标题,每一页的子标题在下一个SUBT之前都有效ARM汇编程序设计汇编控制指示符或IF这三个符号连用,进行条件汇编|或ELSE或ENDIFMACRO这二个符号连用,定义一个宏定义MENDMEXIT用来在结束前退出宏定义WHILE这二个符号连用,进行重复汇编WENDARM汇编程序设计杂项指示符ALIGN从一个字边界开始AREA指示汇编器汇编一段新的代码或数据部分CODE16指示汇编器将随后的指令作为16位Thumb指令CODE32指示汇编器将随后的指令作为32位ARM指令END表示源程序的结束ENTRY指向程序的入口,一个源文件中只能有一个ENTRY*或EQU对一个常量赋予一个符号名EXPORT或GLOBAL说明了由链接器在目标和库文件中使用的符号IMPORT或EXTERN提供汇编器在当前汇编中未曾定义的符号名GET或INCLUDE包含一个文件,在GET处汇编包含的文件INCBIN包含一个未被汇编过的文件KEEP指示汇编器保留符号表中的局部符号NOFP在汇编语言程序中禁止浮点指令REQUIRE指示两段之间的依赖关系REQUIRE8指示当前文件请求堆栈为8字节对准PRESERVE8指示当前文件保持堆栈为8字节对准RN给特定的寄存器命名ROUT标记局部标号使用范围的界限ARM汇编程序设计l预定义变量预定义变量1ARM汇编器对ARM的寄存器进行了预定义,所有的寄存器和协处理器名都是大小写敏感的。预定义的寄存器如下:R0R15和r0r15;a1a4(参数、结果或临时寄存器,与r0r3同义);v1v8(变量寄存器,与r4r11同义);sb和SB(静态基址寄存器,与r9同义);sl和SL(堆栈限制寄存器,与r10同义);fp和FP(帧指针,与r11同义);ARM汇编程序设计l预定义变量预定义变量2ip和IP(过程调用中间临时寄存器,与r12同义);sp和SP(堆栈指针,与r13同义);lr和LR(链接寄存器,与r14同义);pc和PC(程序计数器,与r15同义);cpsr和CPSR(程序状态寄存器);spsr和SPSR(程序状态寄存器);f0f7和F0F7(FPA寄存器);s0s31和S0S31(VFP单精度寄存器);d0d15和D0D15(VFP双精度寄存器);p0p15(协处理器015);c0c15(协处理器寄存器015)。ARM汇编程序设计l内置变量内置变量1ARM汇编器所定义的内置变量如表4-1所示。值得注意的是内置变量的设置不能用SETA、SETL或SETS等指示符来设置,只能用于表达式或条件语句。例如:IF ARCHITECTURE=“4T”ARM汇编程序设计变量含义PC或.当前指令的地址VAR或存储区位置计数器的当前值TRUE逻辑常量真FALSE逻辑常量假OPT当前设置列表选项值,OPT用来保存当前列表选项,改变选项值,恢复它的原始值CONFIG如果汇编器汇编ARM代码,则值为32;如果汇编器汇编Thumb代码,则值为16ENDIAN如果汇编器在大端模式下,则值为big;如果汇编器在小端模式下,则值为littleARM汇编程序设计表表4-1 内置变量内置变量CODESIZE如果汇编器汇编ARM代码,则值为32;如果汇编器汇编Thumb代码,则值为16,与CONFIG同义CPU选定的CPU名,缺省时为ARM7TDMIFPU选定的FPU名,缺省时为SoftVFPARCHITECTURE选定的ARM体系结构的值;3,3M,4,4T和4TxMPCSTOREOFFSETSTR pc,或STM Rb,PC指令的地址和PC存储值之间的偏移量ARMASM_VERSION或|ads$version|ARM汇编器的版本号,为整数ARM汇编程序设计表表4-1 内置变量(续)内置变量(续)l常量十进制,如:123,1,0十六进制,如:0 x123,0 xab,0 x7bn_XXX,n表示n进制,从29:XXX是具体的数字符串:由一对双引号及双引号之间字符串组成,并包含C中的转义字符。逻辑常量为TRUE和FALSE。ARM汇编程序设计l宏定义及使用与C语言中的define相似,仅在源程序中做字符替换以MACRO指示符开始,以MEND结束,例:ARM汇编程序设计Macro$labelTestAndBranch$dest,$reg,$cc$labelCMP$reg,#0B$cc$destMENDTestTestAndBranchNonZero,R0,NENonZeroTestCMPR0,#0BNENonZeroNonZerol内嵌汇编在C和C语言中嵌入汇编语言可以实现一些高级语言中没有的功能。语法_asm _(“instruction .instruction”);/Linux gcc中支持_asminstruction instruction ;/ADS中支持 asm(“instruction;instruction”);/ARM C中使用 ARM汇编程序设计lC语言中内嵌汇编示例 (ADS可编译通过)ARM汇编程序设计#includevoidmy_strcpy(char*src,constchar*dst)intch;_asmloop:LDRBch,src,#1STRBch,dst,#1CMPch,#0BNEloop;intmain(void)constchar*a=HelloWorld!;charb20;_asmMOVR0,aMOVR1,bBLmy_strcpy,R0,R1;printf(OriginalString:%sn,a);printf(“CopiedString:%sn,b);return0;lC语言中调用汇编程序ARM汇编程序设计#includeexternvoidstrcopy(char*d,constchar*s);intmain()constchar*srcstr=Firststring-source;chardststr=Secondstring-destination;/*dststrisanarraysinceweregoingtochangeit*/printf(Beforecopying:n);printf(%sn%sn,srcstr,dststr);strcopy(dststr,srcstr);printf(Aftercopying:n);printf(%sn%sn,srcstr,dststr);return0;AREASCopy,CODE,READONLYEXPORTstrcopystrcopy;r0pointstodestinationstring;r1pointstosourcestringLDRBr2,r1,#1;loadbyteandupdateaddressSTRBr2,r0,#1;storebyteandupdateaddress;CMPr2,#0;checkforzeroterminatorBNEstrcopy;keepgoingifnotMOVpc,lr;ReturnEND根据ATPCS标准,函数前4个参数通过R0R3来传递,其它参数通过堆栈(FD)传递ARM汇编程序设计l在c程序中声明的全局变量可以被汇编程序通过地址间接访问。具体访问方法如下:使用IMPORT伪操作声明该全局变量。使用LDR伪指令读取该全局变量的内存地址,通常该全局变量的内存地址值存放在程序的数据缓冲池中(literal pool)。根据该数据的类型,使用相应的LDR伪指令读取该全局变量的值;使用相应的STR指令;修改该全局变量的值。各数据类型及对应的LDR/STR指令如下:对于无符号的char类型的变量通过指令LDRB/STRB来读/写。对于无符号的short类型的变量通过指令LDRH/STRH来读/写。对于int类型的变量通过指令LDR/STR来读/写ARM汇编程序设计对于有符号的char类型的变量通过指令LDRSB来读取。对于有符号的char类型的变量通过指令STRB来写入。对于有符号的short类型的变量通过指令LDRSH来读取。对于有符号的short类型的变量通过指令STRH来写入。对于小于8个字的结构型变量,可以通过一条LDM/STM指令来读/写整个变量。对于结构型变量的数据成员,可以使用相应的LDR/STR指令来访问,这时必须知道该数据成员相对于结构型变量开始地址的偏移量。ARM汇编程序设计l在汇编程序中访问c程序全局变量的例子。程序中变量globvl是在c程序中声明的全局变量。在汇编程序中首先用IMPORT伪操作声明该变量;再将其内存地址读入到寄存器R1中;再将其值读入到寄存器R0中;修改后再将寄存器R0的值赋于变量globvl。程序如下。lAREA globals,CODE,READONLYEXPORT asmsubIMPORT globvlasmsubLDR r1,=globvlLDR r0,r1ADD r0,r0,#2STR r0,r1MOV pc,lrEND ARM汇编程序设计l汇编语言中调用C语言中定义的函数l汇编程序的设计要遵循ATPCS,保证程序调用时参数的正确传递。在汇编程序中使用IMPORT伪操作声明将要调用c程序。下面是一个汇编程序调用c程序的例子。其中在汇编程序中设置好各参数的值。本例中有5个参数,分别使用寄存器R0存放第一个参数,R1存放第2个参数,R2存放第3个参数,R3存放第4个参数,第5个参数利用数据栈传送。由于利用数据栈传递参数,在程序调用结束后要调用数据栈指针。注:详细内容参考ARM体系结构与编程一书ARM汇编程序设计/c程序g()返回5个整数的和int g(int a,int b,int c,int d,int e)return a+b+c+d+e;汇编程序调用c程序g()计算5个整数i,2*i,3*i,4*i,5*i的和EXPORT fAREA f,CODE,READONLYIMPORT g ;使用伪操作数IMPORT声明c程序g()STR lr,sp,#-4!;保存返回地址ADD r1,r0,r0 ;假设进入程序f时,r0中的值为i,r1值设为2*iADD r2,r1,r0 ;r2的值设为3*iADD r3,r1,r2 ;r3的值设为5*iSTR r3,sp,#-4!;第五个参数5*i通过数据栈传递ADD r3,r1,r1 ;r4值设为4*iBL g ;调用c程序g()ADD sp,sp,#4 ;调整数据栈指针,准备返回LDR pc,sp,#4 ;返回END结束!结束!

    注意事项

    本文(中国矿业大学嵌入式课件5复习过程.ppt)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开