内嵌汇编注意事项 不能直接向PC寄存器赋值,程序跳转只能使用B或BL指令实现 不要使用过于复杂的C表达式,因为将会需要较多的物理寄存器,这将导致与其他指令中用到的物理寄存器产生使用冲突。 编译器可能会使用R12或R13存放编译的中间结果,在计算表达式的值时可能会将寄存器R0~R3,R12和R14用于子程序调用。因此在内嵌的汇编指令中不要将这些寄存器同时指定为指令中的物理寄存器。 通常内嵌的汇编指令中不要指定物理寄存器,因为这可能会影响编译器分配寄存器,进而影响代码的效率。 ATPCS规范要点 寄存器的使用规则 堆栈使用规则 参数传递规则 子程序结果返回规则 从汇编程序中访问C程序变量 在C程序中声明的全局变量可以被汇编程序通过地址间接访问,具体访问方法如下: ① 使用IMPORT伪指令声明该全局变量。 ② 使用LDR指令读取该全局变量的内存地址,通常该全局变量的内存地址值存放在程序的数据缓冲区中。 ③ 根据该数据的类型,使用相应的LDR指令读取该全局变量的值,使用相应的STR指令修改该全局变量的值。 汇编程序中访问C程序变量举例 AREA global_exp, CODE, READONLY EXPORT asmsub IMPORT globv ;声明全局变量 asmsub LDR r1, = globv ;将内存地址读入到R1中 LDR r0, [r1] ;将数据读入到R0中 ADD r0, r0, #2 STR r0, [r1] ;修改 后再将值赋予变量 MOV pc, lr END 从汇编程序中访问C程序变量 各数据类型及其对应的LDR/STR指令如下: ① 对于无符号的char类型的变量通过指令LDRB/STRB来读写。 ② 对于无符号的short类型的变量通过指令LDRH/STRH读写。 ③ 对于int类型的变量通过指令LDR/STR来读写。 ④ 对于有符号的char类型的变量通过指令LDRSB来读取。 ⑤ 对于有符号的char类型的变量通过指令STRB来写入。 ⑥ 对于有符号的short类型的变量通过指令LDRSH来读取。 ⑦ 对于有符号的short类型的变量通过指令STRH来写入。 ⑧ 对于小于8个字的结构型变量,可以通过一条LDM/STM指令来读/写整个变量。 ⑨ 对于结构型变量的数据成员,可以使用相应的LDR/STR指令来访问,这时必须知道该数据成员相对于结构型变量开始地址的偏移量。 * * ARM汇编语言源程序中语句一般由指令、伪操作、宏指令和伪指令组成。 伪操作是ARM汇编语言程序里的一些特殊指令助记符,它的作用主要是为完成汇编程序做各种准备工作,在源程序进行汇编时由汇编程序处理,而不是在计算机运行期间由机器执行。 宏指令是一段独立的程序代码,可以插在源程序中,它通过伪操作来定义。宏在被使用之前必须提前定义好,宏之间可以互相调用,也可以自己递归调用。通过直接书写宏名来使用宏,并根据宏指令的格式设置相应的输入参数。宏定义本身不会产生代码,只是在调用它时把宏体插入到源程序中。 伪指令也是ARM汇编语言程序里的特殊指令助记符,也不在处理器运行期间由机器执行,它们在汇编时将被合适的机器指令代替成ARM或Thumb指令从而实现真正指令操作。 * 伪变量也简成为变量,这是编译器是用的变量。 LCLx定义的局部变量,是在宏中使用的。 * * CODE32 告诉汇编编译器后面的指令序列为32位的ARM指令。 name EQU expr{,type} 为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定义一个字符名称。 AREA sectionname{,attr}{,attr}… 定义一个代码段或者数据段。P228 ENTRY 指定程序的入口点。 END 告诉编译器已经到了源程序结尾。 ALIGN {expr{,offset}} 通过添加补丁字节使当前位置满足一定的对齐方式。 EXPORT symbol {[WEAK]} 声明一个符号可以被其他文件引用,相当于声明了一个全局变量。 IMPORT symbol {[WEAK]} 告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。 GET filename 将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。 name RN expr 为一个特定的寄存器定义名称。 * * * * 这一页的内容比较重要 * * * * * CODE32 告诉汇编编译器后面的指令序列为32位的ARM指令。 name EQU expr{,type} 为数字常量、基于寄
您可能关注的文档
- 5.4__变压器--上课用用概论.ppt
- ACCESS考点8讲述.ppt
- ACM所有算法讲述.ppt
- Adobe_Audition_3.0讲述.ppt
- 5.4-5.7节概论.ppt
- 第二章货币制度课题.ppt
- 5.4声光调制概论.ppt
- 第二章激光器的速率方程理论课题.ppt
- 5.4问题解决的基本步骤概论.ppt
- Agilnet1260液相原理及维护讲述.ppt
- 初中化学溶液配制中溶质溶解度影响因素及误差控制研究课题报告教学研究课题报告.docx
- 冬季太阳能热水器45°倾斜角集热效果与系统控制策略分析报告教学研究课题报告.docx
- AI图像识别技术在初中生物动物解剖实验辅助教学中的应用课题报告教学研究课题报告.docx
- 历史文化遗址教育对初中生文化素养提升的路径探究教学研究课题报告.docx
- 高中历史“世界历史教学策略创新与实践”教学研究课题报告.docx
- 基于国家智慧教育云平台的家校共育信息化教学资源开发与应用教学研究课题报告.docx
- 数字教育资源深度学习驱动的智能学习场景设计与用户体验优化研究教学研究课题报告.docx
- 智慧校园智能学习环境下的个性化学习路径规划与教学资源整合教学研究课题报告.docx
- 高中生通过生物组织培养技术对本地珍稀植物进行遗传转化的方法研究课题报告教学研究课题报告.docx
- 初中化学金属腐蚀防护腐蚀防护激光表面改性实验课题报告教学研究课题报告.docx
原创力文档

文档评论(0)