ARM指令集详解
- 格式:pdf
- 大小:432.28 KB
- 文档页数:20
ARM寻址方式与指令系统ARM编程模型ARM指令格式和寻址方式ARM指令集Thumb指令集机器指令、伪指令和宏指令机器指令:能被处理器直接执行,而伪指令宏和宏指令不能。
机器指令包括ARM指令集和Thumb指令集;伪指令:在源程序汇编期间,由汇编编译器处理。
其作用是为汇编程序完成准备工作;宏指令:在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。
ARM处理器模式ARM微处理器支持7种工作模式:用户模式、系统模式、快速中断模式、外部中断模式、管理模式、中止模式、未定义指令模式。
除用户模式之外的其余6种称为非用户模式,或特权模式。
在特权模式中,除系统模式之外的其余5种称为异常模式。
处理器的各种工作模式由当前程序状态寄存器CPSR的低5位M[4:0]决定。
工作模式切换:(1)发生异常,处理器自动改变CPSR中M[4:0]的值,进入相应的工作模式;(2)处理器处于特权模式时,用指令向CPSR的M[4:0]字段写入特定的值,进入相应的工作模式。
用户模式时,不能改变工作模式,除非发生异常。
ARM处理器7种工作模式特权模式异常模式用户和系统模式处理器的工作状态从编程的角度讲,ARM处理器工作在两种状态:ARM状态或Thumb状态。
(1)ARM状态:处理器执行32位的ARM指令集时,工作在这种状态。
(2)Thumb状态:处理器执行16位的thumb指令集时,工作在这种状态。
状态切换:通过跳转指令实现。
ARM的寄存器组织37个寄存器:31个通用寄存器,包括程序计数器PC;6个状态寄存器。
寄存器均为32位,分成7组,各工作模式拥有自己的寄存器组,只能访问自己的寄存器组。
有些寄存器是重叠的,有些是工作模式特有的。
在不同的工作模式和处理器状态下,程序员可以访问的寄存器不尽相同。
ARM状态各模式下的寄存器ARM寄存器分类ARM状态各模式下可以访问的寄存器R0~R7通用寄存器R8~R12的两个分组R13、R14的6个分组堆栈指针寄存器R13(SP)链接寄存器R14(LR)R14(LR)的作用作用:保存返回地址例如:1.程序A执行过程中调用程序B;2.程序跳转至标号Lable,执行程序B。
arm架构指令集ARM架构是目前最主流的嵌入式系统架构之一,它具有低功耗、低成本、高性能等优势,深受广大开发者的喜爱。
其中,指令集是ARM 架构的重要组成部分,对开发者而言,掌握各种指令集非常有必要。
接下来,我们将分步骤阐述ARM架构指令集相关的内容。
一、ARM架构概述ARM架构是一种精简指令集架构(RISC),它最初是由英国的ARM 公司于上世纪80年代初提出的,以应对当时高端嵌入式设备市场的需求。
其设计目标是提高能效和计算速度,并实现高度集成化,同时保持指令集设计的简洁性,方便硬件设计者进行系统优化。
二、ARM架构的指令集1. ARM指令集ARM指令集是最早的ARM体系结构,它由32位指令组成,主要应用于嵌入式系统和移动设备领域,是ARM架构中最主流的指令集。
ARM指令集包含了大量的寄存器和指令,如R0-R15、CMP、ADD等。
2. Thumb指令集Thumb指令集是ARM公司在1994年推出的,它主要是针对内存容量较小、功耗控制要求高的环境下使用,它采用16位指令长度,相较于常用的32位长度指令,能降低指令所占用的存储空间,从而节省成本。
Thumb指令集包括了比较特殊的指令,如CBZ、LDRH等。
3. Thumb-2指令集Thumb-2指令集是基于Thumb指令集的扩展版本,既支持16位指令长度,也支持32位指令长度。
Thumb-2指令集是为了兼顾高效和代码密度而设计的。
它采用了一系列新的指令,如MOV、LSL等,并将Thumb 和ARM两种指令集实现了无缝切换,便于编译器进行代码优化。
4. ARMv7-M指令集ARMv7-M指令集是ARM公司最新的嵌入式系统指令集,它在ARM指令集的基础上做了很多优化,提供更加高效、安全、实用的指令集,重点支持通用数学、位操作、存储器、DMA控制等指令。
它可以运行在更加高效的Cortex-M内核上,提供更加强大的性能和更佳的功耗控制。
三、总结在开发嵌入式系统和移动设备时,深入掌握各种指令集是非常有必要的,不同的指令集具有各自的优势和适用场景,开发者应该根据需求进行选择。
常用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指令集6种类型(53种主要助记符):数据处理指令(22种主要助记符)跳转指令(4种主要助记符)Load/Store指令(16种主要助记符)程序状态寄存器指令(2种主要助记符)协处理器指令(5种主要助记符)软件中断指令(2种主要助记符)数据处理指令数据处理指令大致可分为3类:数据传送指令;算术逻辑运算指令;乘法指令比较指令。
数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。
所有ARM数据处理指令均可选择使用S后缀,并影响状态标志。
数据处理指令1MOV 数据传送指令格式:MOV{<cond>}{S} <Rd>,<op1>;功能:Rd=op1op1可以是寄存器、被移位的寄存器或立即数。
例如:MOV R0,#5 ;R0=5MOV R0,R1 ;R0=R1MOV R0,R1,LSL#5 ;R0=R1左移5位数据处理指令22.MVN 数据取反传送指令格式:MVN{<cond>}{S} <Rd>,<op1>;功能:将op1表示的值传送到目的寄存器Rd中,但该值在传送前被按位取反,即Rd=!op1;op1可以是寄存器、被移位的寄存器或立即数。
例如:MVN R0,#0 ;R0=-1数据处理指令33.ADD 加法指令格式:ADD{<cond>}{S} <Rd>,<Rn>,<op2>;功能:Rd=Rn+op2op2可以是寄存器,被移位的寄存器或立即数。
例如:ADD R0,R1,#5 ;R0=R1+5ADD R0,R1,R2 ;R0=R1+R2ADD R0,R1,R2,LSL#5 ;R0=R1+R2左移5位数据处理指令44.ADC 带进位加法指令格式:ADC{<cond>}{S} <Rd>,<Rn>,<op2>;功能:Rd=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即数;carry为进位标志值。
arm指令集类型摘要:一、arm 指令集简介1.arm 指令集的发展历程2.arm 指令集的优势和特点二、arm 指令集的类型1.armv1 和armv2 指令集2.armv3 指令集3.armv4 指令集4.armv5 指令集5.armv6 指令集6.armv7 指令集7.armv8 指令集三、arm 指令集的应用领域1.嵌入式系统2.移动设备3.服务器和数据中心4.物联网设备正文:arm 指令集类型随着科技的飞速发展,arm 指令集在现代处理器中扮演着举足轻重的角色。
arm 指令集以其高性能、低功耗和强大的兼容性在全球范围内得到了广泛的应用。
本文将对arm 指令集的类型进行详细的介绍。
一、arm 指令集简介arm 指令集起源于英国Acorn 计算机公司,后由ARM 公司进行进一步研发和推广。
它具有高性能、低功耗、指令集简单、开发成本低等优点。
arm 指令集在嵌入式系统、移动设备、服务器和数据中心等领域有着广泛的应用。
二、arm 指令集的类型arm 指令集从armv1 到armv8,共经历了八个版本的迭代。
1.armv1 和armv2 指令集:这是arm 指令集的早期版本,主要用于嵌入式系统。
2.armv3 指令集:在armv2 的基础上进行了改进,增加了浮点运算指令。
3.armv4 指令集:引入了Thumb-1 指令集,是一种基于arm 指令集的压缩指令集,可以减少程序的存储空间和运行时间。
4.armv5 指令集:对armv4 指令集进行了优化,提高了性能。
5.armv6 指令集:引入了Thumb-2 指令集,是对thumb-1 指令集的升级,增加了更多的指令,提高了性能。
6.armv7 指令集:在armv6 的基础上进行了改进,引入了VFPv3 和NEON 协处理器,增强了浮点运算和多媒体处理能力。
7.armv8 指令集:这是arm 指令集的最新版本,采用了全新的架构,包括AArch32 和AArch64 两种执行状态,支持64 位计算,显著提高了性能。
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架构是一种基于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:将一个寄存器中的值移动到另一个寄存器中。
(2)ADD:将两个寄存器中的值相加,并将结果存储到另一个寄存器中。
(3)SUB:将两个寄存器中的值相减,并将结果存储到另一个寄存器中。
(4)MUL:将两个寄存器中的值相乘,并将结果存储到另一个寄存器中。
(5)CMP:比较两个寄存器中的值是否相等,并设置条件码。
2. Thumb指令集Thumb指令集是16位的,它可以减小程序大小和内存占用。
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置位相等equal0001 NE Z清零不相等not equal0010 CS C置位⽆符号数⼤于或等于Carry Set0011 CC C清零⽆符号数⼩于0100 MI N置位负数minus0101 PL N清零正数或零plus0110 VS V置位溢出0111 VC V清零没有溢出1000 HI C置位Z清零⽆符号数⼤于high1001 LS Z置位C清零⽆符号数⼩于或等于less1010 GE N等于V 带符号数⼤于或等于1011 LT N不等于V 带符号数⼩于least1100 GT Z清零且(N等于V)带符号数⼤于great1101 LE Z清零或(N不等于V)带符号数⼩于或等于1110 AL 忽略⽆条件执⾏all1111条件码应⽤举例:例:⽐较两个值⼤⼩,并进⾏相应加1处理,C语⾔代码为:if ( a > b ) a++;else b++;对应的ARM指令如下(其中R0中保存a 的值,R1中保存b的值):CMP R0, R1 ; R0与R1⽐较,做R0-R1的操作ADDHI R0, R0, #1 ;若R0 > R1, 则R0 = R0 + 1ADDLS R1, R1, #1 ; 若R0 <= R1, 则R1 = R1 + 1CMP⽐较指令,⽤于把⼀个寄存器的内容和另⼀个寄存器的内容或⼀个⽴即数进⾏⽐较,同时更新CPSR中条件标志位的值。