ARM指令 中文全称及功能应用详解

合集下载

arm的原理与应用领域

arm的原理与应用领域

ARM的原理与应用领域1. 简介ARM(Advanced RISC Machine)是一种精简指令集计算机(RISC)体系结构,广泛用于移动设备、嵌入式系统和服务器等领域。

它以其低功耗、高性能和可扩展性而闻名,成为当今计算领域最为流行的架构之一。

本文将介绍ARM架构的原理和其在各个应用领域中的应用情况。

2. ARM架构原理ARM架构采用了精简指令集计算机(RISC)的设计原理,其核心思想是通过优化指令集,提高指令执行效率,从而提高处理器的性能和功耗效率。

2.1 精简指令集ARM采用精简指令集,指令长度固定为32位,指令格式规范简单。

这样做的好处是指令的译码执行速度更快,从而加快了处理器的运行速度。

2.2 多级流水线ARM处理器采用多级流水线,将指令执行过程划分为若干个阶段,每个阶段由一个专门的硬件电路来执行。

这样做的好处是可以实现指令的并行执行,提高了处理器的吞吐量。

2.3 按需执行和条件执行ARM架构支持按需执行和条件执行的特性。

按需执行意味着只有在需要的时候才执行指令,可以节省处理器的功耗。

条件执行意味着根据条件判断是否执行某条指令,可以提高程序的执行效率。

3. ARM的应用领域ARM架构由于其低功耗和高性能的特点,被广泛应用于各个领域。

下面将介绍ARM在移动设备、嵌入式系统和服务器等领域的应用情况。

3.1 移动设备ARM架构在移动设备领域应用广泛。

例如,大部分智能手机和平板电脑都使用ARM架构的处理器。

ARM处理器低功耗的特点使得移动设备可以更长时间地使用电池,同时其高性能也能够满足现代移动应用的需求。

3.2 嵌入式系统嵌入式系统是指将计算机系统集成到特定应用领域中的系统。

ARM架构在嵌入式系统领域应用广泛,例如,智能家居系统、智能交通系统、工业自动化系统等都使用了ARM架构的处理器。

ARM处理器的低功耗和高性能使得嵌入式系统可以实现更高的效能和更好的稳定性。

3.3 服务器ARM架构在服务器领域的应用也在不断增加。

ARM常用概念及基本功能使用说明

ARM常用概念及基本功能使用说明

论坛推荐:新手必看,关于ARM的22个常用概念2014-04-22 电子发烧友网新手必看,关于ARM的22个常用概念!1.ARM中一些常见英文缩写解释MSB:最高有效位;LSB:最低有效位;AHB:先进的高性能总线;VPB:连接片内外设功能的VLSI外设总线;EMC:外部存储器控制器;MAM:存储器加速模块;VIC:向量中断控制器;SPI:全双工串行接口;CAN:控制器局域网,一种串行通讯协议;PWM:脉宽调制器;ETM:嵌入式跟踪宏;CPSR:当前程序状态寄存器;SPSR:程序保护状态寄存器;2.MAM 使用注意事项:答:当改变MAM 定时值时,必须先通过向MAMCR 写入0 来关闭MAM,然后将新值写入MAMTIM。

最后,将需要的操作模式的对应值写入MAMCR,再次打开MAM。

对于低于20MHz 的系统时钟,MAMTIM 设定为001。

对于20MHz 到40MHz 之间的系统时钟,建议将Flash访问时间设定为2cclk,而在高于40MHz的系统时钟下,建议使用3cclk。

3.VIC 使用注意事项答:如果在片内RAM当中运行代码并且应用程序需要调用中断,那么必须将中断向量重新映射到Flash地址0x0。

这样做是因为所有的异常向量都位于地址0x0及以上。

通过将寄存器MEMMAP(位于系统控制模块当中)配置为用户RAM模式来实现这一点。

用户代码被连接以便使中断向量表装载到0x4000 0000。

4.ARM启动代码设计答:ARM启动代码直接面对处理器内核和硬件控制器进行编程,一般使用汇编语言。

启动代码一般包括:中断向量表初始化存储器系统初始化堆栈初始化有特殊要求的端口、设备初始化用户程序执行环境改变处理器模式呼叫主应用程序5.IRQ 和FIQ 之间的区别答:IRQ和FIQ是ARM处理器的两种编程模式。

IRQ是指中断模式,FIR是指快速中断模式。

对于FIQ 你必须尽快处理你的事情并离开这个模式。

IRQ 可以被FIQ 所中断,但IRQ 不能中断FIQ。

常用arm指令集

常用arm指令集

常用arm指令集ARM指令集是一种广泛使用的指令集架构,被广泛应用于各种嵌入式系统、移动设备和服务器等领域。

它具有高效、灵活、可扩展等特点,是现代计算机体系结构的重要组成部分。

本文将介绍常用的ARM指令集。

一、ARM指令集概述ARM指令集是一种精简指令集(RISC)架构,它采用了精简的指令集来提高执行效率和降低功耗。

由于其精简化的设计,ARM处理器可以在更小的面积内实现更高的性能和更低的功耗。

目前,ARM处理器已经广泛应用于各种嵌入式系统、移动设备和服务器等领域。

二、常用ARM指令集1.数据处理指令数据处理指令是最基本和最常用的ARM指令之一。

它包括加法、减法、乘法、除法等运算操作。

这些操作不涉及内存访问,只对寄存器中的数据进行操作。

例如:ADD R1, R2, R3:将R2和R3中的值相加,并将结果存储到R1中。

SUB R1, R2, #10:将R2中的值减去10,并将结果存储到R1中。

MUL R1, R2, R3:将R2和R3中的值相乘,并将结果存储到R1中。

2.数据传输指令数据传输指令是用于在寄存器和内存之间传输数据的指令。

它包括从内存读取数据、向内存写入数据等操作。

例如:LDR R1, [R2]:从地址为R2的内存单元中读取一个字节的数据,并将其存储到寄存器R1中。

STR R1, [R2]:将寄存器R1中的值写入地址为R2的内存单元中。

3.分支指令分支指令用于实现程序跳转,包括无条件跳转、有条件跳转等操作。

它是实现程序控制流程的关键指令之一。

例如:B label:无条件跳转到标记为label的位置。

BEQ label:如果前一次比较结果为相等,则跳转到标记为label的位置。

4.逻辑运算指令逻辑运算指令用于实现与、或、非、异或等逻辑运算操作。

它通常用于实现位操作和掩码操作等功能。

例如:AND R1, R2, #0xFF:将寄存器R2和0xFF进行按位与操作,并将结果存储到寄存器R1中。

ORR R1, R2, #0xFF:将寄存器R2和0xFF进行按位或操作,并将结果存储到寄存器R1中。

常用ARM指令

常用ARM指令

常⽤ARM指令常⽤ARM指令1:数据处理指令 mov mvn MOV(MOVE)指令可完成从另⼀个寄存器、被移位的寄存器或将⼀个⽴即数加载到⽬的寄存器MOV R0,R1;R1的值传到R0MOV R3,#3 ;把常数3传给R3MVN( MOVE Negative)取反后再传值,⽐MOV多了⼀步取反MVN R0, #0 ;把0取反(即-1)传给R0MVN R1,R2 ;把R2的值取反传给R1 算术指令 add sub rsb adc sbc rsc ADD加法指令 ADD R0,R1,R2; R0=R1+R2 ADD R0,R1,#3 ;R0=R1+3 ADC带进位加法指令,即除了加两个数以外,还要把CPSR的C值也要带进来 通常⽤于⼤数(超过32Bit整数)相加,这时单⽤ADD不能处理,必须折成两步,其中⼀步⽤ADC. 以下是做64Bit的加法 ADDS R0,R1,R2; R0=R1+R2,ADDS中S表⽰把进位结果写⼊CPSR ADC R5,R3,R4 ;R5=R3+R4+C 逻辑指令 and orr eor bic AND位与指令 AND R0,R1,R2; R0=R1 & R2 AND R0,R1,#0xFF ;R0=R1 & 0xFF ORR位或指令 ORR R0,R1,R2; R0=R1 | R2 ORR R0,R1,#0xFF ;R0=R1 | 0xFF TST测试某⼀位是否为1,并把结果写⼊CPSR,供下⼀句使⽤ TST R1,#0xffe; 等同于if(R1 & 0xffe) TST R1,#%1;测试最低位是否为1,%表⽰⼆进制 BIC清位操作 BIC R0,R0,#0xF;等同于 R0 &=~(0xF) BIC R0,R0,#%1011;该指令清除 R0 中的位 0 1 3,其余的位保持; %表⽰是⼆进制,0x表⽰⼗六进制 ⽐较指令 cmp cmn tst teq CMP⽐较两个操作数,并把结果存⼊CPSR供下⼀句语句使⽤ CMP R0,R1; ⽐较R0,R1 乘法指令 mvl mla umull umlal smull small MUL R0,R1,R2 ;R0 = R1 × R2MULS R0,R1,R2 ;R0 = R1 × R2,同时设置CPSR中的相关条件标志位 MLA R0,R1,R2,R3 ;R0 = R1 × R2 + R3MLAS R0× R2 + R3,同时设置CPSR中的相关条件标志位 SMULL R0,R1,R2,R3 ;R0 = (R2 × R3)的低32位 ;R1 = (R2 × R3)的⾼32位 加载/存储指令 LDR,STR LDR R0,[R1]; R1的值当成地址,再从这个地址装⼊数据到R0 (R0=*R1) LDR R1,=0x30008000 ; 把地址0x30008000的值装⼊到R1中 STR R0,[R1] ; 把R0的值,存⼊到R1对应地址空间上(*R1 = R0)。

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简介

6.移动互联网领域

ARM技术打造世界级的Web2.0产品

目前大多数智能手机采用ARM11处理器 基于Cortex-A处理器的Web2.0手机 ARMv7架构的设计为Web2.0做了专门设计



矢量浮点运算单元 Thumb-2和Thumb-2 EE指令用于解释器和JITs NEON SIMD技术
美国加州大学伯克利分校的Patterson教授领导 的研究生团队设计和实现了“伯克利RISC I”处理 器,他们在此基础之上又发展了后来SUN公司的 SPARC系列RISC处理器,并使得采用该处理器的 SUN工作站名振一时。 与此同时,斯坦福大学也在RISC研究领域取得了 重大进展,开发并产业化了MIPS( Million Instructions Per Second )系列RISC处理器。



ARM是什么? ARM为什么存在? ARM有什么优势? ARM体系结构的发展历程? ARM可以应用在哪些方面?
二、ARM为什么存在

RISC体系结构 ARM的诞生
1.RISC体系结构
传统的CISC(Complex Instruction Set Computer,复杂 指令集计算机)体系由于指令集庞大,指令长度不固定,指 令执行周期有长有短,使指令译码和流水线的实现在硬件上 非常复杂,给芯片的设计开发和成本的降低带来了极大困难。 随着计算机技术的发展需要不断引入新的复杂的指令集, 为支持这些新增的指令,计算机的体系结构会越来越复杂。然 而,在CISC指令集的各种指令中,其使用频率却相差悬殊,大约 有 20%的指令会被反复使用,占整个程序代码的80%。而余 下的80%的指令却不经常使用,在程序设计中只占20%,显然, 这种结构是不太合理的。

5.arm和x86的常用指令用法

5.arm和x86的常用指令用法

Arm和x86是两种常见的指令集架构,分别用于移动设备和个人电脑。

它们的指令集有很多共同之处,但也有一些差异。

本文将介绍Arm和x86的常用指令用法,以帮助读者更好地理解这两种架构的特点和优劣势。

一、Arm指令集架构(Arm ISA)Arm是一种RISC(Reduced Instruction Set Computer)架构,其指令集相对较小,执行效率较高。

Arm指令集包括以下几类指令:1. 数据传送指令:包括MOV(数据传送)、LDR(加载)、STR(存储)等指令,用于在寄存器和内存之间传递数据。

2. 算术运算指令:包括ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除法)等指令,用于进行各种算术运算。

3. 逻辑运算指令:包括AND(与)、ORR(或)、EOR(异或)、NOT(取反)等指令,用于执行逻辑运算。

4. 分支跳转指令:包括B(无条件跳转)、BEQ(等于时跳转)、BNE(不等于时跳转)等指令,用于在程序中实现跳转功能。

5. 特权指令:包括MRS(读特权寄存器)、MSR(写特权寄存器)、SVC(软中断)等指令,用于管理处理器的特权模式和中断处理。

以上是Arm指令集中的一些常用指令,通过它们可以实现各种功能和操作。

二、x86指令集架构(x86 ISA)x86是一种CISC(Complex Instruction Set Computer)架构,其指令集较大且复杂,包括以下几类指令:1. 数据传送指令:包括MOV(数据传送)、LEA(加载有效位置区域)、XCHG(交换数据)等指令,用于在寄存器和内存之间传递数据。

2. 算术运算指令:包括ADD(加法)、SUB(减法)、IMUL(整数乘法)、IDIV(整数除法)等指令,用于进行各种算术运算。

3. 逻辑运算指令:包括AND(与)、OR(或)、XOR(异或)、NOT(取反)等指令,用于执行逻辑运算。

4. 分支跳转指令:包括JMP(无条件跳转)、JE(等于时跳转)、JNE(不等于时跳转)等指令,用于在程序中实现跳转功能。

ARM指令全称及含义

ARM指令全称及含义

PSR 3 field
F (Flags field mask byte)
S (Stats field mask byte)
X (Extension field mask byte)
C (control field mask byte)
CPSR 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Swap byte
AND R0,R0,#3 ; 该指令保持 R0 的 0、1 位,其余位清零。 ORR R0,R0,#3 ; 该指令设置 R0 的 0、1 位,其余位保持不变。 EOR R0,R0,#3 ; 该指令反转 R0 的 0、1 位,其余位保持不变。 BIC R0,R0,#0b1011 ; 该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。 计算操作数最高端 0 的个数 MUL R0,R1,R2 ;R0 = R1 × R2 MLAS R0,R1,R2,R3 ;R0 = R1 × R2 + R3,同时设置 CPSR 中的相关条件标志位 SMULL R0,R1,R2,R3 ;R0 = (R2 × R3)的低 32 位 R1 = (R2 × R3)的高 32 位 SMLAL R0,R1,R2,R3;R0 =(R2 × R3)的低 32 位+R0; R1 =(R2 × R3)的高 32 位+ R1 UMULL R0,R1,R2,R3;R0 = (R2 × R3)的低 32 位;R1 =(R2 × R3)的高 32 位 UMLAL R0,R1,R2,R3;R0 =(R2 × R3)的低位+R0;R1 =(R2 × R3)的高 32 位+R1 MRS R0,CPSR ;传送 CPSR 的内容到 R0 MSR CPSR_c ,R0 ;传送 R0 的内容到 SPSR,但仅仅修改 CPSR 中的控制位域 LDR R0,[R1,R2]! ;将存储器地址为 R1+R2 的字数据读入 R0,并将新地址 R1+R2 写入 R1。 LDRB R0,[R1,#8] ;将存储器地址为 R1+8 的字节数据读入 R0,并将 R0 的高 24 位清零 LDRH R0,[R1] ;将存储器地址为 R1 的半字数据读入寄存器 R0,并将 R0 的高 16 位清零 LDMFD R13!,{R0,R4-R12,PC} ;将堆栈内容恢复到寄存器(R0,R4 到 R12,LR) STR R0,[R1],#8 ;将 R0 中的字数据写入 R1 为地址的存储器中,并将新地址 R1+8 写入 R1 STRB R0,[R1,#8] ;将寄存器 R0 中的字节数据写入以 R1+8 为地址的存储器中 STRH R0,[R1,#8] ;将寄存器 R0 中的半字数据写入以 R1+8 为地址的存储器中 STMFD R13!,{R0,R4-R12,LR};将寄存器列表中的寄存器(R0,R4 到 R12,LR)存入堆栈 SWP R0,R1,[R2] ;R2 所指的字数据传送到 R0,同时 R1 的数据传送到 R2 所指的单元 SWPB R0,R1,[R2] ;R2 所指的字节数据传送到 R0,R0 高 24 位清零,同时 R1 低 8 位送 R2 所指单元。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指令格式:指令{条件}{S} {目的Register},{OP1},{OP2} "{ }"中的内容可选。

即,可以不带条件只有目的寄存器,或只有目的寄存器和操作数1,也可以同时包含所有选项。

“S”决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值助记符英文全称示例、功能跳转指令BBranch跳转指令B Label;程序无条件跳转到标号Label处执行BLBranch with Link带返回的跳转指令BL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中BLXBranch with Link and exchange带返回和状态切换的跳转指令BLX Label;从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中BXBranch and exchange带状态切换的跳转指令BX Label ;跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令数据处理MOVMove数据传送MOV R1,R0,LSL#3;将寄存器R0的值左移3位后传送到R1MVNMove NOT数据非传送MVN R0,#0 ;将立即数0取反传送到寄存器R0中,完成后R0=-1CMPCompare比较指令CMP R1,R0;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位CMNCompare negative负数比较指令CMN R1,R0 ;将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位TSTTest位测试指令TST R1,#0xffe ;将寄存器R1的值与立即数0xffe按位与,并根据结果设置CPSR的标志位TEQTest equivalence相等测试指令TEQ R1,R2;将寄存器R1的值与寄存器R2的值按位异或,并根据结果设置CPSR的标志位ADDAdd加法运算指令ADD R0,R2,R3,LSL#1; R0 = R2 + (R3 << 1)ADCAdd with carry带进位加法ADCS R2,R6,R10; R2 = R6+R10+!C,且更新CPSR的进位标志位SUBSubtract减法运算指令SUB R0,R1,#256; R0 = R1 – 256SBCSubtract with carry带进位减法指令SUBS R0,R1,R2 ; R0 = R1 - R2 - !C,并根据结果设置CPSR的进位标志位RSBReverse subtract逆向减法指令RSB R0,R1,R2 ; R0 = R2 – R1RSCReverse subtract with carry带进位逆向减法指令RSC R0,R1,R2; R0 = R2 – R1 - !CANDAnd逻辑与操作指令AND R0,R0,#3;该指令保持R0的0、1位,其余位清零。

ORROR逻辑或操作指令ORR R0,R0,#3;该指令设置R0的0、1位,其余位保持不变。

EORExclusive OR逻辑异或操作指令EOR R0,R0,#3 ;该指令反转R0的0、1位,其余位保持不变。

BICBit clear位清除指令BIC R0,R0,#0b1011;该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。

CLZ Count left zero 计算操作数最高端0的个数乘加指令MULMultiply32位乘法指令MUL R0,R1,R2 ;R0 = R1 × R2MLAMultiply and accumulate32位乘加指令MLAS R0,R1,R2,R3;R0 = R1 × R2 + R3,同时设置CPSR中的相关条件标志位SMULLSigned multiply long64位有符号数乘法指令SMULL R0,R1,R2,R3;R0 = (R2 × R3)的低32位 R1 = (R2 × R3)的高32位SMLALSigned mul l and accumulate l64位有符号数乘加指令SMLAL R0,R1,R2,R3;R0 =(R2 × R3)的低32位+R0; R1 =(R2 × R3)的高32位+ R1UMULLUnsigned multiply long64位无符号数乘法指令UMULL R0,R1,R2,R3 ;R0 = (R2 × R3)的低32位;R1 =(R2 × R3)的高32位UMLALUnsigned mul&accumulate lon64位无符号数乘法指令UMLAL R0,R1,R2,R3 ;R0 =(R2 × R3)的低位+R0;R1 =(R2 × R3)的高32位+R1PSR 访问MRSMove PSR to register程序状态寄存器到通用寄存器的数据传送指令MRS R0,CPSR;传送CPSR的内容到R0MSRMove register to PSR通用寄存器到程序状态寄存器的数据传送指令MSR CPSR_c ,R0;传送R0的内容到SPSR,但仅仅修改CPSR中的控制位域加载/ 存储指令LDRLoad word字数据加载指令LDR R0,[R1,R2]!;将存储器地址为R1+R2的字数据读入R0,并将新地址R1+R2写入R1。

LDRBLoad byte字节数据加载指令LDRB R0,[R1,#8] ;将存储器地址为R1+8的字节数据读入R0,并将R0的高24位清零LDRHLoad half word半字数据加载指令LDRH R0,[R1];将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零LDMLoad multiple批量数据加载指令LDMFD R13!,{R0,R4-R12,PC};将堆栈内容恢复到寄存器(R0,R4到R12,LR)STRStore字数据存储指令STR R0,[R1],#8 ;将R0中的字数据写入R1为地址的存储器中,并将新地址R1+8写入R1STRBStore byte字节数据加载存储指令STRB R0,[R1,#8];将寄存器R0中的字节数据写入以R1+8为地址的存储器中STRHStore half word半字数据存储指令STRH R0,[R1,#8];将寄存器R0中的半字数据写入以R1+8为地址的存储器中STMStore multiple批量数据存储指令STMFD R13!,{R0,R4-R12,LR};将寄存器列表中的寄存器(R0,R4到R12,LR)存入堆栈数据交换SWPSwap word字数据交换指令SWP R0,R1,[R2];R2所指的字数据传送到R0,同时R1的数据传送到R2所指的单元SWPBSwap byte字节数据交换指令SWPB R0,R1,[R2] ;R2所指的字节数据传送到R0,R0高24位清零,同时R1低8位送R2所指单元。

移位指令LSLLogic shift left逻辑左移操作MOV R0, R1, LSL#2(ASL#2);将R1中的内容左移两位后传送到R0中,低位用0填充ASLArithmetic shift left算术左移操作LSRLogic shift right逻辑右移操作MOV R0, R1, LSR#2 ;将R1中的内容右移两位后传送到R0中,左端用零来填充ASRArithmetic shift right算术右移操作MOV R0, R1, ASR#2 ;将R1中的内容右移两位后传送到R0中,左端用第31位的值来填充RORRotate right循环右移操作MOV R0, R1, ROR#2;将R1中的内容循环右移两位后传送到R0中RRXRotate right extended带拓展的循环右移操作左端用进位标志位C来填充协处理器CDP Data operations 协处理器数操作指令LDC Load 协处理器数据加载指令STC Store 协处理器数据存储指令MCR Move to coproc fr ARM reg 处理器寄存器到协处理器寄存器的数据传送指令MRC M to ARM reg fr coprocessor 协处理器寄存器到处理器寄存器的数据传送指令PSRfield F (Flags field mask byte) S (Stats field mask byte)X (Extension field maskbyte)C (control field mask byte)CPSR 313292827262524232221219181716 151413121119 8 7 6 5 4 3 2 1 0意义N Z C V Q DNZ (RAZ) 系统扩展用I F T M4 M3 M2 M1 M0CPSR 各位详细意义N 当前指令运算结果为负时,N = 1; 结果为非负时,N = 0 Z 运算结果为0,Z=1;否则Z=0C 上溢出、进位C=1;下溢出、借位C=0V 加减法V=1表示符号位溢出I I=1时,禁止IRQ中断F F=1时,禁止FIQ中断T T=0,ARM指令;T=1,Thumb指令M[4:0]0b10000 User0b10001 FIQ0b10010 IRQ0b10011 Supervisor0b10111 Abort0b11011 Undefined0b11111 System指令格式313292827262524232221219181716151413121119 8 7 6 5 4 3 2 1 0Cond Opcode S Rn Rd Shift_operandopcode 指令操作符编码S 决定指令的操作是否影响CPSR的值Rd 目标寄存器编码Rn 包含第一个操作数的寄存器编码Shift_oprand表示第二个操作数Cond 指令执行的条件编码,详细如下所示条件域EQ Z=1 EqualNE Z=0 Not equal, or unorderedCS/HS C=1 Carry set / Unsigned higher or sameGreat than or equal, orunorderedCC/LO C=0 Carry clear / Unsigned lower Less thanMI N=1 Negative Less thanPL N=0 Positive or zeroGreater than or equal , orunorderedVS V=1 Overflow UnorderedVC V=0 No overflow Not unorderedHI C=1且Z=0 Unsigned higher Greater than, or unordered LS C=0或Z=1 Unsigned lower or same Less than or equalGE N=1且V=1 或N=0且V=0 Signed greater than or equal Greater than or equalLT N=1且V=0 或N=0且V=1 Signed less than Less than , or unorderedGT Z=0或N=V Signed greater than Great thanLE Z=1或N!=V Signed less than or equal Less than or equal , or unorderedAL Always (normally omitted)并行指令前缀S Signed arithmetic modulo 28 or 216 ,sets CPSR GE bitQ Signed saturating arithmeticSH Signed arithmetic, halving resultsU Unsigned arithmetic modulo 28 or 216 ,sets CPSR GE bit UQ Unsigned saturating arithmeticUH Unsigned arithmetic ,halving results批量传输地址模式Block load / store Stack pop / pushIA Increment after FD Full descending IB Increment before ED Empty descending DA Decrement after FA Full ascending DB Decrement before EA Empty ascendingARM 指令寻址方式立即寻址ADD R0,R0,#0x3f R0←R0+0x3f寄存器寻址ADD R0,R1,R2 R0←R1+R2间接寻址ADD R0,R1,[R2] R0←R1+[R2]变址寻址LDR R0,[R1,#4] R0←[R1+4]LDR R0,[R1,#4]!R0←[R1+4]、R1←R1+4LDR R0,[R1] ,#4 R0←[R1]、R1←R1+4LDR R0,[R1,R2] R0←[R1+R2]多寄存器寻址LDMIA R0,{R1,R2,R3,R4} R1←[R0];R2←[R0+4];R3←[R0+8];R4←[R0+12]伪指令及伪操作符号定义GBLA / LCLA 定义一个全局 / 局部的数字变量,并初始化为0GBLL / LCLL 定义一个全局 / 局部的逻辑变量,并初始化为F(假)GBLS / LCLS 定义一个全局 / 局部的字符串变量,并初始化为空SETA / SETL / SETS 给一个数学 / 逻辑 / 字符串变量赋值RLIST对一个通用寄存器列表定义名称,访问次序为根据寄存器的编号由低到高,与排列次序无关数据定义DCB(=)/ DCW(DCWU)分配一片连续的字节 / 半字存储单元并用指定的数据初始化后缀U表示不要求对齐DCFS(DCFSU)/DCFD(DCFDU)分配一片连续的(单 / 双精度的浮点数)字存储单元并用指定的数据初始化DCQ(DCQU)/ DCD(DCDU)用于分配一片以双字 / 字为单位的连续的存储单元并用指定的数据初始化DCDO 分配字内存但愿,初始化为标号基于静态基址寄存器R9的偏移量DCI 和DCD类似,不同处在于DCI内存中的数据被标识为指令SPACE(%)DataSpace SPACE 100 ;分配连续100字节的存储单元并初始化为0MAP(^)MAP 0x100,R0 ;定义结构化内存表首地址的值为0x100+R0FIELD(#) A FIELD 16 ;定义A的长度为16字节控制伪指令IF、ELSE、ENDIFIF 逻辑表达式指令序列1ELSE指令序列2ENDIFIF、ELSE、ENDIF伪指令能根据条件的成立与否决定是否执行某个指令序列。

相关文档
最新文档