第7章 汇编语言程序设计
PS: 具体说明参考教材《ARM嵌入式系统结构与编程》第153页的说明
TM
8
8
4.字符串表达式操作
(1)取符串的长度LEN
语法格式:
:LEN: A 功能说明:返回字符串A的长度。
TM
9
9
(2)CHR
语法格式: :CHR: A 功能说明:将A(A为某一字符的ASCII值) 转换为单个字符。
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
15
15
6.局部标号
局部标号的语法格式如下:
n {routname}
TM
16
16
被引用的局部标号语法规则是:
% {F∣B} {A∣T} n {routname}
其中: n是局部标号的数字号。
routname是当前局部范围的名称。
%表示引用操作。 F指示汇编器只向前搜索。
4
4
ARM编译环境下汇编语句格式
ADS环境下ARM汇编语句格式如下:
{symbol} {instruction} {symbol} {directive} {;comment} {;comment}
{symbol}{ pseudo-instruction}{;comment}
TM
5
5
TM
24
24
(2)给符号赋值 symbol_name = symbol_value
或者.set symbol_name, symbol_value
或者.equ symbol_name, symbol_value
(3)符号名
可由数字、字母或‘.’或‘_’组成,不可以数字开头,大小 写敏感。
PS:具体说明请参阅教材《ARM嵌入式系统结构与编程》第158页
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
返回一个字符串最右端一定长度的字符串: 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
ARM嵌入式系统结构与编程
大连理工大学软件学院
邱铁
办公楼413 Tel:87571632
E_mail: qiutie@
参考教材:《ARM嵌入式系统结构与编程》 清华大学出版社2009年3月出版
TM
1
1
第7章 汇编语言程序设计
本章主要介绍ARM汇编语言程序设 计规范,以及在汇编语言程序设计 中所要注意的问题,最后以大量的
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
R2 , R2 , #1 loop_2
TM
34
34
在ARM集成开发环境下编程:
AREA Fctrl, CODE, READONLY ; 声明代码Fctrl
ENTRY ; 标识程序入口
CODE32
…… Stop B END
; 声明32 位ARM 指令
Stop ;文件结束
TM
35
TM
29
29
7.4
ARM汇编语言程序设计实例解
在嵌入式系统编程中,与硬件直接相关的最 底层代码要用汇编语言来编写; 本节中所设计的实例,意在帮助读者对嵌入 式汇编语言程序设计打下坚实的基础,同时 也为嵌入式硬件底层编程做准备。
TM
30
结果)
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为进位
TM
18
18
7.2.1 GNU环境下ARM汇编语句格式
GNU环境下ARM汇编语言语句格式如下:
{label :}
{label :} {label :}
{instruction}
{directive} { pseudo-instruction}
{@comment}
{@comment} {@comment}
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
_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
(2) 注释
GNU ARM Assembly可识别的注释方式有:
C风格多行注释符/* ... */ GNU单行注释符“@”或“#”。
(3) 符号
与C语言基本一致,符号名由字母、数字以及'_' 、和'.'组成,大小写敏感。
TM
21
21
2.段与重定位
链接器ld用于把多个目标文件合并为一个可执行
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
27
27
ARM汇编语言程序设计规范
要提高软件质量必须降低编码阶段的错误率 ,这需要制定详细的软件编程规范,并培训 每一位程序员,最终的结果可以把编码阶段 的错误降至10%左右,同时会大大的缩短测 试时间。
TM
28
28
1.符号命名规则 2.注释 3.程序设计的其它要求
PS: 这三方面的规范要求请参阅教材《ARM嵌入式系统结构与编程》 159页
TM
19
19
7.2.2 GNU环境下ARM汇编程序编译
(1) 预处理
GNU汇编器as的内部预处理包括:移除多余 的间隔符代码中的所有注释,并将字符常量 转换为数字值。它不作宏处理和文件包含处 理,但这些事情可以交由gcc编译器去做, 文件包含可以用.include伪指令来实现。
TM
20
20
;
;
TM
36
36
其余实例分请参阅教材《ARM嵌入式系统结 构与编程》 7.4节
TM
37
37
第7章 汇编语言程序设计
The End
TM
38
ADS编译环境下汇编语句中符号规则
1.符号命名规则 (1)符号由大小写字母、数字、下划线组成,且符号是 区分大小写的。 (2)局部标号可以用数字开头,其他的标号不能。