第4章 ARM程序设计(2013年3月15日)
共96页 如果函数的参数多于 4 个,那么 多余 的参数则按 自右向左的顺序压入数据堆栈,即参数入栈顺序与参数顺序相反。 2、ATPCS关于堆栈和寄存器的使用规则(续) 函数参数使用寄存器和数据栈的示意图如下: 下表列举了ARM-Thumb过程调用标准规定的寄存器的名称和使用方法。 程序计数器 PC R15 连接寄存器 LR R14 堆栈指针 Sp R13 过度寄存器 Ip R12 保存结构指针 fp V8 R11 用来保存堆栈边界地址 Sl V7 R10 在RWPI情况下保存静态基地址 Sb V6 R9 函数局部变量寄存器 V1~V5 R4~R8 参数寄存器,其中R0又被用作函数返回值寄存器 A1~A4 R0~R3 用法 别名2 别名1 寄存器 RWPI读写位置无关(编译器选项)。 寄存器的别名和特殊名称都是 ARM编译器和汇编器预定义的,用户可以直接使用。 4.4.2 C程序可调用汇编函数实例 下面是一个用汇编语言编写的函数,该函数把 R1 指向的数据块复制到 R0 指向的存储块。 2、ATPCS关于堆栈和寄存器的使用规则(续) AREA tt, CODE, READONLY EXPORT strcopy strcopy LDRB R2,[R1],#1 STRB R2,[R0],#1 CMP R2,#0 BNE strcopy MOV PC,LR END 4.4.2 C程序可调用汇编函数实例(续) DO-WHILE结构 DO-UNTIL结构 4.2.3 循环程序设计(续) 在汇编语言程序设计中,常用的是DO-UNTIL 结构循环程序。 MOV R1,#10 LOOP ……. SUBS R1,R1,#1 BNE LOOP 例4:编写一个程序,把首地址为DATA_SRC 的 80 个字的数据复制到首地址为 DATA_DST 的目标数据块中。 4.2.3 循环程序设计(续) LDR R1,=DATA_SRC LDR R0,=DATA_DST MOV R10,#10 LOOP LDMIA R1!,{R2-R9} STMIA R0!,{R2-R9} SUBS R10,R10,#1 BNE LOOP 4.2.3 循环程序设计(续) 1、子程序的调用与返回 人们把可以多次反复调用的、能完成指定功能的程序段称为“子程序”。把调用子程序的程序称为“主程序”。 为进行识别,子程序的第1条指令之前必须赋予一个标号,以便其他程序可以用这个标号调用子程序。 4.2.4 子程序及其调用 在 ARM 汇编语言程序中,主程序一般通过 BL 指令来调用子程序。该指令在执行时完成如下操作:将子程序的返回地址存放在连接寄存器LR中,同时将程序计数器PC指向子程序的入口点。 为使子程序执行完毕能返回主程序的调用处,子程序末尾处应有 MOV、B、BX、LDMFD 等指令,并在指令中将返回地址重新复制到 PC 中。 1、子程序的调用与返回(续) 在调用子程序的同时,也可以使用 R0~R3 来进行 参数的传递 和从子程序返回 运算结果。 例5:一个使用 MOV 指令实现返回的子程序。 relay ….. MOV PC, LR 1、子程序的调用与返回(续) 使用 B 指令实现返回的子程序。 relay ….. B LR 1、子程序的调用与返回(续) 例6:一个使用 BL 指令调用子程序的汇编语言源程序的基本结构。 AERA Init, CODE, READONLY ENTRY start LDR R0,=0X3FF5000 LDR R1,=0XFF STR R1,[R0] LDR R0,=0X3FF5008 LDR R1,=0X01 STR R1,[R0] BL PR ……. 1、子程序的调用与返回(续) 注:教材上的程序有问题 PR …… MOV
您可能关注的文档
最近下载
- 2025年一级建造师风险登记册在项目全生命周期中的应用专题试卷及解析.pdf VIP
- 《美学原理概要》课件.ppt VIP
- 2025年演出经纪人演出项目融资退出机制设计与法律安排专题试卷及解析.pdf VIP
- 2025年互联网营销师文案的“网感”与“社交货币”打造专题试卷及解析.pdf VIP
- 2025年演出经纪人演出经纪法律责任与权利义务边界专题试卷及解析.pdf VIP
- 基于联邦学习的跨机构医疗数据协作研究框架.pdf VIP
- 股份公司境外公司管理办法.doc VIP
- 2026苏教版高考化学一轮复习第30讲 有机物推断与合成(学用).doc
- 职业道德考试及答案.doc VIP
- 工勤职业道德考试及答案.doc VIP
原创力文档

文档评论(0)