嵌入式系统基础及应用 第三章3
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM汇编编程例子
AREA Add, CODE, READONLY ;程序起始定义
ENTRY
Start MOV r0, #1 MOV r1, #2 BL doadd doadd ADD r0,r0,r1 MOV pc, lr END
;第一条指令的标示符,只能有一个 ;下面wenku.baidu.com程序主体
;调用子程序 ;r0=r0+r1 ;END伪指令必须和ENTRY配对使用
ARM汇编编程例子
C语言与汇编语言
在应用系统的程序设计中,若所有的编程 任务均用汇编语言来完成,其工作量是可 想而知的,同时不利于系统升级或应用软 件移植 ARM体系结构支持C/C++以及与汇编语 言的混合编程,在一个完整的程序设计中 ,除了初始部分用汇编语言完成以外,其 主要的编程任务一般都用C/C++完成
ADD r0, r0, r1
常用的伪操作
CODE16及CODE32
若在汇编源程序中同时包含 ARM 指令和 Thumb 指 令时,可用 CODE16 伪指令通知编译器其后的指令序 列为 16 位的 Thumb 指令, CODE32 伪指令通知编 译器其后的指令序列为 32 位的 ARM 指令。因此, 在使用 ARM 指令和 Thumb 指令混合编程的代码里 ,可用这两条伪指令进行切换,但注意他们只通知编 译器其后指令的类型,并不能对处理器进行状态的切 换。 AREA Example, CODE, READONLY CODE32 ;通知编译器后面的指令为32位的 ARM指令 LDR R0, =start+1 BX R0 CODE16 Start MOV R1, #10
试分析下面几段ARM汇编程序的执行结果: (1) AREA Example, CODE, READONLY EXPORT test IMPORT test1 ENTRY test LDR R1, =test LDR R0, [R1] ADD R0, R0, #1 STR R0, [R1] MOV PC, LR END
常用的伪操作
EQU伪操作用于为程序中的常量、标号等 定义一个等效的字符名称
名称 EQU 表达式{,类型} abcd EQU 50;定义标号abcd的值为50 名称为EQU伪操作定义的字符名称,当表达 式为32位的常量时,可以指定表达式的数据类 型,可以有以下三种类型: CODE16 CODE32 DATA Addr EQU 0x54, CODE32; 定义Addr的值 为0x54,且该处为32位的ARM指令。
常用的伪操作
ENTRY和END
ENTRY用于指定汇编程序的入口 每一个汇编源程序都包含END为操作,以告 诉本源程序的结束 AREA Example1,CODE, READONLY ENTRY END
常用的伪操作
EXPORT或GLOBAL
EXPORT用于在程序中声明一个全局的标号, 该标号可在其他的文件中引用,可用GLOBAL 代替。 AREA Example, CODE, READONLY EXPORT DoAdd ;下面的函 数名称DoAdd可以被其他源文件引用 DoAdd
AREA CDO, CODE, READONLY CODE32 ADD_SIX GLOBAL ADD_SIX STMFD R13, {R4, R5} LDR R4, [R13] LDR R5, [R13, #4]! ADD R0, R0, R1 ADD R0, R0, R2 ADD R0, R0, R3 ADD R0, R0, R4 ADD R0, R0, R5 SUB R13, R13, #8 LDMFD R13, {R4, R5} MOV R15, R14 END
常用的伪操作
AREA伪操作用于定义一个代码段或数据段
AREA 段名 {,属性1} {,属性2}… 一个大的程序可以包括多个代码段和数据段。 一个汇编程序至少包含一个段 AREA Example1,CODE, READONLY AREA Example2,DATA, READWRITE
ARM汇编编程
ARM汇编程序组成
ARM汇编语言源程序中语句由指令、伪操 作和宏指令组成 在ARM汇编语言程序中,有一些特殊指 令助记符,这些助记符没有相应的操作 码,他们所完成的操作称为伪操作。在 源程序中的作用是为完成汇编程序作各 种准备工作的。 宏是一段独立的程序代码,在程序中通 过宏指令调用该宏
从汇编程序中访问C变量
从C程序中调用汇编程序
Any Question?
习题与思考
ARM处理器有几种工作状态?各个状态 之间如何切换? ARM处理器的工作模式有哪几种?什么 情况下会发生工作模式的改变? 简述ARM处理器处理异常的过程。 ARM处理器有几种存储格式?有什么不 同? 简述ARM处理器的寻址方式,并举例。
常用的伪操作
IMPORT 伪操作告诉编译器当前的符号不 是在本源文件中定义的,而是在其他源文 件中定义的,在本源文件中可能引用该符 号 IMPORT Main ;通知编译器当前文件要 引用标号Main,但Main在其他文件中定 义
宏定义
使用宏定义可以提高程序的可读性,简化程序代码和同 步修改。ARM宏定义与标准C的#define相似。 宏定义从MACRO伪指令开始,到MEND结束,并可以使 用参数。 宏要先定义,然后再使用,使用时直接书写宏名,并根 据对应的宏定义格式设置输入参数或书写标号等,当源 程序被汇编时,汇编编译器将展开每一个宏调用,用宏 定义体代替程序中的宏调用,并使用实际的参数值代替 宏定义时的形式参数。 MACRO {$label} macroname {$parameter{,$parameter}……} MEND