第7章 汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TM
29
29
7.4
ARM汇编语言程序设计实例解
在嵌入式系统编程中,与硬件直接相关的最 底层代码要用汇编语言来编写; 本节中所设计的实例,意在帮助读者对嵌入 式汇编语言程序设计打下坚实的基础,同时 也为嵌入式硬件底层编程做准备。
TM
30
30
示例解析
任务:求一个数的阶乘(64位结果)
_start:
MOV MOV MOV loop_1: STR ADD SUBS BNE R1 , [R0],#4 R1 , R1,#1 R2 , R2,#1 loop_1 R0 , #0X3000 @初始化寄存器
R1 , #0X10000001 R2 , #100 @第一次循环赋值
TM
33
33
MOV
TM
25
25
7.3
ARM汇编语言程序设计规范
汇编器预定义的寄存器名称
ARM汇编语言程序设计规范
TM
26
26
汇编器预定义的寄存器名称
R0~R15 A1~A4 V1~V8 SB SL FP IP SP LR PC CPSR SPSR F0~F7 S0~S31 D0~D15 P0~P15 C0~C15 ARM 处理器的通用寄存器 入口参数、处理结果、暂存寄存器;是 R0~R3 的同义词 变量寄存器,R4~R11 静态基址寄存器,R9 栈界限寄存器,R10 帧指针寄存器,R11 内部过程调用暂存寄存器,R12 栈指针寄存器,R13 链接寄存器,R14 程序计数器,R15 当前程序状态寄存器 程序状态备份寄存器 浮点数运算加速寄存器 单精度向量浮点数运算寄存器 双精度向量浮点数运算寄存器 协处理器 0~15 协处理器寄存器 0~15
SUBS
BNE
R0 , R0 , #1
Loop
@计数器递减
@计数器不为0继续循环
TM
31
31
先对内存地址0x3000开始的100个字内存单 元填入0x10000001~0x10000064字数据, 然后将每个字单元进行64位累加结果保存于 [R9:R8]。(R9中存放高32位)
TM
32
32
MOV MOV SUB Loop:
R8 , #20 R9 , #0 R0,R8,#1
@低32位初始化为20 @高位初始化为0 @初始化计数器
MOV
UMULL MLA
R1 , R9
@暂存高位值
R8 , R9 , R0 , R8 @[R9:R8]=R0*R8 R9 , R1 , R0 , R9 @R9=R1*R0+R9
R2 , R2 , #1 loop_2
TM
34
34
在ARM集成开发环境下编程:
AREA Fctrl, CODE, READONLY ; 声明代码Fctrl
ENTRY ; 标识程序入口
CODE32
…… Stop B END
; 声明32 位ARM 指令
Stop ;文件结束
TM
35
35
下面的代码段将寄存器R0中的数据存储方式转换 成另一种存储方式。指令执行前,R0中的数据存储 方式为:R0=A,B,C,D;指令执行后为: R0=D,C,B,A
EOR R1,R0,R0,ROR #16 ;
BIC R1,R1,#0xFF0000 ;
MOV R0,R0,ROR #8
EOR R0,R0,R1,LSR #8
4
4
ARM编译环境下汇编语句格式
ADS环境下ARM汇编语句格式如下:
{symbol} {instruction} {symbol} {directive} {;comment} {;comment}
{symbol}{ pseudo-instruction}{;comment}
TM
5
5
返回一个字符串最右端一定长度的字符串: A :RIGHT: B 功能说明:返回字符串A最右端B(B为返回 长度)长度的字符串。
TM
13
13
(6)CC
用于连接两个字符串,B串接到A串后面:
A :CC: B
TM
14
14
5.地址标号 1)PC相关标号 2)寄存器相关标号
3)绝对地址
TM
(5)字符串常量由一对双引号以及由它括住的一组字符 串组成,包括标准C中的转义字符。
如果需要使用双引号”或字符$,则必须用””和$$代替 。
TM
7
7
3.变量
(1)数字变量—汇编器对-n和232-n不做区别 (2)字符串变量—字符串变量最大长度为512字节 (3)逻辑变量—{FALSE}和{TRUE}
;
;
TM
36
36
其余实例分请参阅教材《ARM嵌入式系统结 构与编程》 7.4节
TM
37
37
第7章 汇编语言程序设计
The End
TM
38
TM
24
24
(2)给符号赋值 symbol_name = symbol_value
或者.set symbol_name, symbol_value
或者.equ symbol_name, symbol_value
(3)符号名
可由数字、字母或‘.’或‘_’组成,不可以数字开头,大小 写敏感。
PS:具体说明请参阅教材《ARM嵌入式系统结构与编程》第158页
TM
27
27
ARM汇编语言程序设计规范
要提高软件质量必须降低编码阶段的错误率 ,这需要制定详细的软件编程规范,并培训 每一位程序员,最终的结果可以把编码阶段 的错误降至10%左右,同时会大大的缩短测 试时间。
TM
28
28
1.符号命名规则 2.注释 3.程序设计的其它要求
PS: 这三方面的规范要求请参阅教材《ARM嵌入式系统结构与编程》 159页
文件。
汇编器as生成的目标文件都假定从地址0开始, ld为其指定最终的地址。
链接器ld把目标文件中的每个section都作为一
个整体,为其分配运行的地址
TM
22
22
TM
23
23
3.符号说明 (1)label lable后面要带冒号‘:’,例如:
_start: B Reset_handler
R0 , #0X3000
MOV
MOV MOV
R2 , #100
R9 , #0 R8 , #0
loop_2:
LDR ADDS
@第二次循环累加
R1 , [R0],#4 R8 , R1,R8@R8=R8+R1,进位影响标志位
ADC
SUBS BNE
R9 , R9 , #0@R9=R9+C,C为进位
ADS编译环境下汇Hale Waihona Puke Baidu语句中符号规则
1.符号命名规则 (1)符号由大小写字母、数字、下划线组成,且符号是 区分大小写的。 (2)局部标号可以用数字开头,其他的标号不能。
(3)符号在其作用范围内必须是唯一的。
(4)程序中的符号不要与指令助记符或者伪操作同名。
TM
6
6
2.常量 (1)十进制数,如535、246。 (2)十六进制数,如0x645、0xff00。 (3)n_XXX, n表示n进制数,从2~9,XXX是具体的数字 。例如:8_3777 (4)字符常量用一对单引号括起来,包括一个单字符或 者标准C中的转义字符。例如‘A’、‘\n’。
TM
19
19
7.2.2 GNU环境下ARM汇编程序编译
(1) 预处理
GNU汇编器as的内部预处理包括:移除多余 的间隔符代码中的所有注释,并将字符常量 转换为数字值。它不作宏处理和文件包含处 理,但这些事情可以交由gcc编译器去做, 文件包含可以用.include伪指令来实现。
TM
20
20
TM
10
10
(3)STR
语法格式: :STR: A 功能说明:将A(A为数字量或逻辑表达式) 转换成字符串。
TM
11
11
(4)LEFT
语法格式: A :LEFT: B 功能说明:返回字符串A最左端B(B为返回 长度)长度的字符串。
TM
12
12
(5)RIGHT
15
15
6.局部标号
局部标号的语法格式如下:
n {routname}
TM
16
16
被引用的局部标号语法规则是:
% {F∣B} {A∣T} n {routname}
其中: n是局部标号的数字号。
routname是当前局部范围的名称。
%表示引用操作。 F指示汇编器只向前搜索。
PS: 具体说明参考教材《ARM嵌入式系统结构与编程》第153页的说明
TM
8
8
4.字符串表达式操作
(1)取符串的长度LEN
语法格式:
:LEN: A 功能说明:返回字符串A的长度。
TM
9
9
(2)CHR
语法格式: :CHR: A 功能说明:将A(A为某一字符的ASCII值) 转换为单个字符。
B指示汇编器只向后搜索。
A指示汇编器搜索宏的所有嵌套层次。 T指示汇编器搜索宏的当前层次。
TM
17
17
7.2
GNU环境下汇编语句与编译说明
GNU环境下ARM汇编语言程序设计主要是面 对在ARM平台上进行嵌入式LINUX的开发。 GNU标准中提供了支持ARM汇编语言的汇编 器as(arm-elf-as)、交叉编译器gcc ld(armelf-gcc)和链接器ld(arm-elf-ld)。
TM
18
18
7.2.1 GNU环境下ARM汇编语句格式
GNU环境下ARM汇编语言语句格式如下:
{label :}
{label :} {label :}
{instruction}
{directive} { pseudo-instruction}
{@comment}
{@comment} {@comment}
ARM嵌入式系统结构与编程
大连理工大学软件学院
邱铁
办公楼413 Tel:87571632
E_mail: qiutie@dlut.edu.cn
参考教材:《ARM嵌入式系统结构与编程》 清华大学出版社2009年3月出版
TM
1
1
第7章 汇编语言程序设计
本章主要介绍ARM汇编语言程序设 计规范,以及在汇编语言程序设计 中所要注意的问题,最后以大量的
(2) 注释
GNU ARM Assembly可识别的注释方式有:
C风格多行注释符/* ... */ GNU单行注释符“@”或“#”。
(3) 符号
与C语言基本一致,符号名由字母、数字以及'_' 、和'.'组成,大小写敏感。
TM
21
21
2.段与重定位
链接器ld用于把多个目标文件合并为一个可执行
实例说明汇编语言程序设计方法。
TM
2
内容提要
7.1 7.2 7.3
ARM编译环境下汇编语句 GNU环境下汇编语句与编译说明 ARM汇编语言程序设计规范
7.4
ARM汇编语言程序设计实例解析
TM
3
3
7.1
ARM编译环境下汇编语句
ARM编译环境下进行汇编语言程序设计的格 式 汇编语句中的符号规则
TM