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

合集下载

ARM汇编手册

ARM汇编手册
北京顶嵌开源科技有限公司
ARM 汇编手册
版权声明
本手册为北京顶嵌开源科技有限公司内部培训资料,仅 供本公司内部学习使用,在未经本公司授权的情况下,请勿 用作任何商业用途。

400-661-5264
专注嵌入式 Linux 技术
北京顶嵌开源科技有限公司
目录
寄存器装载和存储.............................................................................................................................5 传送单一数据.............................................................................................................................5 传送多个数据.............................................................................................................................7 SWP : 单一数据交换................................................................................................................ 9
乘法指令........................................................................................................................................... 19 MLA : 带累加的乘法..............................................................................................................19 MUL : 乘法..............................................................................................................................19

arm 汇编 指令

arm 汇编 指令

arm 汇编指令ARM汇编指令是一种用于编写ARM处理器程序的语言。

ARM处理器广泛应用于嵌入式系统和移动设备等领域。

ARM汇编指令与x86汇编指令有所不同,它基于RISC(精简指令集计算机)架构。

下面是一些基本的ARM汇编指令:1. 数据传输指令:用于在寄存器之间传输数据。

例如:- mov:将数据从一个寄存器传输到另一个寄存器。

- ldr:将数据从内存传输到寄存器。

2. 算术指令:用于执行加法、减法、乘法和除法等操作。

例如:- add:加法操作。

- sub:减法操作。

- mull:乘法操作。

- div:除法操作。

3. 逻辑指令:用于执行逻辑操作,如与、或、非等。

例如:- and:与操作。

- or:或操作。

- xor:异或操作。

4. 移位指令:用于对数据进行左移、右移或无符号右移。

例如:- lsr:无符号右移。

- asr:带符号右移。

- ror:循环右移。

5. 比较指令:用于比较两个寄存器的值。

例如:- cmp:比较两个寄存器的值,若相等则返回0,否则返回1。

6. 跳转指令:用于改变程序的执行流程。

例如:- b:条件跳转。

- bl:无条件跳转。

- bx:带状态跳转。

7. 循环指令:用于实现循环操作。

例如:- loop:内部循环。

- ldp:外部循环。

8. 调用指令:用于实现函数调用。

例如:- blx:带状态调用。

- bx:不带状态调用。

9. 系统调用指令:用于实现与操作系统交互的功能。

例如:- swi:执行系统调用。

10. 存储器访问指令:用于访问内存数据。

例如:- str:将数据存储到内存。

- ldr:从内存中加载数据。

以上仅为ARM汇编指令的一部分,实际上,ARM汇编指令还有很多其他功能。

为了更好地理解和使用ARM汇编指令,可以参考相关的教程和手册,并进行实际操作。

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)是指令的第二个操作数,可以是立即数、寄存器的偏移值、寄存器的移位值等。

ARM汇编语言及C语言程序设计基础

ARM汇编语言及C语言程序设计基础

示例 CMP ADD ADD 示例 CMP BHI ADD END
R1,#3 ;比较R1和#3 HI R0,R0,R1 ;if R1>3 then R0=R0+R1 LS R0,R0,#3 ;if R1<3 then R0=R0+3
R1,#3 ;比较R1和#3 END ;if R1>3 then END R0,R0,#3 ; R0=R0+3
4.1.3 ARM汇编语言伪指令

伪指令是ARM处理器支持的汇编语言程序 里的特殊助记符,它不在处理器运行期间由机器执 行,只是在汇编时将被合适的机器指令代替成ARM 或Thumb指令,从而实现真正的指令操作。
ARM汇编语言伪指令如表3-2所示

表4-2 ARM汇编语言伪指令列表
伪指令 语法格式 ADR{cond} register, = expression ADRL{cond}register , = expression LDR{cond} register,= expression NOP 功能 它将基于PC相对偏移的地址值或 基于寄存器相对偏移的地址值读 取到寄存器中。 它将基于PC相对偏移的地址值或 基于寄存器相对偏移的地址值读 取到寄存器中。 将一个32位的常数或者一个地址 值读取到寄存器中,可以看作是 加载寄存器的内容。 NOP是空操作伪指令,在汇编时 将会被替代成ARM中的空操作
AREA BlkCpy,CODE,READONLY ;声明代码段 SWI_WriteC EQU &0 ;输出R0中的字符 SWI_Exit EQU &11 ;程序结束 ENTRY ;代码的入口 ADR R1,TABLE1 ;R1→TABLE1 ADR R2,TABLE2 ;R2→TABLE2 ADR R3,T1END ;R3→T1END LOOP1 LDR R0,[R1],#4 ;读取TABLE1的第一个字 STR R0,[R2],#4 ;拷贝到TABLE2 CMP R1,R3 ;结束? BLT LOOP1 ;若非,则再拷贝 ADR R1,TABLE2 ;R1→TABLE2 LOOP2 LDRB R0,[R1],#1 ;读取下一个字 CMP R0,#0 ;检查文本终点 SWINE SWI_WriteC ;若非终点,则打印 BNE LOOP2 ;并返回LOOP2 SWI SWI_Exit ;执行结束 TABLE1 = “This is the right string!”,&0a,&0d,0 T1END ALIGN ;保证字对准 TABLE2 = “This is the wrong string!”,0 END ;程序源代码结束

arm的汇编 标准

arm的汇编 标准

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

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

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

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

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

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

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

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

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

汇编语言课程课件-第五章

汇编语言课程课件-第五章

MOV reg/mem,imm
例题5-1
MOV reg/me;m/立se即g,数re送g寄存器例或题主5-存2
MOV;r寄eg存/s器eg送,m(em段)寄存器例或题主5存-3
MOV reg/mem;,s主eg存送(段)例寄题存5器-5 ;段寄存器送寄存器或主存
交换指令XCHG(exchange)
; 字节数组访问 mov al,arrayB mov al,[arrayB+1] mov al,[arrayB+2] ; 字数组访问 mov ax,arrayW mov ax,[arrayW+2]
; AL = 10h ; AL = 20h ; AL = 30h
; AX = 100h ; AX = 200h
在保护模式下,LDS指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
寄存器。
实模式下,LES指令将主 存 中 mem 指 定 的 字 送 至 r16,并将mem的下一字 送DS寄存器。
在保护模式下,LES指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
5.2.1 加法指令
执行双字,字或字节的加法运算。
ADD ADC INC
加法指令ADD
ADD指令将源与目的操作数相加,结 果送到目的操作数 ADD指令按状态标志的定义相应设置
例题5-12
ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem
ADD mem,imm/reg ;mem←mem+imm/reg
把两个地方的数据进行互换
XCHG reg,reg/mem ;reg reg/mem

第五讲-ARM汇编语言程序设计.ppt

第五讲-ARM汇编语言程序设计.ppt

LCLA num1 LCLS str3
num1 SETA str3 SETS

0x1234;

“Hello!”;
变量代换


如果在字符串变量的前面有一个$字符,在汇编时编 译器将用该字符串变量的内容代替该串变量。 例:

LCLS LCLS str1 str2
str1 str2 SETS “book” SETS “It is a $str1”
ARM 的指令系统
授课教师:蔡卫明 E-mail:caiwm@ 二O一一年八月 杭州汇文教育咨询有限公司
ARM源程序文件
文件类型 扩展名 .s .c
使用简单的 文本编辑器或 者其他的编程 开发环境进行 编辑.

汇编语言文件 C语言源文件
C++源文件
引入文件 头文件
.cpp
.INC .h
1 汇编语言源程序格式


1.1 汇编语言程序的结构
汇编源程序示例1(test0源程序)
汇编源程序示例2
汇编源程序示例3



ARM 的汇编语言程序一般由几个段组成,每 个段均由AREA伪操作定义。 段可以分为多种,如代码段、数据段、通用 段,每个段又有不同的属性,象代码段的默 认属性为 READONLY,数据段的默认属性为 READWRITE。 本程序定义了两个段,
伪指令





没有相对应的操作码或者机器码,通常称为伪 指令,它们所完成的操作称为伪操作。 作用是为完成汇编程序作各种准备工作的,由 汇编程序在源程序的汇编期间进行处理,仅在 汇编过程中起作用。 符号定义伪指令 数据定义伪指令 汇编控制伪指令

第五章 ARM汇编语言编程

第五章 ARM汇编语言编程

DCD
语法
标号 DCD 表达式
作用
分配一片连续的字存储单元并用指示符中指定 的表达式初始化。其中,表达式可以为程序标号 或数字表达式。DCD也可用“&”代替。
实例
DataTest
DCD 4, 5, 6
SPACE
语法 标号 SPACE 表达式
作用 分配一片连续的存储区域并初始化为0。其中,
表达式为要分配的字节数。SPACE也可用“%”代 替。 实例
数据处理指令
立即数操作
ADD r3,r3,#1
;r3:=r3+1
AND r8,r7,#&ff
;r8:=r7[7:0]
立即数通过“#”表示,且在32位指令中 编码,编码方式为:
立即数=(0-255)×22n 0≤n≤12
数据处理指令
寄存器移位操作
ADD r3,r2,r1,LSL #3
;r3:=r2+8×r1
;r0:=r1+r2
ADC r0,r1,r2
;r0:=r1+r2+C
SUB r0,r1,r2
;r0:=r1-r2
SBC r0,r1,r2
;r0:=r1-r2+C-1
RSB r0,r1,r2
;r0:=r2-r1
RSC r0,r1,r2
;r0:= r2-r1+C-1
数据处理指令
按位逻辑操作
对输入操作数的对应位进行指定的布尔逻 辑操作
STMIB R0!,{R1-R7} ;将R1~R7的数据保存到存储器中。 ;存储指针在保存第一个值之前增加, ;增长方向为向上增长。
多寄存器传送指令映射
增长的方之后
减少

arm汇编语言程序设计

arm汇编语言程序设计

arm汇编语言程序设计ARM汇编语言程序设计一、引言ARM汇编语言是一种低级语言,用于编写底层程序,如操作系统、嵌入式系统等。

它具有高效、灵活、可移植等特点,被广泛应用于各种嵌入式设备中。

本文将介绍ARM汇编语言程序设计的基本概念、语法规则以及常用指令,以帮助读者快速入门和理解该领域的知识。

二、基本概念1. 寄存器:ARM处理器具有16个通用寄存器,分别用R0~R15表示。

这些寄存器用于存储数据、地址和中间结果,并且在程序执行过程中可以被读取和写入。

2. 指令:ARM汇编语言的指令包括数据处理指令、分支指令、加载存储指令等。

这些指令用于执行各种操作,如算术运算、逻辑运算、条件判断等。

3. 标志位:ARM处理器的标志位用于记录执行过程中的状态信息,如进位标志、溢出标志等。

这些标志位对于程序的正确执行非常重要。

三、语法规则1. 指令格式:ARM汇编指令由操作码和操作数组成,其中操作码表示指令的类型,操作数表示指令的操作对象。

指令格式一般为“操作码操作数1, 操作数2, ...”。

2. 注释:注释以分号开头,用于对指令进行解释和说明。

注释对于程序的可读性和维护性非常重要,应当充分利用。

3. 标签:标签用于标识程序中的某个位置或标记某个指令,以便在其他地方进行引用。

标签一般以英文字母开头,后面可以跟随数字或下划线等字符。

4. 伪指令:伪指令是一种特殊指令,用于约定程序的起始地址、存储空间的分配等。

伪指令一般以句点开头,如“.data”表示数据段,“.text”表示代码段。

四、常用指令1. 数据处理指令:数据处理指令用于进行算术运算、逻辑运算等操作。

例如,“ADD”指令用于将两个操作数相加,并将结果存放在目标寄存器中。

2. 分支指令:分支指令用于实现程序的跳转和循环等控制流程。

例如,“B”指令用于无条件跳转到指定标签处执行。

3. 加载存储指令:加载存储指令用于实现数据的读取和写入。

例如,“LDR”指令用于将指定地址处的数据加载到寄存器中。

第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汇编语言程序设计基础课件

在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
4.1.1 一个简单的ARM汇编程序例子
3
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
4.2.1 顺序程序
顺序程序是一种最简单的程序结构,它按照语句编写的顺序从上往下执 行,直到最后退出程序。
❖ 例4-2:计算100-50,结果存放到R1寄存器中。
开始
初始化以下内容 R1 = 100 R2 = 50
R1 = R1 + R2
结束
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
❖ 字符串只能用DCB定义。
num_b
0x48(‘ H’ ) 0x65(‘ e’ ) 0x6C(‘ l’ ) 0x6C(‘ l’ ) 0x6F(‘ o’ ) 0x20(‘ ’ ) 0x57(‘ W’ ) 0x6F(‘ o’ ) 0x72(‘ r’ ) 0x6C(‘ l’ ) 0x64(‘ d’ ) 0x21(‘ !’ )
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
目录
❖4.1 ARM汇编语言的程序结构 ❖4.2 ARM汇编语言程序设计 ❖4.3 C与汇编混合编程 ❖ 本章小结
1
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确

ARM汇编语言简介一

ARM汇编语言简介一

ARM汇编语言简介一ARM汇编语言是一种低级编程语言,用于编写针对ARM处理器的程序。

在本文中,我们将介绍ARM汇编语言的基本概念、语法规则和一些常用指令。

一、ARM汇编语言的概述ARM汇编语言是一种面向ARM处理器的低级语言。

它与高级语言(如C、C++)相比,更加接近机器语言,并且直接操作硬件。

使用ARM汇编语言编写的程序可以直接调用底层硬件资源,具有高效性和灵活性的特点。

二、ARM汇编语言的语法规则1. 注释:在ARM汇编语言中,以分号(;)开头的内容被认为是注释,不会被计算机执行。

注释用于标明代码的作用、解释代码的功能等,提高代码的可读性。

2. 指令:ARM汇编语言的指令由助记符(mnemonic)和操作数(operand)组成。

助记符表示特定的指令操作,操作数指定了指令操作的具体对象。

3. 寄存器:ARM处理器具有16个通用寄存器,用于存储数据和地址。

这些寄存器通常用r0-r15表示,其中r0-r12为通用寄存器,r13为堆栈指针寄存器(SP),r14为链接寄存器(LR),r15为程序计数器(PC)。

4. 伪指令:ARM汇编语言中还包含一些伪指令(pseudo-instruction),这些指令并不被处理器直接执行,而是由汇编器(assembler)进行处理。

伪指令通常用于定义数据、声明变量、控制程序的组织结构等。

三、ARM汇编语言的常用指令1. 数据传输指令:数据传输指令用于在寄存器和内存之间传输数据。

常见的数据传输指令包括LDR(加载数据到寄存器)、STR(存储数据到内存)、MOV(将数据从源寄存器复制到目标寄存器)等。

2. 算术运算指令:算术运算指令用于执行基本的算术运算,如加法、减法、乘法和除法。

常见的算术运算指令包括ADD(加法)、SUB(减法)、MUL (乘法)等。

3. 逻辑运算指令:逻辑运算指令用于执行逻辑运算,如与、或、异或、移位等。

常见的逻辑运算指令包括AND(与运算)、ORR(或运算)、EOR(异或运算)、LSL(逻辑左移)等。

ARM汇编语言程序标准和范例PPT

ARM汇编语言程序标准和范例PPT
寄存器R12用作过程调用中间临时寄存器,记作IP。 在子程序之间的连接代码段中常常有这种使用规则。
2008年10月23日
8
寄存器的使用规则(续)
寄存器R13用作堆栈指针,记作SP。在子程序中寄存 器R13不能用作其他用途。寄存器SP在进入子程序时 的值和退出子程序时的值必须相等。
寄存器R14称为连接寄存器,记作LR。它用于保存子 程序的返回地址。如果在子程序中保存了返回地址, 寄存器R14则可以用作其他用途。
;void routine2(int 2);
AREA LOAD, CODE, READONLY
IMPORT routine1
IMPORT routine2
EXPORT load
load
stmfd r13!, {r4, r14}
ldr r4, = routine1 ;首先将32位地址存放在附近的区域
cmps r0, #1
MOV r1, #3
;R1设置输入参数
BL doadd
;调用子程序doadd
doadd
ADD r0, r0, r1 MOV pc,lr
;子程序实体 ;从子程序中返回
END
2008年10月23日
27
5.8.5 循环结构
在ARM汇编中,没有专门的指令用来实现循环,一 般通过跳转指令加条件码的形式来实现。可以采用 比较指令CMP或者减法指令SUB等实现。参看下面 的指令段:
2008年10月23日
18
5.8.1 条件执行举例
求a和b两整数最大公约数的C程序
While a!=b) {
If(a>b) a-=b; else b-=a; }
2008年10月23日
19
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

21
数字表达式

数字表达式由数字常量、数字变量、操作符和 括号组成。数字表达式表示的是一个32位数的 整数,其取值范围为0~232-1;当作为有符号数 时,其取值范围为-231~231-1。 汇编器对-n和232-n不做区别,汇编时对关系运 算符采用无符号数方式处理,这就意味着 0>-1 是{FALSE}。
嵌入式系统结构与设计基础
第10讲 合肥工业大学计算机与信息学院 史久根
第5章 ARM指令集和汇编语言程序

本章主要介绍以下内容:


2014-9-13
ARM指令集的基本特点 与Thumb指令集的区别 与x86处理器的区别 ARM指令格式 ARM寻址方式 ARM指令集分类详解 ARM汇编语句格式和程序格式 ARM汇编语言的指示符 ARM汇编程序标准与规范 典型ARM汇编语言程序举例
2014-9-13 合肥工业大学计算机与信息学院 17
逻辑值常量

布尔常量TRUE和FALSE在表达式中写为: {TRUE},{FALSE}。
2014-9-13
合肥工业大学计算机与信息学院
18
表达式

ARM汇编语言中的表达式由符号、数值、单 目操作符、双目操作符以及括号组成。运算的 优先级次序与标准C一样。

对应的中文语句格式描述是:
{ 符号 } { 指令 | 指示符 | 伪指令 } { ;注释 }

语句格式中,花括号括起来的部分表示可以省 略;竖线分隔的字段表示可以替换。
2014-9-13
汇编语言程序中的符号

ARM汇编语句中的符号可以是指令地址或标 号、变量、常量和局部标号,符号属性可以是 程序相关的、寄存器相关的或者是绝对地址。 在符号中,有程序相关的指示符,例如:DCB、 DCD等;有寄存器相关的指示符,例如: MAP、SPACE、DCDO等;还有绝对地址。绝 对地址是范围在232-1的整数常数,直接用来表 示地址。
⑤符号不能够与系统内部变量或者系统预定义的符号同名。例 如:a1 or R0、sp、cpsr、{PC} or .、{VAR} or @、 {CONFIG}、{CPU}等等。 2014-9-13 13 合肥工业大学计算机与信息学院
符号命名和书写规则(续)
⑥符号在其作用范围内必须唯一。 ⑦当程序中的符号与指令助记符或者指示符同名时, 用双竖线将符号括起来。如||buffe_a||,这时双竖线 并不是符号的组成部分。


其编译结果是:字符串‚This is character of ””被赋值 给strtwo变量。
2014-9-13 合肥工业大学计算机与信息学院 16
$$在汇编语句中的使用举例
GBLS add4ff add4ff SETS "ADD r4,r4,#0xFF" ; set up add4ff $add4ff.00 ; invoke add4ff ; this produces ; ADD r4,r4,#0xFF00 ; elaborate substitution GBLS s1 GBLS s2 GBLS fixup GBLA count count SETA 14 s1 SETS "a$$b$count" ; s1 now has value a$b0000000E s2 SETS "abc" Fixup SETS "|xy$s2.z|" ; fixup now has value |xyabcz| |C$$code| MOV r4,#16 ; but the label here is C$$code
⑧在ARM汇编语言程序中,所有符号必须在一行的最 左边位臵开始书写,即所谓的顶格书写,不允许包 含空格或者制表符。 ⑨符号的字符序列中不能大小写字母相混杂。
2014-9-13
合肥工业大学计算机与信息学院
14
数字常量

ARM汇编语言中使用到的常量可以是数字常 量、字符常量、字符串常量和布尔常量。 数字常量有以下3种表示方式:
1)十进制数,如:535,246。 2)十六进制数,如:0x645,0xff00。 3)n进制数,格式为n_XXX,其中n表示n进制,从 2~9,XXX是具体的数字。 例如:8_3777,8_5237702

2014-9-13
合肥工业大学计算机与信息学院
15
字符常量

字符常量由一对单引号括起来,包括一个单字符或者 标准C中的转义字符。 例如:’A’,’\n’。 字符串常量由一对双引号以及由它括住的一组字符串 组成,包括标准C中的转义字符。如果需要使用双引 号或字符$,则必须用‛‛和$$代替。 例如执行语句:strtwo SETS “This is character of ”””
内部变量
{PC} or . {VAR} or @ {TRUE} {FALSE} 当前指令地址 内存区位置计数器的当前值 逻辑值真 逻辑值假
描述
{CONFIG}
{ENDIAN} {CPU} {ARCHITECTU RE} 2014-9-13 {CODESIZE}
汇编器如果在汇编ARM指令,取值为32,如果汇编 Thumb指令,取值16
预定义寄存器名 a1-a4 v1-v8 sb and SB sl and SL fp and FP 描述 入口参数,处理结果,暂存寄存器;r0-r3 的同义词 变量寄存器,r4-r11 静态基址寄存器,r9 栈界限寄存器,r10 帧指针寄存器,r11
r0-r15 and R0-R15 ARM处理器的通用寄存器
合肥工业大学计算机与信息学院 5
2014-9-13
预定义寄存器名及内部变量名

ARM汇编器中将几十个寄存器名称作为保留 字预先给与了定义,这些预定义寄存器名都是 大小写敏感的,它们都与具体的寄存器一一对 应。参看下面的表格。
2014-9-13
合肥工业大学计算机与信息学院
6
ARM公司ADS预定义的寄存器名一 览表
f0-f7 and F0-F7
s0-s31 and S0-S31 d0-d15 and D0-D15 p0-p15
2014-9-13
浮点数运算加速寄存器
单精度向量浮点数运算寄存器 双精度向量浮点数运算寄存器 协处理器0-15 协处理器寄存器0-15
合肥工业大学计算机与信息学院 8
c0-c15
ARM汇编语言程序的部分内部变量 名清单
ip and IP
2014-9-13
内部过程调用暂存寄存器,r12
合肥工业大学计算机与信息学院 栈指针寄存器, r13 7
sp and SP
ARM公司ADS预定义的寄存器名 一览表(续)
预定义寄存器名 lr and LR pc and PC cpsr and CPSR spsr and SPSR 连接寄存器,r14 程序寄存器,r15 当前程序状态寄存器 保存的程序状态寄存器 描述
合肥工业大学计算机与信息学院 20
2014-9-13
ARM汇编语言中的字符串操作符
操作符 功能
LEN 返回字符串的 长度
将一个数字量 变换为串
操作符 功能
CHR 将0~255之间整数变为 单个字符
返回字符串的左子串
STR
LEFT
RIGHT
返回字符串的 右子串
CC
连接两个字符串
2014-9-13
合肥工业大学计算机与信息学院
GBLL THUMBCODE ; 设臵一个全局逻辑变量 [ {CONFIG} = 16 ; if config==16 这里表示处于16位编译方式 THUMBCODE SETL {TRUE} ; 设臵THUMBCODE 为 true CODE32 ; 转入32位编译模式 | ; else THUMBCODE SETL {FALSE} ; 设臵THUMBCODE 为 false ] [ THUMBCODE CODE32 ]
2014-9-13
合肥工业大学计算机与信息学院
24
三种类型标号
(1)PC相关标号
(2)寄存器相关标号
(3)绝对地址
2014-9-13
合肥工业大学计算机与信息学院
25
PC相关标号

PC相关标号表示程序计数器加减一个数值常 数后得到的地址值。常用来指明一个分支指 令的目标地址,或者访问嵌入在代码段中的 一个数据项。 具体标记方法是:在汇编语言程序指令的前 面写入标号,或者在一个数据指示符前面写 入标号。通常用DCB或者DCD等指示符定义。
合肥工业大学计算机与信息学院 26

2014-9-13
寄存器相关标号

寄存器标号表示指定寄存器的值加减一个数 值常数后得到的地址值。常常用于访问位于 数据段中的数据。通常用MAP或者FIELD等 指示符定义。
如果汇编器是大端序,则取值big;如果是小端序,则 取值little。 被选择的CPU名称。缺省值是ARM7TDMI。 该变量内容是被选择的ARM体系结构的名称。如:3, 3M, 4T合肥工业大学计算机与信息学院 9 {CONFIG}的同义词
44BINIT.S中使用的 汇编语言部分内部变量名使用范例
2014-9-13 合肥工业大学计算机与信息学院 10
;if THUMBCODE==TRUE ;for start-up code for Thumb mode ;转入32位编译方式
5.4.1 ARM汇编语言程序的语句格式

ARM汇编语言程序的语句格式格式如下:
{ symbol } { instruction | directive | pseudo-instruction } { ;comment }
2014-9-13
合肥工业大学计算机与信息学院
19
字符串表达式
相关文档
最新文档