8ARM汇编语言程序指示符与语句格式.

合集下载

8ARM汇编语言程序指示符与语句格式.

8ARM汇编语言程序指示符与语句格式.
10
5.4.5.1 AREA

AREA指示符用于定义一个代码段或者数据段。

语法格式 AREA sectionname{,attr}{,attr}.... 其中: sectionname为所定义的代码段或者数据段的名称。 如果该名称是以数字开头的,则该名称必须用“|” 括起来,如|1_datasec|。还有一些代码段具有约 定的名称,如|.text|表示C语言编译器产生的代码 段或者是与C语言库相关的代码段。 Attr是该代码段(或者程序段)的属性。 在AREA指示符中,各属性间用逗号隔开。
11
2018/9/14
AREA的属性

下面列举主要的属性:

ALIGN=expression。默认的情况下,ELF的代码段 和数据段是4字节对齐的。

Expression可以取0~31的数值,相应的对齐 方式为(2expression)字节对齐。如expression=3 时为8字节对齐。



ASSOC=section。指定与本段相关的ELF段。任何 时候连接section段也必须包括sectionname段。 CODE 定义代码段。默认属性为READONLY。 COMDEF 定义一个通用的段。该段可以包含代码 或者数据。在个源文件中,同名的COMDEF段必 须相同。
15
2018/9/14
EQU(续)



type有下面3种取值: CODE16 CODE32 DATA 使用说明 EQU指示符的作用类似于C语言中的#define,用于 为一个常量定义字符名称。 示例 abcd EQU 2 ;定义abcd符号的值为2 abcd EQU label+16 ;定义abcd符号的值(label+16) addr1 EQU 0xlC, CODE32 ;定义addr1符号值为 ;绝对地址值0xlC,而且该处为ARM指令。

第8章 ARM汇编指令

第8章 ARM汇编指令

23/95
算术运算指令
指令格式
ADD{cond}{S} Rd,Rn,operand2 SUB{cond}{S} Rd,Rn,operand2 RSB{cond}{S} Rd,Rn,operand2
说明 加法 减法 逆向减法 带进位加法 带进位减法
201611293095加载存储指令指令格式说明操作ldrcondrdaddressing加载字数据rdaddressing注意addressing的寻址方式及索引方式ldrcondtrdaddressing以用户模式加载字数据ldrcondbtrdaddressing以用户模式加载无符号字节ldrcondbrdaddressing加载无符号字节数据ldrcondhrdaddressing加载无符号半字数据ldrcondsbrdaddressing加载有符号字节数据ldrcondshrdaddressing加载有符号半字数据ldrconddrdaddressing加载双字数据strcondrdaddressing存储字数据addressingrd注意addressing的寻址方式及索引方式strcondtrdaddressing以用户模式存储字数据strcondbrdaddressing存储字节数据strcondbtrdaddressing以用户模式存储字节数据strcondhrdaddressing存储半字数据strconddrdaddressing存储双字数据符号数加载时用符号扩展到32位否则用零扩展到32位
14/95
1. 操作数存放在内存单元中; 2.指令地址码字段给出 {寄存器编号(名)列表}; 3.编号高的寄存器总是对应内存中的高地址单元; 4. 可完成存储块和16个寄存器或其子集之间的数据传送。 LDMIA
(Increase After)

汇编语言-程序格式

汇编语言-程序格式

每一个字节数据项只占用一个字节存储单元 例:COUNT DB 100 DB 0DH ,0AH , ‘$’ TABLE DB 0 , 1 , 4 , 9 , 16
定义字节数据项(DB)
每一个字数据项只占用两个字节存储单元 例:FLAG DW 2FCDH, 100,-1 VECT DW 0 DW 100H
伪指令定义符:规定了伪指令的功能 参数:说明伪指令操作的对象,如常数(数值表达式)等 名称:给所定义的内容起的名称。 在汇编语言中,名字和标号很容易区分,名字后面没有冒号,而标号后一定用冒号。 标号和名字最多由31个字母、数字及规定的特殊字符组成,并且不能以数字来开头。 标号和名字不能是汇编语言的保留字,如不能是“MOV”。 汇编语言不区分保留字中字母的大小写。如“MOV AX ,03H”等同于“mov ax , 03h” 伪指令有多种,常见的如: (1)段定义伪操作 (2)数值数据定义及存储器分配 (3)符号数据定义 (4)程序开始和结束伪操作 (5)表达式赋值伪操作 此外还有基数控制伪操作、对准伪操作等。
等号语句(=) 汇编语言专门提供了符号语句来定义符号常数,即用符号表示一个常数。等号语句的一般格式如下: 符号名 = 数值表达式 例如:XX = 10 用符号定义语句可被重新定义。 例如: ABCD = 1 ABCD = 100
3. 定义符号名语句 格式:符号名 LABEL 类型 其中类型可以是BYTE、WORD、DWORD、NEAR、FAR,其中前3项对应于数据项,后2项对应于可执行代码。 功能:指定为某一类型的符号,且该符号的段属性和偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同。 例如: BUFFER LABEL WORD BUFF DB 100 DUP(0) 定义了一个符号BUFFER,其类型是WORD。因为段属性与偏移属性和BUFF相同, 所以内容为0000H。 又如: QUIT LABEL FAR EXIT:MOV AH , 4CH “MOV AH , 4CH”有了QUIT和EXIT两个标号。

汇编语言的语句格式

汇编语言的语句格式
长度为30个字节
; STACK段结束 ;定义DATA1段,定位类型BYTE
DB “This is an example!” ;长度为19个字节 ENDS SEGMENT WORD DW 40 DUP(0) ; DATA1段结束 ;定义DATA2段,定位类型WORD ;长度为40字,80个字节
ENDS ; DATA2段结束 SEGMENT PAGE ;定义CODE代码段,定位类型PAGE … ENDS ; CODE代码段结束
2.伪指令 伪指令
符号定义伪指令 数据定义伪指令 段定义伪指令 过程定义伪指令 定位定义伪指令
一、符号定义伪指令
用途: 用途 给一个符号重命名,或定义新的类型 属性等。
1)EQU 等值伪指令 格式:名字 EQU 表达式 2)= 等号伪指令 格式:名字
=
表达式
二、数据定义伪指令
格式:[名字] 伪指令助记符 数据项表 1)DB 定义字节 2)DW 定义字 3)DD 定义双字 重复操作符 n DUP (初值)
START: … CODE ENDS END START
(五)、其他运算符 )、其他运算符
1)、方括号 [ ] )、方括号 )、 2)、段超越 “:” )、段超越 )、 3)、 )、HIGH和LOW )、 和
(五)、运算符的优先级 五、
优 先 级 (高) 高 1 2 3 4 5 6 优先 级 7 8 9 10 11 12 (低) 低
运 算 符
运 算 符
四、过程定义伪指令
格式: 过程名 PROC[NEAR/FAR] . . . RET ENDP
过程名
五、定位定义伪指令
ORG 例:
DATA D1 D2 DATA CODE
表达式

ARM汇编语言的语法知识

ARM汇编语言的语法知识
指令执行的条件码 加载的目标寄存器 地址表达式
地址表达式expr的取值范围: 当地址值不是字对齐时,其取值范围为-64K~64K; 当地址值是字对齐时,其取值范围为-256K~256K; 当地址值是16字节对齐时,其取值范围将更大; 该地址必须与ADRL伪指令在同一个代码段中 .
• ARM伪指令——大范围的地址读取
指令执行的条件码 加载的目标寄存器 地址表达式
地址表达式expr的取值范围: 当地址值不是字对齐时,其取值范围为-255~255字节; 当地址值是字对齐时,其取值范围为-1020~1020字节; 当地址值是16字节对齐时,其取值范围将更大; 该地址必须与ADR伪指令在同一个代码段中.
• ARM伪指令——中等范围的地址读取
;单元,并初始化为0
• ARM汇编语言伪指令----数据定义伪操作
MAP MAP用于定义一个结构化的内存表的首地址.此时,内存 表的位置计数器设置成该地址值.该伪操作可以用"^"代替.
MAP伪操作举例
LTORG伪操作通常放在无条件跳转指令之后,或者子程
序返回指令之后,这样处理器就不会错误地将数据池中的
数据当做指令来执行.
用LTORG伪指令定义数据缓冲池举例
Funel
;子程序
LDR R1, =0x8000;将0x8000加载到R1
MOV PC, LR
LTORG
;定义数据缓冲池,存放0x8000
Data SPACE 40 ;从当前位置开始分配40字节的内存
使用示例:
height DN width SN lower FN
6 ;将VFP双精度寄存器6名称定义为height 16 ;将VFP单精度寄存器16名称定义为width 6 ;将浮点寄存器6名称定义为lower

arm汇编语言格式

arm汇编语言格式

arm汇编语言格式
ARM汇编语言是一种底层的程序设计语言,用于编写针对ARM
架构的机器码指令。

ARM汇编语言的格式包括以下几个方面:
1. 注释,注释用于解释代码的作用和功能,以分号(;)开头。

注释对于代码的可读性和理解很重要。

2. 指令,指令是汇编语言的核心部分,用于执行特定的操作。

指令可以包含操作码(opcode)和操作数(operand)。

操作码指定
要执行的操作,操作数提供操作所需的数据。

3. 标号,标号用于标识代码的位置或跳转目标。

标号以英文字母、数字和下划线组成,以冒号(:)结尾。

4. 寄存器,ARM架构有一组通用寄存器,用于存储和处理数据。

寄存器以英文字母r开头,后跟一个数字,表示寄存器的编号。

例如,r0表示第一个通用寄存器,r1表示第二个通用寄存器,依此类推。

5. 操作数,操作数可以是立即数(immediate)、寄存器、内
存地址等。

立即数是直接出现在指令中的数值,寄存器是存储数据的容器,内存地址是存储器中数据的位置。

6. 伪指令,伪指令是用于辅助程序开发的指令,不会被转化为机器码。

伪指令以句点(.)开头,常用的伪指令有定义数据段、定义代码段、定义常量等。

7. 指令格式,ARM汇编语言的指令格式通常包括操作码、目的寄存器、源操作数和条件码。

具体的指令格式会根据不同的指令而有所不同。

总结起来,ARM汇编语言的格式包括注释、指令、标号、寄存器、操作数、伪指令和指令格式。

这些元素共同构成了ARM汇编语言的语法规则,通过合理的组合和使用,可以编写出有效的ARM汇编代码。

arm汇编指令格式

arm汇编指令格式

arm汇编指令格式ARM汇编指令格式ARM汇编语言是一种底层程序设计语言,用于直接操控ARM处理器的指令和寄存器。

ARM汇编指令格式是编写ARM汇编程序的基础,本文将一步一步详细解答与ARM汇编指令格式相关的问题。

第一部分:ARM汇编基础在深入理解ARM汇编指令格式之前,我们需要先了解一些基本概念。

ARM 处理器是英国公司ARM Holdings开发的一种低功耗、高性能的处理器体系架构,广泛应用于移动设备、嵌入式系统等领域。

ARM汇编语言是ARM 处理器的机器码的可读形式,用于编写底层程序。

在ARM汇编语言中,指令以二进制形式表示,通常以助记符的形式出现。

每条指令占用一个或多个字(通常一个字等于4个字节),按字节编址。

第二部分:指令格式详解ARM处理器的指令格式包括指令助记符、操作数和操作码等部分。

ARM 汇编指令格式的一般形式如下:[label:] mnemonic{cond}{S} Rd, Rn, Operand2其中,[label:]为可选项,表示标号,用于在程序中跳转或引用;mnemonic为指令的助记符,用于表示具体的操作;{cond}为可选项,表示条件代码,用于指定是否执行指令;{S}为可选项,表示是否更新条件代码;Rd表示目标操作数的寄存器;Rn表示源操作数的寄存器;Operand2为第二个操作数。

指令助记符(mnemonic)代表具体的指令功能,例如ADD表示加法、MOV表示数据传输等。

条件代码(cond)用于指定是否执行指令,常用的条件代码有EQ(等于)、NE(不等于)、GT(大于)等。

这样,我们可以根据需要选择是否在特定条件下执行指令。

更新条件代码(S)表示执行指令后是否更新条件代码寄存器。

如果设置了该标志位,则根据指令的结果设置条件代码寄存器。

目标操作数(Rd)是指令的结果存储的寄存器,源操作数(Rn)是参与指令计算的寄存器。

操作数(Operand2)是指令的第二个操作数,可以是立即数、寄存器的偏移值、寄存器的移位值等。

汇编语言语句格式.

汇编语言语句格式.
第八讲
一、汇编语言语句格式 二、符号定义伪指令 三、数据定义伪指令 四、汇编语言数据 五、表达式与运算符 六、程序的段结构
一、汇编语言语句格式
汇编语言源程序 汇编程序目标程序
• 汇编语言源程序的基本组成单位是语 句. • 源程序中使用的语句有三种:指令语句、 伪指令语句和宏指令语句(或称宏调用 语句).
• 例如: • 标识符 ?ABC ——VAR .234 A2 • 非标识符:1ABC +VAR ADD 256
第二节、符号定义伪指令
• • • • 一、等值语句 语句格式: 符号 EQU 表达式 EQU伪指令的作用是将表达式的值或 表达式赋给它左边的符号。
• 例如:用符号表示常数、数值 表达式 • NUM EQU 10H • CONT EQU 123+34-67 • VAR DB NUM • …MOV AX,NUM
(4)带DUP表达式 数据定义伪指令语句格式如下: DB 变量名 DW 表达式1 DUP(表达式2) DD DUP可以嵌套 其中,表达式1是重复的次数 表达式2是重复数据的内容
例如:以下是带DUP表达式的变量定义: ARYB1 DB 10H DUP(2) ARYB2 DB 20H DUP(‘ABC’) ARYW DW 10H DUP(?)
注意:
• 在一个源程序中,同一个符号不能用 EQU伪指令重新定义. • 例如: •M EQU MOV • …M EQU MUL • 第二条语句在汇编时,会产生符号重新 定义的语法错误.
二、等号语句
• 语句格式: 符号=表达式 • 等号语句可以重新定义符号
• 例如:
CONT =10 M=MOV …… CONT =CONT+10 M=MUL
• 例如:以下是一条伪指令语句 • VAR1 DB 12H;给变量分配一个字 节单元,初值为12H

arm的汇编 标准

arm的汇编 标准

arm的汇编标准
ARM的汇编语言规范如下:
1. 汇编语句格式:在ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。

2. 标识符大小写:ARM汇编器对标识符大小写敏感,书写标号及指令时字
母大小写要一致,一个ARM指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用。

3. 注释:注释使用“;”,注释内容由“;”开始到此行结束,注释可以在一行的顶格书写。

4. 格式:格式为[标号] <指令条件S> <操作数>[;注释]。

5. 空行和换行:源程序中允许有空行,适当地插入空行可以提高源代码的可读性。

如果单行太长,可以使用字符“”将其分行,“”后不能有任何字符,包括空格和制表符等。

6. 变量和常量:对于变量的设置,常量的定义,其标识符必须在一行的顶格书写。

以上就是ARM汇编的一些规范,供您参考。

如果需要更多信息,建议查阅相关书籍或咨询专业人士。

汇编语言的语句格式

汇编语言的语句格式

ORG 表达式
DATA D1 D2 DATA CODE
START: …
SEGMENT
ORG 20H
DB 12H,13H
ORG $+01H
61H,62H,63H
ENDS
SEGMENT
ASSUME
CS:CODE, …
ORG 100H

CODE
ENDS END START
2. 汇编语言的语句
指令性语句 指示性语句
一、汇编语言的语句格式:
[名字] 操作码/伪操作 [操作数] [;注释]
(一)、名字、标号、变量
标号的三种属性:段、偏移量和类型 变量的三种属性:段、偏移量和类型
(二)、操作码和伪操作
(三)、语句中的操作数
1)、常数 2)、寄存器 3)、标号 4)、变量 5)、表达式
ENDS SEGMENT BYTE
; STACK段结束 ;定义DATA1段,定位类型BYTE
DB “This is an example!” ;长度为19个字节
ENDS
; DATA1段结束
SEGMENT WORD ;定义DATA2段,定位类型WORD
DW 40 DUP(0) ;长度为40字,80个字节
6 *,/,MOD,
SHL,SHR
优先 级
运算符
7
十,— (二元运算符)
8
EQ, NE, LT,
LE, GT, GE
9 NOT
10 AND
11 OR,XOR
12 SHORT
(低)
2.伪指令
符号定义伪指令 数据定义伪指令 段定义伪指令 过程定义伪指令 定位定义伪指令
一、符号定义伪指令

ARM汇编语言编程详解

ARM汇编语言编程详解

ARM汇编语言编程详解硅谷芯微嵌入式学院技术贡献网址:4.1 汇编语言使用汇编语言编写程序,它的特点是程序执行速度快,程序代码生成量少,但汇编语言是一种不易学习的编程语言,并且可读性较差,这种语言属于低级语言。

每一种汇编语言对应每一款芯片,使用这种语言需要对硬件有深刻的了解。

在通常情况下,可以使用汇编语言编写驱动程序、需要严格计算执行时间的程序以及需要加速执行的程序。

先介绍一个例子来说明ARM汇编程序的格式。

例1 计算20+8,结果放入R0寄存器。

AREA Buf, DATA, READWRITE ;声明数据段Buf Count DCB 20 ;定义一个字节单元Count AREA Example, CODE, READONLY ;声明代码段ExampleENTRY ;标识程序入口CODE32 ;声明32位ARM指令STARTLDRB R0, Count ;R0 = Count =20MOV R1, #8 ;R1 = 8ADD R0, R0, R1 ;R0 = R0 + R1B STARTEND例1中定义了两个段:数据段Buf和代码段Example 。

数据段中定义了字节单元Count,其中Count用来保存一个被加数;代码段中包含了所有源程序代码,程序中首先读取Count字节单元的内容,然后与立即数8相加,计算结果保存到R0中。

由例1可见,ARM汇编语言的源程序是分段的,由若干个段组成一个源程序。

源程序的一般格式为:AREA name1, attr ;声明特定的段标号语句1 ;语句...语句nAREA name2, attr标号语句n+1...语句n+mEND ;结束符每一个段都有一个名字,并且段名是唯一的。

每个段以符号AREA作为段的开始,以碰到下一个符号AREA 作为该段的结束。

段都有自己的属性,如是代码段(CODE)还是数据段(DATA),是只读(READONLY )还是可读写(READWRITE)?这些属性可以在attr栏中设定。

汇编语言语句格式.

汇编语言语句格式.

• DATA SEGMENT • VAR1 DB 10,15,20 • VAR2 DW OFFFFH,100H • DATA ENDS • … • MOV AX,SEG VAR1;2000H • MOV SI,OFFSET VAR;0000H • MOV BX,SEG VAR2;2000H • MOV DI,OFFSET VAR2;0003H
• 例如:用符号代表地址表达式、变量 名和标号 • ADR EQU ES:[BX][SI] • VB EQU DATA_BYTE+1 • LI EQU FAR PTR SUB1 • ……. • MOV ADR ,AL • ADD BL,VB • JMP LI
• • • • • • •
例如: 用符号表示寄存器、指令助记符 AREG EQU AX M EQU MOV …… MOV AREG ,1234H M CX, BX
• 2.字符串常数 • 单引号或双引号引起来
3. 常数的使用 (1)在指令语句的源操作数中作立即数。如: ADD AL,0F5H MOV AX,‘AB’ MOV CX,’12’
(2)在指令语句中,可作为存储器操 作数寻址方式中的位移量。如; MOV AX,DS:[1000H] ADD 10H[DI],CX MOV AL,0ABH[BX] SUB DX,1234H[BP][SI]
• 等效于: • MOV AX,2000H • MOV SI,0 • MOV BX,2000H • MOV DI,3
• 2.TYPE 运算符 • TYPE的运算结果为代表变量或标号类型属 性的数字。
• • • • • • • •
例如: VA1 DB 12H,13H VA2 DW 10H,DUP(0) VA3 DD VA1 … MOV AL,TYPE VA1; MOV CX,TYPE VA2; MOV BL,TYPE VA3;

第二讲_ARM汇编语言程序设计

第二讲_ARM汇编语言程序设计

•在ARM汇编语言中,子程序调用是通过BL指令来完成的。 BL指令的语法格式如下: •BL subname •其中,subname是被调用的子程序的名称。
子程序的返回
在返回调用子程序时,转移链接指令保存到LR寄存器 (r14)中的值需要拷贝回程序寄存器PC(r15)。
跳转表思想
•在程序设计中,有时为使程序完成一定的 功能,需要调用一系列子程序中的一个,而 决定究竟调用哪一个由程序的计算值确定。 跳转表是解决该问题的有效方案。跳转表是 利用程序计数器PC在通用寄存器文件中的可 见性来实现的,如下例所示:
第二讲
ARM汇编语言程序设计
ARM汇编语言程序设计
ARM汇编中的文件格式 ARM汇编语言语句格式 ARM汇编语言程序格式 ARM汇编语言编程的重点 ARM汇编程序实例
一、ARM汇编中的文件格式
ARM 源程序文件(可简称为源文件)可以由任意一 种文本编辑器来编写程序代码,它一般为文本格式。在 ARM程序设计中,常用的源文件可简单分为以下几种:
• 这是ARM中典型的数据理指令,格式 如下所示:
ADD r0, r1, r2 ;r0 <= r1 + r2
立即数操作
• 在数据处理指令中,第二操作数除了 可以是寄存器,还可以是一个立即数,如 下所示: • ADD R3, r3,#1 ;r3 <= r3 + 1 • AND R8, r7,#0xff ;r8 <= r7[7:0] •需要特别注意的是:在32位指令编码中, 有效立即数是由一个8位的立即数循环右移 2n位得到。
• CODE32 • INTO_ARM • ADR R0,INTO_THUMB+1 • BX R0 • ….. • CODE16 • INTO_THUMB ……. • ADR R5,INTO_ARM • BX R5

4第四章 ARM汇编语言程序设计

4第四章 ARM汇编语言程序设计

ARM 指令系统 使用示例:
LCLA Test3
;声明一个局部的
数字变量,变量名为Test3
Test3 SETA 0xaa;将该变量赋值为
0xaa
LCLL Test4
;声明一个局部的
逻辑变量,变量名为Test4
Test4 SETL {TRUE} ; 将 该 变
量赋值为真
4、 RLIST
名称 RLIST {寄存器列表}
使用示例:
GBLA Counter
;声明一个全局的数学变量,变量名为Counter
Counter SETA
3
;由变量Counter控制循环次数
……
WHILE Counter < 10 指令序列
WEND
3、 MACRO、MEND
语法格式:
MAபைடு நூலகம்RO
$标号宏名 $参数1,$参数2,……
指令序列
MEND
[ {CONFIG} = 16
;[=if,{CONFIG}:build-in variable defined by ARM
;assembler,16=assembing Thumbcode.
THUMBCODE SETL {TRUE} ;SETL:set the logic variable
CODE32 ;changing from Thumb state to Arm state
GBLS Test3
;定义一个全局的字符串变量,变量名为Test3
Test3 SETS "Testing"
;将该变量赋值为"Testing"
ARM 指令系统
2、 LCLA、LCLL和LCLS

第3章ARM汇编语言程序设计精品PPT课件

第3章ARM汇编语言程序设计精品PPT课件
ARM汇编语言程序设计
ARM汇编语言程序设计
ARM汇编的语句格式
汇编语言都具有一些相同的基本特征。 ① 一条指令一行。 ② 使用标号(label)给内存单元提供名称,从第1列
开始书写。 ③ 指令必须从第2列或能区分标号的地方开始书写。 ④ 注释跟在指定的注释字符后面(ARM使用的是
“;”),一直书写到行尾。 ARM汇编语言基本的的语句格式如下:
③ 符号在其作用范围内必须唯一。 ④ 自定义的符号名不能与系统的保留字相同。 ⑤ 符号名不应与指令或伪指令同名。
ARM汇编语言程序设计
ARM汇编语言伪操作
伪操作(Directive)是ARM汇编语言程序里的一些 特殊的指令助记符,其作用主要是为完成汇编程序 做各种准备工作,对源程序运行汇编程序处理,而 不是在计算机运行期间由处理器执行。不同的编译 程序所使用的伪操作有所不同,本书中仅列举在 ARM公司推出的开发工具ADS/SDT中常用的部分伪操 作,如表3-1所示,如有更进一步需要,请查阅编 译工具的技术文档。
ARM汇编语言程序设计
ARM汇编语言伪指令
ARM汇编语言程序设计
ADR伪指令—小范围的地址读取
在汇编编译器编译源程序时,ADR伪指令被编译器替换 成一条合适的指令。通常,编译器用一条ADD指令或SUB 指令来实现该ADR伪指令的功能,若不能用一条指令实 现,则产生错误,编译失败。ADR伪指令中的地址是基 于PC或寄存器的,当ADR伪指令中的地址是基于PC时, 该地址与ADR伪指令必须在同一个代码段中。
示例:
LDR r1,=0xff ; 将0xff读取到r1中
; 编译后得到MOV r1,0xff
示例:
LDR r1, =ADDR ; 将外部地址ADDR读取到R1中

汇编语言程序格式

汇编语言程序格式

1.2汇编语言程序的段定义
DATA_SEG1 SEGMENT PARA
DATA_SEG1 ENDS
DATA_SEG2 SEGMENT PARA
…….
DATA_SEG2 ENDS
E_SEG1
SEGMENT PARA
……..
ቤተ መጻሕፍቲ ባይዱ
E_SEG1
ENDS
E_SEG2
SEGMENT PARA
……..
E_SEG2
ENDS
ENDP 说明:过程属性项省略,系统默认为NEAR,表示段内调用, FAR 过程体至少有一条返回指令RET,RET一般放在过程体的最后。 也可以使用带参数的返回语句,如RET n。
1.3汇编语言源程序过程定义
MY_CODE SEGMENT
UP_COUNT PROC NEAR
ADDCX, 1
RET
UP_COUNT ENDP
1.2 汇编语言程序的段定义
存储器是采用分段管理方式,在编制任意源程序时亦必 须按段来构造程序。按段来构造程序有两种形式:一种是完
1.
NAME TITLE EQU EXTRN PUBLIC SEG1
SEG1 SEG2
SEG2
SEGMENT PARA STACK …… ENDS SEGMENT PARA STACK ; …… ENDS
避免多模块使用不同起始地址,只有主模块使用起始地址, 否则引起程序出错。
1.4标准程序前奏
Code_SREG1 SEGMENT‘CODE’ ASSUME CS:Code_SREG1…
MAIN PROC FAR ……… RET
MAIN ENDP Code_SREG1 ENDS
END MAIN Code_G2 SEGMENT ‘CODE’

第10讲_第5章ARM汇编语言程序指示符与语句格式 101页

第10讲_第5章ARM汇编语言程序指示符与语句格式 101页
2008年10月23日 南京大学计算机系 2
本讲主要参考文献
ARM公司英文资料: 公司英文资料: 公司英文资料
ADS_AssemblerGuide_B.pdf DDI0100E_ARM_ARM.pdf
中文图书
《ARM体系结构与编程》,清华大学出版社 《嵌入式系统基础教程》,机械工业出版社
2008年10月23日
2008年10月23日
南京大学计算机系
22
逻辑表达式
逻辑表达式由逻辑常量、逻辑操作符、关系操 作符以及括号组成。取值范围为{FALSE}和 {TRUE}。
2008年10月23日
南京大学计算机系
23
地址标号
当符号代表地址时称为标号(Label)。 以数字开头的标号其作用范围是当前段(没有 使用ROUT指示符时),这种标号又称为局部 标号(Local Label)。
2008年10月23日 南京大学计算机系 13
符号命名和书写规则( 符号命名和书写规则(续)
⑥符号在其作用范围内必须唯一。 ⑦当程序中的符号与指令助记符或者指示符同名时, 用双竖线将符号括起来。如||buffe_a||,这时双竖线 并不是符号的组成部分。 ⑧在ARM汇编语言程序中,所有符号必须在一行的最 左边位置开始书写,即所谓的顶格书写,不允许包 含空格或者制表符。 ⑨符号的字符序列中不能大小写字母相混杂。
2008年10月23日 南京大学计算机系 17
逻辑值常量
布尔常量TRUE和FALSE在表达式中写为: {TRUE},{FALSE}。
2008年10月23日
南京大学计算机系
18
表达式
ARM汇编语言中的表达式由符号、数值、单 目操作符、双目操作符以及括号组成。运算的 优先级次序与标准C一样。

ARM汇编语言程序格式

ARM汇编语言程序格式

ARM汇编语⾔程序格式可执⾏映象⽂件的格式: *.axm *.bin *.elf *.hex代码段⽰例:汇编语⾔源程序的基本结构:AREA Init,CODE,READONLYENTRYStartLDR R0,=0x3FF50000LDR R1,0xFFSTR R1,[R0]LDR R0,=0x3FF5008LDR R1,0x01STR R1,[R0]ENDArm 体系结构3种执⾏流程:1 顺序执⾏2 跳转执⾏3 异常中断执⾏Arm ⼦程序调⽤使⽤命令BL ⼦程序名称⼦程序调⽤⽰例:AREA Init ,CODE ,READONLYENTRYStartLDR R0 ,=0x3FF5000LDR R1 ,0xFFSTR R1 ,[R0]其中:如果⼀⾏中有多个汇编指令,指令之间使⽤分号(;)分开。

在⼀条指令占多⾏,要使⽤续⾏符号(\).在C/C++程序中内嵌汇编指令注意事项:必须⼩⼼使⽤物理寄存器,如R0~R3,SP,LR 和CPSR 中的N,Z,C,V 标志位.因为计算汇编代码中的C 表达式时,可能会使⽤这些物理寄存器,并会修改N,Z,C,V标志位。

__asm{MOV R0,xADD y,R0,x/y //计算x/y 时R0 会被修改}在计算x/y 时R0 会被修改,从⽽影响R0+x/y 的结果.⽤⼀个C 程序的变量代替R0就可以解决这个问题:__asm{MOV var,xADD y,var,x/y}内嵌汇编器探测到隐含的寄存器冲突就会报错.不要使⽤寄存器代替变量.尽管有时寄存器明显对应某个变量,但也不能直接使⽤寄存器代替变量.int bad_f(int x) //x 存放在R0 中{__asm{ADD R0,R0,#1 //发⽣寄存器冲突,实际上x 的值没有变化}return(x);尽管根据编译器的编译规则似乎可以确定R0 对应x,但这样的代码会使内嵌汇编器认为发⽣了寄存器冲突.⽤其他寄存器代替R0 存放参数x,使得该函数将x 原封不动地返回.这段代码的正确写法如下:int bad_f(intx){__asm{ADD x,x,#1}return(x)}从汇编程序中访问C程序变量在C程序中声明的全局变量可以被汇编程序通过地址间接访问。

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

AREA指示符用于定义一个代码段或者数据段。

语法格式 AREA sectionname{,attr}{,attr}.... 其中: sectionname为所定义的代码段或者数据段的名称。 如果该名称是以数字开头的,则该名称必须用“|” 括起来,如|1_datasec|。还有一些代码段具有约 定的名称,如|.text|表示C语言编译器产生的代码 段或者是与C语言库相关的代码段。 Attr是该代码段(或者程序段)的属性。 在AREA指示符中,各属性间用逗号隔开。


2018/9/14
ARM汇编语句格式和程序格式进阶
1
本讲主要参考文献

ARM公司英文资料:

ADS_AssemblerGuide_B.pdf DDI0100E_ARM_ARM.pdf 《ARM体系结构与编程》,清华大学出版社 《嵌入式系统基础教程》,机械工业出版社

中文图书


2018/9/14
4
5.4.2 数据定义指示符

数据定义(Data definition)指示符包括以下的指示符:


LTORG 声明一个数据缓冲池(literal pool)的开始; MAP 定义一个结构化的内存表(storage map)的首地址; FIELD 定义结构化的内存表中的一个数据域(field); SPACE 分配一块内存单元,并用0初始化; DCB 分配一段字节的内存单元,并用指定的数据初始化; DCD及DCDU 分配一段字的内存单元,并用指定的数据 初始化; DCDO 分配一段字的内存单元,并将单元的内容初始化 成该单元相对于静态基值寄存器的偏移量。
7
2018/9/14
5.4.4 信息报告指示符

信息报告(Reporting)指示符包括下列指示符:



ASSERT 在汇编编译器对汇编程序的第二趟扫描中,如果其 中的ASSERTION中条件不成立,ASSERT伪操作 将报告该错误信息。 INFO 支持第一二趟汇编扫描时报告诊断信息。 OPT TTL及SUBT
12
2018/9/14
AREA的属性(续)



COMMON 定义一个通用的段。该段不包含任何用户 代码和数据,连接器将其初始化为0。各源文件中同 名的COMMON 段公用同样的内存单元,连接器为起 分配合适的尺寸。 DATA 定义数据段。默认属性为READWRITE。 NOINIT 指定本数据段仅仅保留了内存单元,而没有 将各初始值写入内存单元,或者将个内存单元值初始 化为0。 READONLY 指定本段为只读,代码段的默认属性为 READONLY。 READWRITE 指定本段为可读可写,数据段的默认 属性为READWRITE。
5
2018/9/14
数据定义指示符(续)






2018/9/14
DCFD及DCFDU 分配一段双字的内存单元,并用双精 度的浮点数据初始化。 DCFS及DCFSU 分配一段字的内存单元,并用单精度 的浮点数据初始化。 DCI 分配一段字节的内存单元,用指定的数据初始化, 指定内存单元中存放的是代码,而不是数据。 DCQ及DCQU 分配一段双字的内存单元,并用64位的 整数数据初始化。 DCW及DCWU 分配一段半字的内存单元,并用指定 的数据初始化。 DATA 在代码段中使用数据。现已不再使用,仅用于 保持向前兼容。 6

这些杂类的指示符包括:



ALIGN AREA CODE16及CODE32 END ENTRY EQU EXPORT或GLOBAL
9
2018/9/14
其他的指示符(续)





2018/9/14
EXTERN GET或INCLUDE IMPORT INCBIN KEEP NOFP REQUIRE REQUIRE8及PRESERVE8 RN ROUT


而宏指令则是通过指示符定义的。

2018/9/14
3
5.4.1 符号定义指示符

符号定义(Symbol definition)指示符用于定义 ARM汇编程序中的变量,对变量进行赋值以 及定义寄存器名称。包括以下指示符:


2018/9/14
GBLA,GBLL及GBLS 声明全局变量; LCLA,LCLL及LCLS 声明局部变量; SETA,SETL及SETS 给变量赋值; RLIST 为通用寄存器列表定义名称; CN 为协处理器的寄存器定义名称; CP 为协处理器定义名称; DN及SN 为VFP的寄存器定义名称; FN 为FPA的浮点寄存器定义名称。
5.4.3 汇编控制指示符

汇编控制(Assembly control)指示符包括下面的指 示符:




IF,ELSE及ENDIF 汇编或者不汇编一段源代码 WHILE及WEND 条件重复汇编相同的一段源代码 MACRO及MEND 标识宏定义开始与结束 MEXIT 用于从宏跳转出去
11
2018/9/14
AREA的属性

下面列举主要的属性:

ALIGN=expression。默认的情况下,ELF的代码段 和数据段是4字节对齐的。

Expression可以取0~31的数值,相应的对齐 方式为(2expression)字节对齐。如expression=3 时为8字节对齐。



ASSOC=section。指定与本段相关的ELF段。任何 时候连接section段也必须包括sectionname段。 CODE 定义代码段。默认属性为READONLY。 COMDEF 定义一个通用的段。该段可以包含代码 或者数据。在个源文件中,同名的COMDEF段必 须相同。
第5章 ARM指令集和汇编语言程序

本章主要介绍以下内容:




ARM指令集的基本特点 与Thumb指令集的区别 与x86处理器的区别 ARM指令格式 ARM寻址方式 ARM指令集分类详解 ARM汇编语言的指示符 ARM汇编语言语句格式 ARM汇编语言程序格式 ARM汇编语言程序举例
2
5.4 ARM汇编语言程序的指示符

ARM汇编语言源程序中语句由指令、指 示符和宏指令组成。 在ARM中将directive称做指示符

ARM的指示符指令相当于x86的伪指令 ARM指令集中只有4条伪指令 使用MACRO和 MEND指示符
在ARM中pseudo-instruction被称为伪指令
相关文档
最新文档