330 likes | 446 Views
ARM 嵌入式系统结构与编程. 大连理工大学软件学院 邱铁 办公楼 409 Tel : 87571521 E_mail: qiutie@dlut.edu.cn 参考教材: 《ARM 嵌入式系统结构与编程 》 清华大学出版社 2009 年 3 月出版. 本章将详细介绍进行汇编语言程序设计时所用的 ARM/Thumb 汇编语言伪指令、由 ARM 公司推出的开发工具所支持的伪操作以及 GNU ARM 开发工具所支持的伪操作。. 第 6 章 ARM 汇编伪指令与伪操作. 内容提要. 6 . 1 汇编语言伪指令 6 . 2 ARM 汇编语言伪操作
E N D
ARM嵌入式系统结构与编程 • 大连理工大学软件学院 邱铁 办公楼409 Tel:87571521 E_mail: qiutie@dlut.edu.cn 参考教材:《ARM嵌入式系统结构与编程》 清华大学出版社2009年3月出版
本章将详细介绍进行汇编语言程序设计时所用的ARM/Thumb汇编语言伪指令、由ARM公司推出的开发工具所支持的伪操作以及GNU ARM开发工具所支持的伪操作。 第6章 ARM汇编伪指令与伪操作
内容提要 6.1 汇编语言伪指令 6.2 ARM汇编语言伪操作 6.3 ARM汇编伪操作 6.4 GNU ARM汇编伪操作
6.4 GNU ARM汇编伪操作 • 在嵌入式系统开发中,不可避免的要使用GNU工具,要进行嵌入式LINUX的移植与开发,其中与硬件直接相关的部分要用汇编语言来编程。
6.4.1 符号定义伪操作 • 1.常量定义伪操作.equ或.set • 语法格式: • .equ symbol, expr • .set symbol, expr • 其中: • symbol 为要指定的名称,它可以是以前定义过的符号; • expr 表示数字常量或程序中的标号。
2.常量定义伪操作.equiv • 语法格式: • .equiv symbol, expr • 其中: • symbol 为要指定的名称,它不可以是以前定义过的符号; • expr 表示数字常量或程序中的标号。
3.声明全局常量伪操作.global或.globl • 语法格式: • .global symbol • .globl symbol • 其中: • symbol 为要声明的全局变量名称
4.声明外部常量伪操作.extern • 语法格式: • .extern symbol • 其中: • symbol 为要声明的外部变量名称
6.4.2 数据定义伪操作 • 1.字节定义.byte • 语法格式: • .byte expr {, expr }… • 其中: • expr 数字表达式或程序中的标号。
2.半字定义.hword或.short • 语法格式: • .hword expr {, expr }…. • .short expr {, expr }… • 其中: • expr 数字表达式或程序中的标号。
3.字定义.word或.int或.long • 语法格式: • .word expr {, expr }…. • .int expr {, expr }… • .long expr {, expr }… • 其中: • expr 数字表达式或程序中的标号。
4.字符串定义.ascii和.asciz或.string • 语法格式: • .ascii expr {, expr }… • .asciz expr {, expr }… • .string expr {, expr }… • 其中: • expr 表示字符串。
5.双字定义.quad • 语法格式: • .quad expr {, expr }… • 其中: • expr 数字表达式。
6.四字定义.octa • 语法格式: • .octa expr {, expr }… • 其中: • expr 数字表达式。
7.单精度浮点数定义.float或.single • 语法格式: • .float expr {, expr }…. • .single expr {, expr }…. • 其中: • expr 为32位的 IEEE 单精度浮点数。
8.双精度浮点数定义.double • 语法格式: • .double expr {, expr }… • 其中: • expr 为32位的 IEEE 单精度浮点数。
9.重复内存单元定义.fill • 语法格式: • .fill repeat {, size}{, value} • 其中: • repeat 重复填充的次数; • size 每次所填充的字节数; • value 所填充的数据。
9.零填充字节内存单元定义.zero • 语法格式: • .zero size • 其中: • size 所分配的0填充字节数
10.固定填充字节内存单元定义.space或.skip • 语法格式: • .space size {, value} • .skip size {, value} • 其中: • size 所分配的字节数
11.声明数据缓冲池.ltorg • 语法格式 • .ltorg
6.4.3汇编与反汇编代码控制伪操作 • 指令集类型标识伪操作 • .arm • .code 32 • .thumb • .code 16
段属性定义伪操作 • 语法格式如下: • .section expr • 其中: • expr 为段属性,可以是.text、.data、.bss中的一个。
段起始声明伪操作 • 具体的语法格式如下: • .text • .data • .bss
对齐方式设置伪操作.align或.balign • 语法格式: • .align {alignment} {, fill} • .balign {alignment} {, fill} • 其中: • alignment 是一个数值表达式,用于指定对齐方式,其取值在0~15范围内; • fill 用来指定进行填充的数据。
代码位置设置伪操作.org • 语法格式: • .org offset {, expr} • 其中: • offset 是一个数值表达式,表示地址偏移量; • expr 用来指定进行填充的数据。
6.4.4预定义控制伪操作 • 汇编器在对程序代码进行编译时,会根据汇编控制伪操作的定义情况对程序进行编译,常用的有条件编译、宏定义和文件包含
1.条件编译伪操作.if • 语法格式: • .if logical_expression • 程序代码段A • {.else • 程序代码段B • } . • .endif
2. 宏定义伪操作.macro • 语法格式: • .macro • { macroname {parameter{,parameter}…} • 程序代码段 • .endm其中:
3.文件包含伪操作.include • .include伪操作用于将一个源文件包含到当前的源文件中,所包含的文件在.include指令的位置处进行汇编处理。 • 语法格式: • .include "file_name"
伪操作在汇编编程时应用较多,具本应用请参考教材《ARM嵌入式系统结构与编程》第6章6.4节实例分析伪操作在汇编编程时应用较多,具本应用请参考教材《ARM嵌入式系统结构与编程》第6章6.4节实例分析
思考与练习题 • 定义一个结构化的内存表,其首地址固定为0x900,该结构化内存表包含2个域,Fdata1长度为8个字节,Fdata2长度为160个字节。 • 有ARM ADS伪操作将寄存器列表R0-R5、R7、R8的名称定义为Reglist。
第6章 ARM汇编伪指令与伪操作 The End