四、ARM汇编语言伪指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

它的目标是创建一套完全自由的操作系统。

GNU格式ARM汇编语言程序主要是面对在ARM平
台上移植嵌入式Linux操作系统,GNU组织开发的
基于ARM平台的编译工具有主要由GNU的汇编器 as,交叉汇编器gcc和连接器ld组成。
TM
5
TM
6
GNU
示例解析
示例解析


.global
.text .equ
TM
35
输出报告型伪指令
(2)INFO或! INFO 0, “Version 1.0” ; 第二遍扫描报告版本 IF endofdata <= label1 INFO 4, "Data overrun at label1" ENDIF
TM
32

栈八字节对齐REQUIRE8 和 PRESERVE8


语法格式:
REQUIRE8 {bool}


PRESERVE8 {bool}
bool 是一个可选布尔常数,取值为 {TRUE} 或 {FALSE}。

REQUIRE8 指令指定当前文件要求堆栈八字节对齐 PRESERVE8 指令指定当前文件保持堆栈八字节对齐

结构化内存表的首地址为expr与 base_register之和。
TM
31

定义结构化内存表数据域FIELD


语法格式
{label} 其中: label 可选的程序标号,当指定这一选项时, FIELD expr
label的值为当前内存表的位置计数器的值;

expr
FIELD指定的域所占内存单元字节数。


汇编语言控制伪指令
与ARM汇编语言组合的伪指令
TM
9
与ARM汇编语言组合的伪指令

该类伪指令是ARM处理器支持的汇编语言程 序里的特殊助记符,它不在处理器运行期间 由机器执行,只是在汇编时将被合适的机器指 令代替成ARM或Thumb指令,从而实现真正 的指令操作。 (与编译器无关)
TM
10
指导性伪指令 (1)AREA 功能:指示汇编器 汇编一段新的代码或数据区。 在汇编时,必须至少有一个ARME指示符。
(1)AREA
• DATA 包含数据,但不包含指令,缺省READWRIT。 • INTERWORK 表明代码段可以适用ARM/Thumb
interworking功能。
• NOINIT 表明数据段初始化为零,只为指示符保留空间 • READONLY 表明该段只读。 • READWRITE 表明该段可读可写。
TM
15
指导性伪指令
(3)CODE32 功能:指示汇编器将随后的指令作为32位 ARM 指令解释执行 格式:CODE32 例: CODE16 ;Thumb指令的开始 AREA ThumbEx, CODE,READONLY MOV R1,#10 ;Thumb指令 ADR R0, Guarm BX R0 ;设置转移/交换指令 CODE32 ;以下为ARM指令 Guarm MOV R4, #15 ;ARM指令
ARM汇编语言伪指令

ARM汇编语言程序里,除了指令集,还有一些 特殊的指令助记符,称作伪指令;伪指令所完 成的操作称作伪操作;其作用主要是为完成汇 编程序做各种准备工作(定义数据、分配存储 区,中断向量表,程序初始化等),对源程序运 行汇编程序处理,而不是在计算机运行期间由处 理器执行。(区别) 伪操作只是汇编过程中起作用,一旦汇编结束, 伪操作也就随之消失。
TM
16
数据定义伪指令
(1)DATA 定义此标号是程序内的数据区
例: Thumb-fn AREA example ,CODE ; ; MOV pc ,lr
Thumb-Data
DATA
DCB 1,3,4
TM源自文库
17
数据定义伪指令
(2)DCB或“=”
功能:分配一个或多个字节.
(3)DCD或“&” 功能:分配一个或多个字,从4个字节边界开始. (4)DCW 功能:分配一个或多个半字以半字边界开始的内存 区域.
可选的程序标号;
分配的字节数。
TM
24
数据定义伪指令
(6)ALIGN
功能:通过添加填充字节的方式,使当前位置满足 一定的对齐方式. ALIGN=4 与 ALIGN 16 等价 16B边界对齐
P76
TM
25
数据定义伪指令 AREA offsetExample,CODE DCB 1 ;第一个字节 ALIGN 4 ,3 ;字对齐 DCB 1 ;第四个字节
TM
33
输出报告型伪指令
(1)ASSERT 功能:可在编译的第二遍扫描输出一条错误信息 ASSERT logical-expression
ASSERT label1 <= label2
; 不满足条件,报告错误类型,并终止汇编
信息报告伪操作用于程序汇编指示,主要是在程序调试阶段使用。
TM
34
输出报告型伪指令
Start
0xAABBCCDD;将0xAABBCCDD定义成符号aa ;将程序标号_start定义成符号bb
bb EQU Start Start MOV
R0,
#0x0F


ADD R0,
… …
R0,
#1
TM
8
ARM汇编语言伪指令

指导性伪指令(指示符)


数据定义伪指令
输出报告型伪指令 符号定义伪指令
_start
aa,
0xAABBCCDD ;将0xAABBCCDD定义成符号aa


.equ
_start:
bb,
_start
;将程序标号_start定义成符号bb
MOV
R0,
#0x0F


ADD R0,
… …
R0,
#1
TM
7
ARM标准汇编

示例解析
GLOBL CODE32 aa EQU
TM
18

分配字节存储单元DCB
语法格式 {label} 其中: DCB expr{, expr }…


label
expr
可选的程序标号;
是-128~255之间的数字或字符串。
TM
19

分配半字存储单元DCW及DCWU


语法格式
{label} DCW expr{, expr }…
TM

1

目前常用的编译环境有2种: 1. ADS/SDT、RealView MDK等ARM公 司推出的开发工具

2. GNU ARM开发工具
TM
2

1.
ADS/SDT、RealView MDK等ARM公司推出
的开发工具

ADS由ARM公司推出,使用了CodeWarrior公司的
编译器。针对ARM资源配置为用户提供了在
(2)INFO或! 功能:在汇编处理过程中第一遍扫描或第二遍扫描 时报告诊断信息 INFO numeric-expression, stringexpression{, severity}
如果numeric-expression为0,则在汇编处理中 ,第二遍扫描时,伪操作打印stringexpression;如果numeric-expression不为0 ,则在汇编处理中,第一遍扫描时,伪操作打 印string-expression,并终止汇编
CodeWarrior IDE 集成环境下配置各种ARM 开发 工具的能力。

以ARM为目标平台的工程创建向导,可以使用户 以此为基础,快速创建ARM和Thumb工程。
TM
3

ARM 将Keil 公司收购之后,正式推出了针对ARM 微控制器的开发工具RealView Microcont roller Development Kit ( 简称Real View MDK 或者 MDK) ,它将ARM 开发工具RealView
TM
指导性伪指令
(2)CODE16 功能:指示汇编器将随后的指令作为16位的 Thumb指令解释执行。 格式:CODE16 例: AREA Thumb EX, CODE,READONLY
; ARM代码的开始
ADR R0,Start+1 BX R0 ;设置转移/交换指令 CODE16 ;以下指令为Thumb指令 Start MOV R1,#10 ;Thumb指令
TM
27

分配单精度浮点数存储单元DCFS及DCFSU


语法格式
{label} DCFS fpliteral{, fpliteral }…


{label} DCFSU
其中:
fpliteral{, fpliteral }…


label
可选的程序标号;
fpliteral 单精度浮点表达式,取值范围: 1.17549435e-38~3.4028234e+38。
字节对准。例如,expression等于10,该段将按1KB对
准。 • CODE 代码段,缺省为READONLY • COMDEF 通用段定义。该段可包括代码和数据,在多 个源文件中同名的COMDEF段必须相同 • COMMON 通用数据段,不能定义任何代码和数据, 通常由链接器初始化为零
TM
12
指导性伪指令
(5)SPACE或“%”
功能:分配一片连续的存储区域并初始化为0.
DataSpace SPACE 100
AREA Mydata,DATA,READWRITE data1 SPACE 255
TM
23

分配存储空间SPACE


语法格式
{label} 其中: SPACE expr


label
expr
TM
29
数据定义伪指令
(9)MAP 或 ^ 功能:定义一个结构化的内存表首地址 (10)FIELD 或 # 功能:定义一个结构化的内存表的数据域 MAP 0,r9 FIELD 4 Lab FIELD 4 LDR r0,Lab LDR r0,[r9,#4]
TM
30

定义结构化内存表首地址MAP 语法格式 MAPexpr{,base_register} 其中:


{label} DCWU
其中:
expr{, expr }…


label
expr 。
可选的程序标号;
是-32768~65535之间的数字表达式
TM
20

分配字存储单元DCD及DCDU


语法格式
{label} DCD expr{, expr }…


{label} DCDU
其中: label expr
格式:AREA name{,attr,}…
其中:
name 给出的特定段名。以数字打头,必须加竖线
否则,将报错。
例如:|1-Data-Area |
TM
11
指导性伪指令 (1)AREA
attr 段名属性 下列属性是有效的: •ALIGN=expression缺省状态下,段将按4个字节对 准,expression可以是2-31之间的整数,该段2expression
将两个字节数据放在同一个字的第一个字节和第四个 字节,带offset的ALIGN对齐
ALIGN { expr,{,offset}} :offset+n*expr
TM
26
数据定义伪指令
(7)DCFD 功能:用于为双精度的浮点数分配字对齐的内存单 元。每个双精度浮点数占两个字单元 DCFD 1E308,-4E-100 (8)DCFS 功能:用于为单精度的浮点数分配字对齐的内存单 元。每个单精度浮点数占1个字单元 DCFS 1E3,-4E-9
Development Suite (简称RVDS) 的编译器RVCT
与Keil的工程管理、调试仿真工具集成在一起,是 一款非常强大的ARM 微控制器开发工具。
TM
4

2. GNU ARM开发工具

GNU是“GNU„s Not Unix”的递归缩写。在1983年
9月27日由Richard Stallman公开发起GNU计划,
TM
28

分配双精度浮点数存储单元DCFD及DCFDU


{label} DCFD
{label} DCFDU
fpliteral{, fpliteral }…
fpliteral{, fpliteral }…


其中:
label 可选的程序标号;

fpliteral 双精度浮点表达式,取值范围: 2.22507385850720138e308~1.7976931348623157e+308。
例:AREA Example, CODE, READONLY
TM
13
指导性伪指令 (2)END 功能:表示源程序的结束。所有汇编语言源文 件必须以END结束。 格式:END (3)ENTRY 功能:指向汇编程序的入口点,至少一个 一个源文件中只能有一个ENTRY 格式:ENTRY 例:AREA ARMex,CODE,RAEDONLY ENTRY 14
expr{, expr }…
可选的程序标号; 表达式。
TM
21
Str DCB “This is a test!” C_string DCB “C_string”,0
DataTest DCW 1,2,3 DataTEST DCD 4,5,6 Data DCW 2*number
TM
22
数据定义伪指令
相关文档
最新文档