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
  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被称为伪指令
相关文档
最新文档