嵌入式系统arm汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LDR
R1,
[R0] ;将A的内容读到 R1
(2)表达式是一个数值,是一个相对地址的内存表:
MAP 0x04 ,R9 A FIELD 4 ;首地址为R9的值 ;A的长度为4字节,相对位置为0
B
S ….
FIELD 8
FIELD 96 R9, R0, R2, R9, R1, R9,
;B的长度为8字节,相对位置为4
分配一片连续的半字存储单元并初始化。
分配一片连续的字存储单元并初始化。 分配一片连续的存储单元并初始化为0。 定义一个结构化的内存表首地址。 定义一个结构化的内存表的数据域。
• DCB
格式:标号 DCB 表达式
功能:DCB伪操作用于分配一片连续的字节存储单 元,并用伪操作中指定的表达式初始化。其 中,表达式可以为0~255的数值或字符串。 DCB也可以用“=”代替。
(3)表达式是一个标号,基于PC的内存表:
Data SPACE 100 ;分配100字节的内存单元初始化0
MAP Data
A B S …. LDR R5, FIELD 4 FIELD 4 FIELD 4
第四章 ARM汇编语言程序设计
4.1 汇编语言程序格式 4.2 ARM汇编器的伪操作
4.3 汇编语言上机过程 4.4 汇编语言程序设计
4.1 汇编语言程序格式
4.1.1 汇编语言程序的组成
AREA Init, CODE, READONLY ENTRY LDR R0, =0x3FF5000 LDR R1, 0xFF STR R1, [R0] LDR R0, =0x3FF5008 LDR R1, 0x01 STR R1, [R0] …. END
由MAP和FIELD配合定义的内存表有3种:
(1)表达式是一个基于绝对地址的内存表:
MAP 0x100 ;首地址为0x100
A FIELD 4 ;A的长度为4字节,位置为0x100 B FIELD 4 ;B的长度为4字节,位置为0x104 S FIELD 16 ;S的长度为16字节,位置为0x108 …. LDR R0, =A ;读取A的地址0x100
Start
AREA Init, CODE, READONLY ENTRY Start LDR R0, =0x3FF5000 LDR R1, 0xFF BL PRINT_TEXT …. …. PRINT_TEXT …. …. MOV PC, LR END
;FULL SEGMENT DEFINITION-----Intel 8086 ;-----stack segment-------STACK SEGMENT DB 64 DUP(?) STACK ENDS ;-----data segment-------DATA SEGMENT ;data definitions are placed here DATA ENDS ;-----code segment-------CODE SEGMENT MAIN PROC FAR ASSUME CS: CODE, DS: DATA, SS: STACK MOV AX, DATA MOV DS, AX - ----MOV AH, 4CH INT 21H MAIN ENDP CODE ENDS END MAIN
示例:
Str DCB “This is a test!”
• DCW
格式:标号 DCW 表达式
功能:DCW伪操作用于分配一片连续的半字存储单 元,并用伪操作中指定的表达式初始化。其 中,表达式可以为程序标号或数值表达式。用 DCW分配的存储单元是半字对齐的。 示例: DataTest DCW 1, 2, 3
•汇编控制伪操作(Assembly Control)
•框架描述伪操作(Frame Description) •其他伪操作(Miscellaneous)
数据定义伪操作
数据定义伪操作用于为特定的数据分配存储单元,同时可完
成已分配存储单元的初始化。
DCB 分配一片连续的字节存储单元并初始化。
DCW
DCD SPACE MAP FIELD
4.1.2 汇编语言的语句格式
ARM汇编语言程序的每行语句由1~4部分组成。
[LABEL] 标号域 OPERATION 操作助记符域 [OPERAND] 操作数域 [;COMMENT] 注释域
4.2 ARM汇编器的伪操作
•符号定义伪操作(Symbol Definition) •数据定义伪操作(Data Definition )
示例:
DataSpace SPACE 100
• MAP
格式:MAP 表达式 {,基址寄存器}
功能:MAP伪操作用于定义一个结构化的内存表首地
址。表达式可以为程序标号或数值表达式,基
址寄存器为可选项,当基址寄存器选项不存在
时,表达式的值即为内存表的首地址。否则,
内存表的首地址为表达式的值与基址寄存器的 和。也可以用 “^”代替。 示例: MAP 0x100,R0 ;首地址的值为0x100+R0
• DCD
格式:标号 DCD 表达式
功能:DCD伪操作用于分配一片连续的字存储单
元,并用伪操作中指定的表达式初始化。其
中,表达式可以为程序标号或数Hale Waihona Puke Baidu表达式。用
DCD分配的存储单元是字对齐的。DCD也可
以用 “&”代替。
示例:
Test DCD
4, 5, 6
• SPACE
格式:标号 SPACE 表达式 功能:SPACE伪操作用于分配一片连续的存储区 域并初始化为0。其中,表达式为要分配的字 节数。SPACE也可以用 “%”代替。
;S的长度为96字节,相对位置为12 =0x900 A [R0] =0x2000 B [R1] ;表的首地址为0x904 ;读取A的地址0x904 ;将A的内容读到R2 ;同一表的首地址为0x2004 ;读取B的地址0x2008 ;将R9的内容写到B
LDR ADR LDR …. LDR ADR STR
• FIELD
格式:标号 FIELD 表达式
功能: FIELD伪操作用于定义一个结构化的内存表中 的数据域。表达式的值为当前数据域在内存表中 所占的字节数。 FIELD伪操作常与MAP配合使用 来定义结构化的内存表。注意:MAP和FIELD仅 用于定义数据结构,并不实际分配存储单元。
FIELD也可以用 “#”代替。