ch4_ARM7TDMI汇编语言程序设计

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

;前面必须有空格
GBLA DATA
;前面必须有空格
DATA SETA 0x20
;DATA变量名前面不能留空格
ADD R0,R1,R2 ;全部大写,正确
ADD R0,R1,r2 ;寄存器小写,正确
add R0,R1,r2 ;指令助记符小写,寄存器大写或小写,正确
Add R0,R1,r2 ;指令助记符大小写混合,不正确
➢ SPACE:分配一片连续的存储单元
➢ FIELD :定义一个结构化的内存表的数据区
➢ MAP:定义一个结构化的内存表首地址
➢ LTORG:定义一个数据缓冲区池(literally pool)的开始
2020/10/17
计算机学院
page 26
使用示例:
Str DCB “This is a test!” ;分配一片连续的字节存储单元并初始化。
2020/10/17
计算机学院
page 16
汇编语言的语句格式:
[Label]
Operation
标号域 操作助记符域
[Operand] 操作数域
[;Comment] 注释域
例: start MOV R0,#0x3F ; 将立即数传送到寄存器R0
2020/10/17
计算机学院
page 17
标号域(Label):
2020/10/17
计算机学院
page 3
2 汇编语言
从机汇器编角语度言看(:Assembly Language)是一种面向物理 层操作汇的编计语算言机是语一言种,面是向一物种理采层用操助作记的符计表算示机的语程言序。设 计不语同言的,处使理用器助类记型符,来具表有示不指同令的的汇操编作语码言和。操使作用数汇,编用 标语号言或编符写号程代序表能地够址直、接常利量用或硬变件量系。统的特性(如寄存
LCLA T4 ;声明一个局部的数值变量,变量名为T4 T4 SETA 0xaa ;将该变量赋值为0xaa
2020/10/17
计算机学院
page 25
数据定义伪操作
➢ DCB
:分配一片连续的字节存储单元并初始化
➢ DCW(DCWU):分配一片连续的半字存储单元并初始化
➢ DCD(DCDU):分配一片连续的字存储单元并初始化
2020/10/17
计算机学院
page 18
操作助记符域(Operation): 操作助记符域可以为指令、伪操作、宏指令或伪指令的助记符。 大小写要求:ARM汇编器对大小写敏感,在汇编语言程序设计
中,每一条指令的助记符可以全部用大写、或全部用小写,但 不允许在一条指令中大、小写混用。 位置:所有的指令都不能在行的开头书写,必须在指令的前面 有空格,然后再书写指令。 格式:指令助记符和后面的操作数或操作寄存器之间必须有空 格,不可以在这之间使用逗号。
; 程序运行结束返回编译器调试环境
R1, =0x20026
0x123456
AREA BlockData, DATA, READWRITE ; 数据段的名字BlockData
Src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
Dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0x001C,或使用前缀&,如&10F、&134。这两种方法都 是等效的。 n进制数:形如n_XXX,其中n的范围是2到9,XXX是具体 数值。如:8_247表示一个八进制数。 ASCII的表示:有些值可以使用ASCII表达,
例如:‘A’表达A的ASCII码。 指令: MOV R1,#’B’ 等同于 MOV R1,#0x42。
2020/10/17
计算机学院
page 19
操作数域(Operand): 操作数域表示操作的对象,操作数可以是常量、变量、标
号、寄存器名或表达式,不同对象之间必须用逗号“,” 分开。
2020/10/17
计算机学院
page 20
课堂练习:判断指令格式正误 AREA EX3, CODE, READONLY
ENTRY
;标识程序入口
START
CODE32 LDR R0, =src LDR R1, =dst
MOV标号顶R2格, 写#num
;声明32位ARM指令 ; R0指向源数据块 ; R1指向目的数据块 ; R2需要拷贝的数据个数
wordcopy LDR
STR
SUBS BNE
R3, [R0], #程4 序;代从码源段数据块中取一个字,放入R3中,
➢ DCDO
:分配一片按字对齐的字内存单元并初始化
➢ DCI
:分配一片字或半字对齐内存单元并初始化
➢ DCQ(DCQU):分配一片以8字节为单位的连续存储单元并初始化
➢ DCFS(DCFSU):为单精度浮点数分配一片连续字存储单元并初始化
➢ DCFD(DCFDU):为双精度浮点数分配一片连续字存储单元并初始化
其取值范围为0~232-1; 当作为有符号数时,其取值范围为-231~231-1。 在ARM汇编语言中,使用EQU来定义数值常量。数值
常量一经定义,其数值就不能再修改。
2020/10/17
计算机学院
page 13
数值常量有下列表示方式: 十进制数:可以直接表达如:1、2、345。 十六进制数:有两种表达方法,使用前缀0x,如0x003、
2020/10/17
计算机学院
page 6
4.2 ARM汇编程序的组成与结构
;文件名:TEST1.S
;功能使:用实“现字;符”串进拷行贝注功释能
;说明:使用ARMulate软件仿真调试
AREA Example1,CODE,READONLY ;声明代码段Example1
num EQU 20
;设置拷贝字的个数
2020/10/17
计算机学院
page 15
汇编语言程序中的表达式和运算符
➢ 数值表达式 ➢ 逻辑表达式 ➢ 字符串表达式
表达式中各元素运算次序的优先级如下: ➢ 括号运算符的优先级最高。 ➢ 相邻的单目运算符的运算顺序为从右到左,单目运算
符的优先级高于其它运算符。 ➢ 优先级相同的双目运算符的运算顺序为从左到右。
2020/10/17
计算机学院
page 23
各符号定义伪操作功能说明:
GBLA: 定义一个全局的数值变量,并初始化为0 GBLL: 定义一个全局的逻辑变量,并初始化为F GBLS: 定义一个全局字符串变量,并初始化为空 LCLA: 定义一个局部的数值变量,并初始化为0 LCLL: 定义一个局部的逻辑变量,并初始化为F LCLS: 定义一个局部字符串变量,并初始化为空 SETA: 给一个数值变量赋值; SETL: 给一个逻辑变量赋值; SETS: 给一个字符串变量赋值;
2020/10/17
计算机学院
page 14
➢ 逻辑常量只有两种取值情况:{TRUE}和{FALSE},注意 带大括号。
➢ 字符串常量为一个固定的字符串,一般用于程序运行时 的信息提示。
➢ 字符常量由单引号表示,包括C语言中的转义字符, 如’\n’。
➢ 字符串常量用双引号表示,也包括C语言中的转义字符 如“abcd\0xc\r” 。
程序设计语言是专门为计算机编程所配置的语言。 它们按照形式与功能的不同可分为三种,即机器语言、 汇编语言和高级语言。 1 机器语言
机器语言(Machine Language)是由0和1二进制代 码书写和存储的指令与数据。它的特点是能被机器直接 识别与执行;程序所占内存空间较少。其缺点是难认、 难记、难编、易错。
作用:标号域用来表示指令的地址、变量、过程名、数据 的地址和常量。
开头:标号是一个自行设计的标识符或名称,语句标号可 以是大小写字母混合,通常以字母开头,由字母、数字、 下划线等组成。
要求:语句标号不能与寄存器名、指令助记符、伪指令 (操作)助记符、变量名同名。
位置:语句标号必须在一行的开头书写,不能留空格。
器、标志、中断系统等),可直接对位、字节、字寄 存器或存储汇源单编程语元序言、I/O端口进汇编行程处序 理,同时目也标能程序直接使 用CPU指令系统提供的各种寻址方式,编制出高质量的
程序,这样的程序不但占用内存空间少,而且执行速
度快。
2020/10/17
计算机学院
page 4
3 高级语言 高级语言(High Level Language)是脱离具体机器
(即独立于机器)的通用语言,不依赖于特定计算机的结 构与指令系统。
用高级语言 编写的源程序
编译或解释程序
目标程序
2020/10/17
计算机学院
page 5
第4章 汇编语言程序设计
1. 汇编语言的基本概念 2. ARM汇编程序的组成与结构 3. 汇编语言程序设计的基本方法 4. 汇编语言和C语言交叉编程
; R0=R0+4
R3, [R1], #4 ; 将R3中的数据存入R1指向的存储
; 单元中,R1=R1+4
R2, R2, #1 ; R2计数器减1
wordcopy
; 如果R2不为0,则转向wordcopy处
2020/10/17
计算机学院
page 7
stop MOV LDR SWI
R0, #0x18
2020/10/17
计算机学院
page 21
4.2.2 ARM汇编器的伪操作
在汇编语言程序里,有一些特殊指令助记符,这些助 记符与指令系统的助记符不同,其没有相对应的操作码, 通常称这些特助指令助记符为伪操作。伪操作仅在汇编过 程中起各种准备工作的作用。ARM汇编中伪操作有:
•符号定义伪操作 •数据定义伪操作 •汇编控制伪操作 •信息报告伪操作 •其它常用的伪操作
data
AREA |.extra|, NOINIT, READWRITE ; 未初始数据段的名字.extra
SPACE 1024
END 声明文件结束 ; 文件结束
2020/10/17
计算机学院
page 8
4.2.1 汇编语言程序格式
汇编语言形式 汇编语言源程序的组成 汇编语言程序中常用的符号 汇编语言程序中的表达式和运算符
第4章 ARM7TDMI汇编语言
程序设计
2020/10/17
计算机学院
page 1
第4章 汇编语言程序设计
1. 汇编语言的基本概念 2. ARM汇编程序的组成与结构 3. 汇编语言程序设计的基本方法 4. 汇编语言和C语言交叉编程
2020/10/17
计算机学院
page 2
4.1 汇编语言的基本概念
2020/10/17
计算机学院
page 24
使用示例:
GBLA A1 A1 SETA 0x0F
;定义一个全局的数值变量,变量名为A1 ;将该变量赋值为0x0F
GBLL A2 ;定义一个全局的逻辑变量,变量名为A2 A2 SETL {TRUE} ;将该变量赋值为真
GBLS A3 ;定义一个全局字符串变量,变量名为A3 A3 SETS “Testing” ;将该变量赋值为“Testing”
DataTest DCW 1,2,3 ;分配一片连续的半字存储单元并初始化。
DataTest DCD 4,5,6 ;分配一片连续的字存储单元并初始化。
2020/10/17
计算机学院
page 27
课堂练习:
假设Str的地址为:8008,有如下伪操作,试画出内存 中数据的分布示意图。
2020/10/17
计算机学院
page 9
汇编语言形式
2020/10/17
计算机学院
page 10
汇编语言程序中常用的符号
在汇编语言程序设计中,经常使用各种符号表示变量、 常量和地址 组成:符号由大小写字母、数字以及下划线组成。 大小写:符号区分大小写,同名的大、小写符号会被编译器 认为是两个不同的符号。 唯一性:符号在其作用范围内必须唯一,即在其作用范围内 不可有同名的符号。 自定义的符号名不能与系统的保留字相同。 不能同名: 符号名不应与指令或伪指令同名。
2020/10/17
计算机学院
page 11
1.程序中的变量 变量的类型: 数值变量 逻辑变量 字符串变量 作用范围: ➢ 全局变量 ➢ 局部变量
2020/10/17
计算机学院
page 12
2.程序中的常量 ARM(Thumb)汇编程序所支持的常量有数值常量、
逻辑常量和字符串常量。 数值常量一般为32位的整数,当作为无符号数时,
2020/10/17
计算机学院
page 22
符号定义伪操作
符号定义伪操作用于定义ARM汇编程序中的变量、对 变量赋值以及定义寄存器的别名等操作。
常见的符号定义伪操作有如下几种: (1) GBLA、GBLL、GBLS (2) LCLA、LCLL,LCLS (3) SET
相关文档
最新文档