微机原理与嵌入式系统 chapter4ARM7TDMI汇编语言程序设计.ppt

合集下载

第四讲 ARM汇编语言及嵌入式C混合编程ppt课件

第四讲 ARM汇编语言及嵌入式C混合编程ppt课件
十六进制数前要使用前缀0x,不能使用&。 当使用8位移位常量导致CPSR中的ALU标志 位需要更新时,N、Z、C、V标志中的C不具 有实际意义
TM
23
内嵌汇编器与armasm汇编器的区别
指令中使用的C变量不能与任何物理寄存器同名, 否则会造成混乱
不支持BX和BLX指令 使用内嵌汇编器,不能通过对程序计数器PC赋值,
(4)通用寄存器R13用作数据栈指针,记作 SP。
TM
5
(5)通用寄存器R14用作链接寄存器 ;
(6)通用寄存器R15用作程序计数器,记作 PC 。
TM
6
8.5.2数据栈使用规则
过程调用标准规定数据栈为FD类型,并且对 数据栈的操作时要求8字节对齐的。
TM
7
8.5.3参数传递规则
1.参数个数可变的子程序参数传递规则 对于参数个数可变的子程序,当参数个数不
超过4个时,可以使用寄存器R0~R3来传递; 当参数个数超过4个时,还可以使用数据栈进 行参数传递。
TM
8
2.参数个数固定的子程序参数传递规则
如果系统不包含浮点运算的硬件部件且没有浮点参 数时,则依次将各参数传送到寄存器R0~R3中, 如果参数个数多于4个,将剩余的字数据通过数据 栈来传递;
如果包括浮点参数则要通过相应的规则将浮点参数 转换为整数参数,然后依次将各参数传送到寄存器 R0~R3中。如果参数多于4个,将剩余字数据传送 到数据栈中,入栈的顺序与参数顺序相反,即最后 一个字数据先入栈。
TM
35
每一步:建立启动C程序的代码,请读者参阅前面 的章节自行建立。
每二步:建立C语言源文件main.c
TM
36
每三步:建立汇编源文件Factorial.s

ARM汇编语言程序设计基础.ppt

ARM汇编语言程序设计基础.ppt

一个汇编程序至少应该有一个代码段,由具体的设计需求,也可由多个 代码段和数据段组成,多个段在程序汇编链接时最终形成一个可执行的 映象文件。可执行映象文件通常由以下几部分构成: ① 一个或多个代码段,代码段的属性为只读。
② 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 ③ 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
嵌入式系统 原理与应用
第四章 ARM汇编语言程序设计基础
XUPT
目 录
4.1 ARM汇编语言的程序结构
4.2 ARM汇编语言程序设计
4.3 C与汇编混合编程
本章小结
2
4.1 ARM汇编语言的程序结构
本章通过一个完整的ARM汇编例子入手,给出了ARM汇编程序的基本 框架,并详细介绍了编写汇编程序常用的汇编器伪指令,具备了这些基 础知识,学生就能自己动手编写汇编程序。 4.1.1 一个简单的ARM汇编程序例子 4.1.2 汇编器伪指令 4.1.3 汇编语言的规范
;定义代码段,名字为 ;定义数据段,名字为
AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头 ,则该段名需用 “ | ” 括起来,如 |1_data| 。属性字段表示该代 码段(或数据段)的相关属性,例如:CODE(定义代码段), DATA(定义数据段),READONLY(只读),READWRITE(读 写)。多个属性用逗号分隔。
num_d
0xFB 0xFF 0xFF 0xFF 0xEF 0xCD 0xAB 0x90
SPACE 语法格式:标号 SPACE 表达式 SPACE用于分配一片连续的存储区域并初始化为0。其中,表达式为 要分配的字节数。例如: data SPACE 1024 ;分配1024个字节空间并初始化为0 LTORG LTORG用于声明一个文字池,用来存放常量,特别是不符合8位位图 数据标准的常数。其使用情景及实例见本章的4.2.1节。

chapter4ARM7TDMI汇编语言程序设计 (2)66页PPT文档

chapter4ARM7TDMI汇编语言程序设计 (2)66页PPT文档
第4章 ARM7TDMI汇编语言
程序设计
27.03.2020
西安邮电学院 计算机系
page 1
第4章 目录
1. 汇编语言的基本概念 2. ARM汇编程序的组成与结构 3. 汇编语言程序设计的基本方法 4. 汇编语言和C语言交叉编程
27.03.2020
西安邮电学院 计算机系
page 2
第4章 目录
R0, #0x18
; 程序运行结束返回编译器调试环境
R1, =0x20196
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
data
AREA |.extra|, NOINIT, READWRITE ; 未初始数据段的名字.extra
SPACE 1024
END 声明文件结束 ; 文件结束
27.03.2020
西安邮电学院 计算机系
page 12
4.2 ARM汇编程序的组成与结构
段:
➢ ARM汇编程序由段组成(程序段、数据段); ➢ 段是由汇编器伪指令AREA定义的相对独立程序
; R0=R0+4
STR R3, [R1], #4 ; 将R3中的数据存入R14
SUBS R2, R2, #1 ; R2计数器减1
BNE wordcopy
; 如果R2不为0,则转向wordcopy处
27.03.2020
西安邮电学院 计算机系
page 11

《微机原理与嵌入式系统基础》课件第4章

《微机原理与嵌入式系统基础》课件第4章

第 4 章 ARM7 TDMI 汇编语言
4.2 ARM汇编程序的组成与结构
首先看一个简单的ARM汇编程序,代码如程序清单4-1
所示。
程序清单4-1 数据块的拷贝
AREA Word, CODE, READONLY ; 代码段的名字Word
num
EQUБайду номын сангаас20
; 宏定义,设置拷贝字的个数
ENTRY
; 程序的入口
第 4 章 ARM7 TDMI 汇编语言
汇编语言是一种面向物理层操作的计算机语言。不同的处 理器类型,具有不同的汇编语言。使用汇编语言编写程序能够 直接利用硬件系统的特性(如寄存器、标志、中断系统等),可 直接对位、字节、字寄存器或存储单元、I/O端口进行处理, 同时也能直接使用CPU指令系统提供的各种寻址方式,编制出 高质量的程序,这样的程序不但占用内存空间少,而且执行速 度快。当然,由于汇编语言不直接支持复杂的抽象数据类型, 因此在描述目标系统数学模型时,还需要程序员在存储器单元 组织各种抽象数据类型的存储方式,使得汇编语言程序设计较 高级语言困难得多,需要较多的软件开发时间,也增加了程序 设计过程中出错的可能性,程序维护亦变得困难。
第 4 章 ARM7 TDMI 汇编语言
3.高级语言(High Level Language) 如果说机器语言、汇编语言是面向机器的,那么高级语言 (如BASIC、C等)则是面向过程的计算机语言。使用这些语言 编程,程序员可以不考虑机器的结构特点,不必了解和熟悉机 器的指令系统,仅使用一些接近人们书写习惯的英语和数学表 达式形式的语言去编制程序。这种程序与目标系统的数学模型 之间有着良好的对应关系,可在各种机器上通用(不同机器之 间仅作少量修改)。但是,机器不能直接执行这种用高级语言 编写的源程序,需要先将它翻译成对应的目标程序(即机器语 言程序),而后才能运行。把具有这种翻译作用的系统程序称 为编译程序,这个翻译过程称为编译,如图4-2所示。

ch4ARM7TDMI汇编语言程序设计

ch4ARM7TDMI汇编语言程序设计
量和字符串常量。 数值常量普通为32位的整数,当作为(zuòwéi)无符号数时,
其取值范围为0~232-1; 当作为(zuòwéi)有符号数时,其取值范围为-231~231-1。 在ARM汇编言语中,运用EQU来定义数值常量。数值常量一
经定义,其数值就不能再修正。
2021/11/10
计第算十机三页学,院共9(1x页u。éyuàn)
SUBS R2, R2, #1
; R2计数器减1
BNE
wordcopy
; 假设R2不为0,那么转向wordcopy处
2021/11/10
计算第七机页学,共院91(页x。uéyuàn)
7
stop MOV LDR SWI
R0, #0x18
; 顺序运转完毕前往编译器调试环境
R1, =0x20026
0x123456
➢ 字符常量由单引号表示,包括C言语中的转义字符,如’\n’。 ➢ 字符串常量用双引号表示,也包括C言语中的转义字符如〝
abcd\0xc\r〞 。
2021/11/10
第计十算五机页学,共院9(1x页u。éyuàn)
15
汇编(huìbiān)言语顺序中的表达式和运 算符
➢ 数值表达式
➢ 逻辑表达式
➢ 字符串表达式
AREA EX3, CODE, READONLY
;前面必需(bìxū)有
GBLA DATA
空格
;前面必需有空格
DATA SETA 0x20 ADD R0,R1,R2 ADD R0,R1,r2
;DATA变量名前面不能留空格
;全部大写,正确
add R0,R1,r2
;寄存器小写,正确
Add R0,R1,r2
2021/11/10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由于以上三条伪操作用于定义全局变量,因此在整 个程序范围内变量名必须唯一。
2020/10/18
西安邮电学院 计算机系
page 13
例 4.7 使用示例
GBLA A1 ; 定义一个全局的数值变量,变量名为A1
A1 SETA 0x0F
;将该变量赋值为0x0F
GBLL A2 ;定义一个全局的逻辑变量,变量名为A2 A2 SETL {TRUE} ;将该变量赋值为真
1. 机器语言
机器语言(Machine Language)是由0和1 二进制代码书写和存储的指令与数据。它的 特点是能被机器直接识别与执行;程序所占 内存空间较少。其缺点是难认、难记、难编、 易错。
2020/10/18
西安邮电学院 计算机系
page 4
2. 汇编语言
从机器汇角编度语看言:(Assembly Language)是一 种汇面编语向言物是理一层种操面作向的物理计层算操机作语的言计,算是机语一言种。采用 助不记同的符处表理示器的类程型序,设具有计不语同言的,汇使编用语助言。记使符用来表 示汇指编语令言的编操写作程码序和能操够直作接数利,用用硬标件号系或统的符特号性代表 地(址如寄、存常器量、或标变志量、。中断系统等),可直接对位、
page 10
4.2 ARM汇编器的伪操作
4.2.1符号定义伪操作 4.2.2数据定义伪操作 4.2.3汇编控制伪操作 4.2.4其它常用的伪操作
2020/10/1
4.2.1符号定义伪操作
符号定义伪操作用于定义ARM汇编程序中的变 量、对变量赋值以及定义寄存器的别名等操。 常见的符号定义伪操作有如下几种: ➢ GBLA、GBLL、GBLS ➢ LCLA、LCLL和LCLS ➢ SETA、SETL、SETS
GBLS A3 ;定义一个全局的字符串变量,变量名为A3
A3 SETS “Testing” ;将该变量赋值为
“Testing”
2020/10/18
西安邮电学院 计算机系
page 14
2. LCLA、LCLL和LCLS
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
;文件名:TEST1.S
;功能使:用实“现字;符”串进拷行贝注功释能
;说明:使用ARMulate软件仿真调试
AREA Example1,CODE,READONLY ;声明代码段Example1
num EQU 20
;设置拷贝字的个数
ENTRY
;标识程序入口
CODE32 START LDR R0, =src
第4章 ARM7TDMI汇编语言
程序设计
2020/10/18
西安邮电学院 计算机系
page 1
第4章 目录
1. 汇编语言的基本概念 2. ARM汇编程序的组成与结构 3. 汇编语言程序设计的基本方法 4. 汇编语言和C语言交叉编程
2020/10/18
西安邮电学院 计算机系
page 2
第4章 目录
;声明32位ARM指令 ; R0指向源数据块
LMDORV标号顶RR12格,,写=#dnsutm
; R1指向目的数据块 ; R2需要拷贝的数据个数
wordcopy
LDR R3, [R0], #程4 序;代从码源段数据块中取一个字,放入R3中,
; R0=R0+4
STR R3, [R1], #4 ; 将R3中的数据存入R1指向的存储
1. 汇编语言的基本概念 2. ARM汇编程序的组成与结构 3. 汇编语言程序设计的基本方法 4. 汇编语言和C语言交叉编程
2020/10/18
西安邮电学院 计算机系
page 3
1.汇编语言的基本概念
程序设计语言是专门为计算机编程所配置的 语言。它们按照形式与功能的不同可分为三 种,即机器语言、汇编语言和高级语言。
; 单元中,R1=R1+4
SUBS R2, R2, #1 ; R2计数器减1
BNE wordcopy
; 如果R2不为0,则转向wordcopy处
2020/10/18
西安邮电学院 计算机系
page 8
stop MOV LDR SWI
R0, #0x18
; 程序运行结束返回编译器调试环境
R1, =0x20026
字节、字寄存器或存储单元、I/O端口进行处理, 同时也能直接使用CPU指令系统提供的各种寻址 方占式用,内编存汇源制 空编程语出 间序言高 少质,量而的且汇程执编序行程序,速这度样快的。目程标程序序 不但
2020/10/18
西安邮电学院 计算机系
page 5
3. 高级语言
高级语言(High Level Language)是脱 离具体机器(即独立于机器)的通用语言,不 依赖于特定计算机的结构与指令系统。
data
AREA |.extra|, NOINIT, READWRITE ; 未初始数据段的名字.extra
SPACE 1024
END 声明文件结束 ; 文件结束
2020/10/18
西安邮电学院 计算机系
page 9
ARM汇编器的伪操作
区别: ➢ 指令 ➢ 伪指令 ➢ 伪操作
2020/10/18
西安邮电学院 计算机系
2020/10/18
西安邮电学院 计算机系
page 12
1. 全局变量声明GBLA、GBLL和GBLS
格 式:GBLA(GBLL或GBLS)全局变量名 功 能:GBLA、GBLL和GBLS伪操作用于定义一个
ARM程序中的全局变量,并将其初始化。其中:
➢ GBLA: 定义一个全局的数值变量,并初始化为0 ➢ GBLL: 定义一个全局的逻辑变量,并初始化为F ➢ GBLS:定义一个全局的字符串变量,并初始化为空
用高级语言 编写的源程序
编译或解释程序
目标程序
2020/10/18
西安邮电学院 计算机系
page 6
第4章 目录
1. 汇编语言的基本概念 2. ARM汇编程序的组成与结构 3. 汇编语言程序设计的基本方法 4. 汇编语言和C语言交叉编程
2020/10/18
西安邮电学院 计算机系
page 7
2. ARM汇编程序的组成与结构
相关文档
最新文档