ARM指令集学习总结材料
arm原理及编程
arm原理及编程
ARM原理及编程
概述
ARM(Advanced RISC Machines)是一种精简指令集计算机(RISC)架构,由ARM公司开发。ARM架构具有低功耗、高性能和灵活性等特点,广泛应用于移动设备、嵌入式系统和服务器等各个领域。本文将介绍ARM的基本原理以及相关的编程技术。
一、ARM原理
1. RISC架构
ARM采用RISC架构,即精简指令集计算机。RISC架构的特点是指令集精简,指令操作简单,执行速度快,能够高效利用处理器的资源。ARM的指令集包括数据处理指令、分支跳转指令、访存指令等,这些指令的操作对象是寄存器,而不是内存。
2. 寄存器
ARM架构中有一组寄存器,用于存储指令操作的数据。通常,ARM架构有16个通用寄存器,分别用来存储操作数、地址和中间结果等。此外,还有一些特殊寄存器,如程序计数器(PC)、堆栈指针(SP)等。
3. 处理器模式
ARM架构中有多种处理器模式,用于支持不同的操作和特权级别。
常见的模式有用户模式、系统模式和中断模式等。不同的模式下,处理器具有不同的权限和功能,可以执行不同的指令。
4. 存储器管理单元(MMU)
ARM架构中的MMU负责虚拟地址到物理地址的转换,实现内存的管理和保护。MMU通过页表机制将虚拟地址映射到物理地址,提供了地址空间的隔离和保护功能。
二、ARM编程
1. 汇编语言
ARM汇编语言是一种低级语言,用于直接操作处理器的指令和寄存器。通过编写汇编语言程序,可以实现对底层硬件的直接控制。ARM汇编语言的语法简洁清晰,可读性强。
2. C语言
03-ARM指令集
2、ARM 寻址方式 、
共有七种,如下: 共有七种,如下:
立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址
(1)立即寻址 )
操作数本身就在指令中给出, 操作数本身就在指令中给出,只要取出指令也就 取到了操作数,这个操作数被称为立即数, 取到了操作数,这个操作数被称为立即数,对应的寻 址方式也就叫做立即寻址。例如以下指令: 址方式也就叫做立即寻址。例如以下指令: ADD R0,R0,# ,#1 , ,# ;R0←R0+1 + ADD R0,R0,# ,#0x3f , ,# ;R0←R0+0x3f + 以上两指令中第二个源操作数即为立即数, 以上两指令中第二个源操作数即为立即数,要求 以“#”为前缀并声明其进制,如 0x、0d、0b等。 为前缀并声明其进制, 、 、 等 二进制数。 ARM 指令中,立即数都是 32 位二进制数。 指令中,
第二操作数的移位方式: 第二操作数的移位方式: LSL:逻辑左移,空出的最低有效位用0填充。 :逻辑左移,空出的最低有效位用 填充 填充。 LSR:逻辑右移,空出的最高有效位用 填充。 填充。 :逻辑右移,空出的最高有效位用0填充 ASL:算术左移,由于左移空出的有效位用 填充, 填充, :算术左移,由于左移空出的有效位用0填充 它与LSL同义。 同义。 因此 它与 同义 ASR:算术右移,算术移位的对象是带符号数,移位 :算术右移,算术移位的对象是带符号数, 过程中必须保持操作数的符号不变。如果源操作数是正数, 过程中必须保持操作数的符号不变。如果源操作数是正数, 空出的最高有效位用0填充 如果是负数用1填充 填充, 填充。 空出的最高有效位用 填充,如果是负数用 填充。 ROR:循环右移,移出的字的最低有效位依次填入 :循环右移, 空出的最高有效位。 空出的最高有效位。 RRX:带扩展的循环右移。将寄存器的内容循环右 :带扩展的循环右移。 标志位填充。 移1位,空位用原来 标志位填充。 位 空位用原来C标志位填充 见下页示意图 见下页示意图。
ARM汇编指令集
ARM汇编指令集
汇编指令集的介绍,包括指令和伪指令。
指令和概念
指令
指令指的是CPU机器指令的助记符,是由CPU的指令集提供的,经过编译之后,会以机器码的形式由CPU读取执⾏
伪指令
伪指令本质上不是指令,和CPU的机器指令没有任何关系,只是和指令⼀起写在代码中⽽已,是由环境提供的,其⽬的是⽤于指导编译过程,伪指令经过编译后不会⽣成⼆进制机器码,仅仅在编译阶段有效果
指令编程风格
ARM官⽅风格
官⽅风格指令⼀般使⽤⼤写,例如:LDR R0,[R1],Windows中常使⽤这种风格
GUN Linux风格
指令⼀般使⽤⼩写字母,例如:ldr r0,[r1],Linux环境中常⽤这种风格
ARM汇编特点
LDR/STR架构
1. 采⽤RISC架构,CPU本⾝不能直接读取内存,⽽需要把内存中的数据加载到CPU的通⽤寄存器中,才能被CPU处理
2. ldr(load register)将内存中的数据加载到通⽤寄存器
3. str(store register)将寄存器内容存⼊内存空间
4. ldr和str组合,可以实现ARM CPU和内存的数据交换
8种寻址⽅式
1. 寄存器寻址:move r1,r2:把r2的值赋值到r1寄存器中
2. ⽴即寻址:move r0,#0xFF00:把⽴即数0xFF00赋值给r0寄存器
3. 寄存器移位寻址:move r0,r1,lsl #3:把r1左移三位(*8)之后的值赋值给r0寄存器
4. 寄存器间接寻址:ldr r1,[r2]:寄存器有中括号,表⽰内存地址对应的数据,所以这⾥r2表⽰⼀个内存地址,[]表⽰取r2指针
ARM汇编指令集
ARM汇编指令集
一、跳转指令。跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转。
Ⅰ.使用专门的跳转指令。Ⅱ.直接向程序计数器PC写入跳转地址值。
通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用
MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:
1、B指令
B指令的格式为:
B{条件} 目标地址
B指令是最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是24位有符号数,左移两位后有符号扩展为32 位,表示的有效偏移为26 位(前后32MB的地址空间)。以下指令:
B Label ;程序无条件跳转到标号Label处执行
CMP R1,#0 ;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处执行BEQ Label
2、BL指令
BL指令的格式为:
BL{条件} 目标地址
BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令:
BL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14(LR)中
ARM汇编指令集
ARM汇编指令集
ARM处理器是一种广泛使用的微处理器架构,它被广泛应用于手机、数字嵌入式设备和其他许多领域。本文将重点介绍ARM汇编指令集的基础知识和常用的指令集。
ARM指令集
ARM指令集可分为三个不同的版本:ARMv6指令集,ARMv7指令集和ARMv8指令集。最新的ARMv8指令集是对先前版本的扩展,其扩展了指令集,增加了更先进的功能。在本文中,我们将主要关注ARMv7指令集。
ARMv7指令集分类
ARMv7指令集被分为三类: A、R和T系列指令。下面列出了它们的一些主要功能:
•A系列指令集:用于应用程序,包括浮点运算指令。
•R系列指令集:用于实时操作系统,包括分支和比较指令。
•T系列指令集:用于低功耗嵌入式设备。
ARMv7常用指令
下面是一些常用的ARMv7指令:
1.加法指令
ADD Rd, Rn, Operand2
指令将目标寄存器Rd设置为Rn和Operand2的和。
2.减法指令
SUB Rd, Rn, Operand2
指令将目标寄存器Rd设置为Rn减去Operand2的差。
3.逻辑运算指令
AND Rd, Rn, Operand2
ORR Rd, Rn, Operand2
AND指令将目标寄存器Rd设置为Rn与Operand2的按位与。ORR 指令将目标寄存器Rd设置为Rn与Operand2的按位或。
4.移位指令
ASR Rd, Rn, Operand2
LSL Rd, Rn, Operand2
LSR Rd, Rn, Operand2
ROR Rd, Rn, Operand2
这是移位指令的几种不同类型。ASR指令将目标寄存器Rd设置为Rn右移Operand2位之后的值。LSL指令将目标寄存器Rd设置为Rn左移Operand2位之后的值。LSR指令将目标寄存器Rd设置为Rn右移Operand2位之后的值。ROR指令将目标寄存器Rd设置为Rn循环右移Operand2位之后的值。
ARM汇编学习笔记
这两天参加了一个编写操作系统的项目,因为要做很多底层的东西,而且这个操作系统是嵌入式的,所以开始学习ARM汇编,发现ARM汇编和一般PC平台上的汇编有很多不同,但主要还是关键字和伪码上的,其编程思想还是相同的。现将一些学习感悟部分列出来,希望能给有问题的人一点帮助。
1、ARM汇编的格式:
在ARM汇编里,有些字符是用来标记行号的,这些字符要求顶格写;有些伪码是需要成对出现的,例如ENTRY和END,就需要对齐出现,也就是说他们要么都顶格,要么都空相等的空,否则编译器将报错。常量定义需要顶格书写,不然,编译器同样会报错。
2、字符串变量的值是一系列的字符,并且使用双引号作为分界符,如果要在字符串中使用双引号,则必须连续使用两个双引号。
3、在使用LDR时,当格式是LDR r0,=0x022248,则第二个参数表示地址,即0x022248,同样的,当src变量代表一个数组时,需要将r0寄存器指向src 则需要这样赋值:LDR r0,=src 当格式是LDR r0,[r2],则第二个参数表示寄存器,我的理解是[]符号表示取内容,r2本身表示一个寄存器地址,取内容候将其存取r0这个寄存器中。
4、在语句:
CMP r0,#num
BHS stop
书上意思是:如果r0寄存器中的值比num大的话,程序就跳转到stop标记的行。但是,实际测试的时候,我发现如果r0和num相等也能跳转到stop 标记的行,也就是说只要r0小于num才不会跳转。
下面就两个具体的例子谈谈ARM汇编(这是我昨天好不容易看懂的,呵呵)。
arm架构指令集
arm架构指令集
ARM架构是一种基于RISC(Reduced Instruction Set Computing)的计算机处理器架构,它被广泛应用于移动设备、嵌入式系统、网络
设备等领域。ARM指令集是ARM架构的核心部分,它定义了处理器如何执行指令以及如何访问内存和I/O设备。
一、ARM指令集概述
1. ARM指令集分类
ARM指令集可以分为三类:ARM指令集,Thumb指令集和
Thumb-2指令集。其中,ARM指令集是32位的,Thumb和Thumb-2是16位的。
2. ARM寄存器
ARM架构有15个通用寄存器(R0-R14)和一个程序计数器(PC)。通用寄存器可以用来存储数据或地址,程序计数器则用来存储下一条
要执行的指令地址。
3. ARM指令格式
ARM指令格式包括操作码、操作数和条件码。操作码表示要执行的操作类型,操作数表示要进行操作的数据或地址,条件码表示在何种情况下执行该条指令。
4. ARM访问内存
在ARM中,访问内存需要使用Load和Store指令。Load用于将数据从内存中读取到寄存器中,Store用于将数据从寄存器中写入到内存中。
5. ARM流水线
流水线是ARM处理器中的一种指令执行方式,它将指令执行过程分为若干个阶段,每个阶段可以同时执行不同的指令。ARM流水线包括取指、译码、执行、访存和写回等阶段。
二、ARM指令集详解
1. ARM指令集
ARM指令集是32位的,它支持数据处理、分支跳转、访存和其他操作。以下是一些常用的ARM指令:
(1)MOV:将一个寄存器中的值移动到另一个寄存器中。
aaa,aas,aam,aad指令
aaa,aas,aam,aad指令
【实用版】
目录
1.ARM 指令集概述
2.ARM 指令集中的 aaa、aas、aam、aad 指令
3.aaa 指令的功能和应用
4.aas 指令的功能和应用
5.aam 指令的功能和应用
6.aad 指令的功能和应用
7.总结
正文
一、ARM 指令集概述
ARM 指令集,全称 Advanced RISC Machine,是一种基于 RISC(精简指令集计算机)架构的处理器指令集。ARM 指令集广泛应用于嵌入式系统、移动设备、服务器等领域,其高效的性能和低功耗特性受到业界的青睐。
二、ARM 指令集中的 aaa、aas、aam、aad 指令
在 ARM 指令集中,有四个特殊的指令:aaa、aas、aam、aad。这四个指令在 ARM 指令集中扮演着重要的角色,具有特定的功能和应用。
三、aaa 指令的功能和应用
aaa 指令,全称 Add with Carry,带进位加法。它用于将两个带有进位的有符号整数相加,并将结果存储在目标寄存器中。aaa 指令在需要处理带进位加法的场景中非常有用,例如在加密算法、图像处理等领域。
四、aas 指令的功能和应用
aas 指令,全称 Add with no Carry,无进位加法。它用于将两个无符号整数相加,并将结果存储在目标寄存器中。aas 指令在需要处理无进位加法的场景中非常有用,例如在音频处理、图形绘制等领域。
五、aam 指令的功能和应用
aam 指令,全称 Multiply with Carry,带进位乘法。它用于将两个带有进位的有符号整数相乘,并将结果存储在目标寄存器中。aam 指令在需要处理带进位乘法的场景中非常有用,例如在金融计算、图像处理等领域。
[ARM]ARM指令集
[ARM]ARM 指令集ARM 指令集
⼀、ARM
指令的格式和分类
经典ARM 指令格式如下:
<> 为必选项,{}为可选项
为操作码,如ADD 表⽰算术加操作指令
{} 决定指令执⾏条件域
{S} 决定指令执⾏是否影响CPSR 寄存器的值为⽬的寄存器的第⼀个操作数为寄存器
为第⼆个操作数
⼆、ARM 指令条件执⾏及标志位
ARM 指令可以通过添加适当的条件码后缀来达到条件执⾏的⽬的
这样可以提⾼代码密度,减少分⽀跳转指令数⽬,提⾼性能。
默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位
CMP 不需要增加 “S”就可改变相应的标志位。
使⽤条件码可以实现⾼效的逻辑操作,节省跳转和条件语句,提⾼代码效率
如果指令不标明条件码,将默认为⽆条件(AL )执⾏。 <opcode> {<cond>} {S} <Rd>,<Rn>,<operand2>
条件码表
三、跳转指令
跳转指令⽤于实现程序流程的跳转,在ARM程序中有两种⽅法可以实现程序的跳转,⼀种是使⽤跳转指令直接跳转,另⼀种是直接向PC寄存器赋值实现跳转。
B{条件} ⽬标地址
B指令最简单的跳转指令,⼀旦遇到⼀个B指令,ARM处理器⽴即跳转⾄给定的⽬标地址,由此处继续执⾏。跳转指令B限制在当前指令的⼟32MB范围内
BL{条件} ⽬标地址
BL是⼀另个跳转指令,在跳转前会将下⼀条指令的地址复制到R14中,然后跳转到指定的地址运⾏程序。可以通过将R14的内容重新加载到PC中,并返回到跳转指令之后的那个指令处执⾏。 BL是实现⼦程序调⽤的⼀个基本但常⽤的⼿段。
ARM指令集
ARM指令集
ARM指令的基本格式
ARM指令的基本格式为:
<Opcode> {<Cond>} {S} <Rd>, <Rn> { , <Opcode2> }
其中,<>内的项是必需的,{}内的项是可选的。
1)Opcode项
Opcode是指令助记符,即操作码,说明指令需要执⾏的操作,在指令中是必需的。
2)Cond项(command)
Cond项表明了指令的执⾏的条件,每⼀条ARM指令都可以在规定的条件下执⾏,每条ARM指令包含4位的条件码,位于指令的最⾼4位[31:28]。
条件码共有16种,每种条件码⽤2个字符表⽰,这两个字符可以添加⾄指令助记符的后⾯,与指令同时使⽤。
当指令的执⾏条件满⾜时,指令才被执⾏,否则指令被忽略。如果在指令后不写条件码,则使⽤默认条件AL(⽆条件执⾏)。
指令的条件码
条件码助记符后缀标志含义
0000 EQ Z置位相等equal
0001 NE Z清零不相等not equal
0010 CS C置位⽆符号数⼤于或等于Carry Set
0011 CC C清零⽆符号数⼩于
0100 MI N置位负数minus
0101 PL N清零正数或零plus
0110 VS V置位溢出
0111 VC V清零没有溢出
1000 HI C置位Z清零⽆符号数⼤于high
1001 LS Z置位C清零⽆符号数⼩于或等于less
1010 GE N等于V 带符号数⼤于或等于
1011 LT N不等于V 带符号数⼩于least
1100 GT Z清零且(N等于V)带符号数⼤于great
arm的原理与应用
ARM的原理与应用
1. ARM架构简介
ARM(Advanced RISC Machines)是一种基于精简指令集(RISC)的处理器架构。它最早由英国的ARM Holdings开发,并在全球范围内广泛应用于各种嵌入式
系统和移动设备中。ARM架构以其低功耗、高性能和低成本的特点,在智能手机、平板电脑、物联网设备等领域得到了广泛的应用。
2. ARM的工作原理
ARM处理器基于Harvard结构,将指令存储器和数据存储器分开,实现了更
高的效率和灵活性。主要组成部分包括处理器核心、存储器控制器、总线接口等。
ARM的核心部分由处理器和寄存器组成。其中,处理器是整个系统的关键部分,负责执行指令和进行数据处理。寄存器用于存储指令和数据,以及保存中间计算结果。
系统总线负责处理数据和指令的传输,将其从存储器传输给处理器进行处理。
存储器控制器负责管理存储器的访问,保证数据的读写操作能够顺利进行。
3. ARM的应用领域
ARM架构由于其低功耗和高性能的特点,广泛应用于各种领域。
3.1 智能手机和平板电脑
ARM处理器在智能手机和平板电脑领域占据了主导地位。其高效的能耗管理
和强大的计算性能,使得设备可以在长时间使用的同时具有出色的性能表现。
3.2 物联网设备
物联网设备是指通过互联网连接的各种设备,如智能家居、智能手表等。由于
物联网设备通常需要长时间工作且功耗低,ARM处理器成为了其首选的处理器架构。
3.3 电子游戏机
ARM架构也广泛应用于电子游戏机中。由于游戏对处理器的计算要求较高,
同时对功耗也有一定的要求,ARM的高性能和低功耗特点使得它成为电子游戏机
arm指令集类型
arm指令集类型
(原创版)
目录
1.ARM 指令集概述
2.ARM 指令集的类型
3.ARM 指令集的应用领域
正文
【1.ARM 指令集概述】
ARM 指令集,全称 Advanced RISC Machine,即高级 RISC 机器指令集,是一种基于 RISC(精简指令集计算机)架构的 32 位/64 位指令集。相较于传统的 CISC(复杂指令集计算机)架构,RISC 架构通过简化指令集,降低了硬件的复杂性,提高了指令的执行速度。ARM 指令集由英国 ARM 公司设计开发,目前已成为嵌入式系统以及移动设备领域的主流处理器指令集。
【2.ARM 指令集的类型】
ARM 指令集根据不同的应用场景和需求,分为以下几种类型:
(1)ARM32:32 位 ARM 指令集,包括 ARMv1-v7 等多个版本。其中,ARMv7 是 ARM32 架构的最新版本,也是目前应用最广泛的版本。
(2)ARM64:64 位 ARM 指令集,包括 ARMv8-v9 等多个版本。相较于 32 位的 ARM32,ARM64 提供了更多的寄存器、更大的内存地址空间以及更高的性能。目前,许多服务器、桌面电脑以及移动设备都采用了 ARM64 架构的处理器。
(3)MIPS:虽然不属于 ARM 指令集,但 MIPS(Millions of Instructions Per Second)也是一种常见的嵌入式处理器指令集。MIPS 架构的处理器在很多场景下与 ARM 处理器兼容,因此有时也会被提及。
【3.ARM 指令集的应用领域】
ARM 指令集广泛应用于以下领域:
03ARM指令集
并不是每一个常数都可以作为合法的立即数:既要指 令定长,又要操作数范围合理
试判断:0x0000F200,0x00012800,0x00001010 0xC000001E,0x00000102,0xFF100000
数据处理指令的立即数二进制编码:
以R15作为目的寄存器时,使用指令可选项 S, 实现标准的异常返回:同时回复PC和CPSR。
数据处理(不含乘法)指令的二进制编码:
数据处理(不含乘法)指令的详细列表:
操作码[24:21] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
ARM 指令中,立即数都是 32 位二进制数。
有效立即数问题:
在 32 位定长指令编码中存放 32 位立即数的方法是:
每个有效的立即数是由一个8位的立即数 immed_8 循 环右移偶数位得到,循环右移的位数 rotate_imm 由一个4 位二进制的两倍表示。因此有效立即数 immediate 可以表 示成(见下页图示):
移位方式示意图
第二操作数的移位位数:
移位位数可以用立即数方式或者寄存器方式给出, 如下所示:
ADD R3,R2,R1,LSR #2 ;R3 ←R2 + R1÷4 ADD R3,R2,R1,LSR R4 ;R3←R2 + R1÷2R4
ARM笔记
一.嵌入式
1.嵌入式系统的框架可分为四部分:处理器,存储器,输入/输出(I/O)和软件(由于嵌入式设备的应用软件和操作系统的紧密结合)。硬件包括处理器/微处理器,存储器,及外设器件和I/O端口,图形控制器等。
2.处理器是硬件核心部分。处理器可分为:嵌入式微处理器(EMPU),嵌入式微控制器(MCU (单片机),嵌入式DSP处理器(EDSP),嵌入式片上系统(SOC)。
3.软件包括操作系统和应用软件,应用软件决定了系统的运作和行为,而操作系统控制着应用软件与系统硬件的交互。
二.ARM9(Advanced RISC Machine)
1.ARM9系列微处理器在高性能和低功耗性方面提供最佳性能。特点:
☆5级整数流水线,指令执行效率更高;
☆提供1.1MIPS/MHz的哈佛结构;
☆支持32位ARM指令集和16位Thunb指令集;【Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%~40%以上的存储空间。】☆支持32位的高速AMBA总线接口;
☆全性能的MMU,支持Windows CE、Linux、Paim OS等多种主流嵌入式操作系统,MPU支持实时操作系统;
☆支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
2.RISC体系结构特点:
☆采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。
☆使用单周期指令,便于流水线操作执行。
☆大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率。
☆所有的指令都可以根据前面的执行结果决定是否被执行,从而提高指令的执行效率。
arm汇编指令集汇编入门第一篇小白也能看懂
arm汇编指令集汇编入门第一篇小白也能看
懂
如今,计算机科学与技术领域发展迅猛,其中包括一门被广泛应用
的指令集架构—— ARM(Advanced RISC Machines)汇编指令集。本
文将从小白角度出发,向读者介绍ARM汇编指令集的基本概念和入门知识。
1. ARM汇编简介
ARM汇编指令集是一种低级程序设计语言,用于在ARM微处理器
上进行编程。它不同于高级语言如C++或Java,具有较为底层的特性。掌握ARM汇编指令集可以让开发者更深入地理解计算机内部运行原理,并能进行更加灵活和高效的编程。
2. ARM寄存器
ARM汇编指令集使用一组寄存器来存储和处理数据。其中,常用
的寄存器有13个通用寄存器(R0-R12)、程序计数器(PC)、堆栈指针(SP)和链接寄存器(LR),另外还有一些特殊用途的寄存器。这
些寄存器提供了一种基于寄存器的计算模型,使得ARM汇编具有高效
处理数据的能力。
3. 指令格式
ARM汇编指令集的指令格式一般包括操作码和操作数。操作码表
示具体的操作,如加法、乘法等,而操作数则指定操作所需的寄存器
和立即数等。
4. 数据处理指令
ARM汇编指令集提供了一系列的数据处理指令,用于对寄存器中的数据进行处理。这些指令包括基本的算术运算、逻辑运算以及移位操作等,可以实现各种数据处理需求。
5. 分支指令
分支指令是ARM汇编指令集中常用的一类指令,用于根据条件进行跳转。跳转指令可以在程序执行过程中改变程序执行的顺序,实现条件判断和循环等功能。
6. 存储器访问指令
存储器访问指令用于在ARM汇编中对内存进行读写操作。通过这些指令,可以将数据从寄存器中存储到内存中,或者将内存中的数据加载到寄存器中进行处理。
ARM指令集讲解
ARM指令集讲解
ARM指令和指令系统:
指令是指示计算机某种操作的命令,指令的集合称为指令系统。指令系统的功能强弱很大程度上决定了这类计算机智能的高低,它集中地反应了微处理器的硬件功能和属性。
ARM指令在机器中的表示格式是用32位的二进制数表示。如ARM中有一条指令为
ADDEQS R0,R1,#8;
其二进制代码形式为:
31~28 | 27~25 | 24~21 | 20 | 19~16 | 15~12 | 11~0 0000 | 001 | 0100 | 1 | 0001 | 0000 | 0000 0000 1000
cond | opcode | Rn | Rd | Op2
ARM指令格式一般如下:
{}{s},{,}
格式中< >的内容是必不可少的,{ }中的内容可忽略
表示操作码。如ADD表示算术加法
{} 表示指令执行的条件域。如EQ、NE等,缺省为AL。
{S} 决定指令的执行结果是否影响CPSR的值,使用该后缀则指令执行结果影响CPSR的值,否则不影响
表示目的寄存器
表示第一个操作数,为寄存器
表示第二个操作数,可以是立即数。寄存器和寄存器移位操作数
ARM指令后缀:S、!
S后缀:指令中使用S后缀时,指令执行后程序状态寄存器的条件标志位将被刷新,不使用S后缀时,指令执行后程序状态寄存器的条件标志将不会发生变化。S后缀常用于对条件进行测试,如是否有溢出,是否进位等,根据这些变化,就可以进行一些判断,如是否大于,相等,从而影响指令执行的顺序。
!后缀:如果指令地址表达式中不含!后缀,则基址寄存器中的
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四、ARM7指令集(只看了ARM指令)
(一)说明
1.处理器指令都是助记符,代表了一串二进制代码。
2.指令LDMIA R5, {R2,R7,R8} ;是多寄存器寻址方式,意思是把R5中的数据作为地址,把这个地址的数据赋给R2,把R5的下一个地址的数据赋给R7,在把下一个地址的数据赋给R8,是一条无条件执行指令。
3.ARM指令特点:
4.指令可选后缀
(1)S后缀
(2)!后缀
!后缀的含义:在指令的地址表达式中含有!后缀时,指令执行后,基址寄存器中的地址将发生变化,变化结果为:
基址寄存器中的地址值(指令执行后)=指令执行前的值+地址偏移量
举例:LDMIA R3,[R0,#04]! ;R3←[R0+#04],使用!后缀
(1)B后缀
(4)T后缀
T后缀是一个很特殊的可选后缀,含义:指令在特权模式下对存储器的访问,将被存储器看成是用户模式的访问。
(5)条件后缀
在CPSR镇南关存放这条件标志位,他们反映了指令执行结果的某些特征,如两个数据比较结果是否相等,相加是否溢出等,在判断时,都要用到这些条件标志位,条件标志位往往引起程序分支。
例:
(二)指令集
ARM数据传送指令(存储器访问指令)
以ARM为核的单片机结构中,所有的外围模块(片内)都和存储单元一样,是ARM的不同地址单元,无论这些模块的功能如何(通信,输入输出,定时器,存储器等),也无论这些模块的位置在片内还是片外,ARM处理器都把它们视为外部存储器。其操作和对存储器操作是相同的。
ARM处理器的数据传送指令只针对存储器,所以也可叫存储器访问指令。
把寄存器到存储器传送叫存储,把数据从存储器到寄存器的传送叫加载,ARM 只有两种数据传送:存储和加载。
举例:
其中LDR指令是把数据从外部存储器传送到内部寄存器的指令,也叫加载指令;STR指令是把数据从内部寄存器传送到外部存储器的指令,也称为存
使用语句标号,使用语句标号是寻址是一种简单有效的寻址方法,注意PC作用
(1)从寄存器到存储器的情况,一个字节的传送只能传送最低一个字节,如果要存储其他字节就需要移位操作,但是寄存器是32位结构,所以实际上有32位数据进入数据总线,只是把最低字节拷贝4次,这样四个字节都是一样的。在进行字节传送时,要弄清楚存储器是否有单字节接受能力。
(2)从存储器到寄存器的加载过程
从存储器读出数据时,也是32位数据,ARM处理器执行指令时,把所选择的传送字节放在低8位,其余的用0填充。
(2)大端方式和小端方式
注意:
(1)指令的代码代表的是此助记符所表达的二进制是什么,了解这些有助于汇编调试。
(2)数据传送指令基本的就是LDR和STR然后再加上后缀后会衍生出很多。在相对寻址中的相对偏移时,如STR R4,SRART 含义就是把R4中的数据存储到标号指向的地址单元中去,如果标号是程序所使用的一个标号,那么此语句的含义就是修改标号所指向的程序,是无法执行的指令,因此,在使用相对偏移存储指令时,一要注意语句标号不能指向程序存储器的程序存储区,要指向程序存储器的数据存储区和数据存储器的数据存储区。二是所指向的区域是可修改的,如用户模式下,有些存储区是不能访问或是只读的。
(3)对语句LDR R4,START+0X4000,是一条错误的指令,因为程序相对偏移规定不得超过±4096字节。
分支指令
1.分支指令B和分支连接指令BL
程序简单跳转使用分支指令B;在需要保存跳转地址时,使用分支链接指令BL。
指令格式:
B[Cond] 偏移表达式
BL[Cond] 偏移表达式
说明:
(1)其中[Cond]是可选条件后缀,使用不受到限制。
(2)跳转的范围是±32M地址
(3)在执行跳转指令时,处理器并不保存状态寄存器CPSR。
2.分支和交换指令BX
在ARM指令集和THUMB指令集之间进行程序跳转时,,使用分支和交换指令BX。
指令格式:
BX[Cond] Rn
ARM数据处理指令
1. 注意
(1)ARM处理器的数据处理指令和外部存储器无关,而只涉及寄存器和立即数,也就是说数据处理指令是内部寄存器之间实现的的。
(2)前面的所有外部存储器的寻址方式,都不适用。
(3)一般采用寄存器寻址
(4)其中的数据传送指令只是内部寄存器之间的数据传送。
(5)数据处理指令和数据传送指令不同,数据处理指令大部分都会影响条件标志。
数控位移位方式,就是使用数值常量控制移位位数,另一种就是寄存器控位移位方式,就是使用一个寄存器控制移位位数。注意第二操作数规范是一个8位的无符号数值常量,用0填充到32位后,循环右移偶次后得到的32位数值,例如下:
2.ARM数据处理指令详述
(1)数据传送指令MOV和MVN(只是在寄存器之间传和前面一种指令有区别)P116
(2)加法指令ADD、减法指令SUB、反减法指令RSB、带进位加法指令ADC、带借位减法指令SBC、带借位反减法指令RSC
P118
其中指令SUBNES就使用了后缀NE和后缀S,注意第二操作数规范并且必须要有第二操作数。
(4)比较和测试指令CMP、CMN、TEQ、和TST
P120
注意没有目标寄存器,在这些指令中不需要S后缀,也会刷新程序标志位,不保存比较结果。
(5)逻辑与指令AND、逻辑或指令ORR。逻辑异或指令EOR和位清除指令
BIC
P123
注意在ARM汇编中,16进制用#0x做前缀,如#0x00FF是一个16进制数,二进制数使用#2_做前缀,如#2_00110011是一个二进制数。
(6)程序转态寄存器传送指令MRS和MSR
P127
注意在用户模式下不可以改变CPSR中的控制位[7:0],如果是MRS R0 ,CPSR 中不用指定位域;但是MSR SPSR(CPSR) ,R4这个就是错误的,没有指定位域。
(7)乘法指令MUL和乘加指令MLA
P129