第10讲_第5章ARM汇编语言程序指示符与语句格式 101页-5
ARM汇编手册
![ARM汇编手册](https://img.taocdn.com/s3/m/67b9dbfc700abb68a982fbb9.png)
ARM 汇编手册
版权声明
本手册为北京顶嵌开源科技有限公司内部培训资料,仅 供本公司内部学习使用,在未经本公司授权的情况下,请勿 用作任何商业用途。
400-661-5264
专注嵌入式 Linux 技术
北京顶嵌开源科技有限公司
目录
寄存器装载和存储.............................................................................................................................5 传送单一数据.............................................................................................................................5 传送多个数据.............................................................................................................................7 SWP : 单一数据交换................................................................................................................ 9
乘法指令........................................................................................................................................... 19 MLA : 带累加的乘法..............................................................................................................19 MUL : 乘法..............................................................................................................................19
arm 汇编 指令
![arm 汇编 指令](https://img.taocdn.com/s3/m/84d4985cfe00bed5b9f3f90f76c66137ee064f07.png)
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汇编语言格式](https://img.taocdn.com/s3/m/ce56352b59fafab069dc5022aaea998fcc2240dc.png)
arm汇编语言格式
ARM汇编语言是一种底层的程序设计语言,用于编写针对ARM
架构的机器码指令。
ARM汇编语言的格式包括以下几个方面:
1. 注释,注释用于解释代码的作用和功能,以分号(;)开头。
注释对于代码的可读性和理解很重要。
2. 指令,指令是汇编语言的核心部分,用于执行特定的操作。
指令可以包含操作码(opcode)和操作数(operand)。
操作码指定
要执行的操作,操作数提供操作所需的数据。
3. 标号,标号用于标识代码的位置或跳转目标。
标号以英文字母、数字和下划线组成,以冒号(:)结尾。
4. 寄存器,ARM架构有一组通用寄存器,用于存储和处理数据。
寄存器以英文字母r开头,后跟一个数字,表示寄存器的编号。
例如,r0表示第一个通用寄存器,r1表示第二个通用寄存器,依此类推。
5. 操作数,操作数可以是立即数(immediate)、寄存器、内
存地址等。
立即数是直接出现在指令中的数值,寄存器是存储数据的容器,内存地址是存储器中数据的位置。
6. 伪指令,伪指令是用于辅助程序开发的指令,不会被转化为机器码。
伪指令以句点(.)开头,常用的伪指令有定义数据段、定义代码段、定义常量等。
7. 指令格式,ARM汇编语言的指令格式通常包括操作码、目的寄存器、源操作数和条件码。
具体的指令格式会根据不同的指令而有所不同。
总结起来,ARM汇编语言的格式包括注释、指令、标号、寄存器、操作数、伪指令和指令格式。
这些元素共同构成了ARM汇编语言的语法规则,通过合理的组合和使用,可以编写出有效的ARM汇编代码。
arm汇编指令格式
![arm汇编指令格式](https://img.taocdn.com/s3/m/0006f8133d1ec5da50e2524de518964bcf84d203.png)
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语言程序设计基础](https://img.taocdn.com/s3/m/7d4de54c48d7c1c708a14556.png)
示例 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的汇编 标准](https://img.taocdn.com/s3/m/f1125c1fbf23482fb4daa58da0116c175e0e1e5e.png)
arm的汇编标准
ARM的汇编语言规范如下:
1. 汇编语句格式:在ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。
2. 标识符大小写:ARM汇编器对标识符大小写敏感,书写标号及指令时字
母大小写要一致,一个ARM指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用。
3. 注释:注释使用“;”,注释内容由“;”开始到此行结束,注释可以在一行的顶格书写。
4. 格式:格式为[标号] <指令条件S> <操作数>[;注释]。
5. 空行和换行:源程序中允许有空行,适当地插入空行可以提高源代码的可读性。
如果单行太长,可以使用字符“”将其分行,“”后不能有任何字符,包括空格和制表符等。
6. 变量和常量:对于变量的设置,常量的定义,其标识符必须在一行的顶格书写。
以上就是ARM汇编的一些规范,供您参考。
如果需要更多信息,建议查阅相关书籍或咨询专业人士。
汇编语言课程课件-第五章
![汇编语言课程课件-第五章](https://img.taocdn.com/s3/m/87bdf6bf5f0e7cd185253651.png)
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](https://img.taocdn.com/s3/m/41f5572d0740be1e640e9a26.png)
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汇编语言编程](https://img.taocdn.com/s3/m/d40330818e9951e79a892762.png)
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汇编语言程序设计](https://img.taocdn.com/s3/m/317e730ba22d7375a417866fb84ae45c3b35c2cc.png)
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页](https://img.taocdn.com/s3/m/487d74d149649b6648d747ff.png)
本讲主要参考文献
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汇编语言程序设计基础课件](https://img.taocdn.com/s3/m/640b0d50eef9aef8941ea76e58fafab069dc44c3.png)
在整堂课的教学中,刘教师总是让学 生带着 问题来 学习, 而问题 的设置 具有一 定的梯 度,由 浅入深 ,所提 出的问 题也很 明确
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汇编语言简介一](https://img.taocdn.com/s3/m/2c4d5e3b1611cc7931b765ce05087632311274cc.png)
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](https://img.taocdn.com/s3/m/c0f3d668910ef12d2bf9e70d.png)
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
字符串表达式