ARM指令集
- 格式:ppt
- 大小:572.50 KB
- 文档页数:63
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指令集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指令集是一种用于处理器架构的指令集体系结构。
它最初由英国公司ARM Holdings开发,并广泛应用于各种嵌入式系统、移动设备和低功耗应用中。
以下是ARM指令集的发展史:1. ARM1:ARM指令集最早出现在1985年的ARM1处理器上。
ARM1是一款32位处理器,采用精简指令集(RISC)设计理念,具有较低的能耗和成本。
2. ARM2:ARM2处理器于1987年发布,增加了对乘法指令的支持,并引入了缓存技术来提高性能。
3. ARMv3:ARMv3指令集体系结构于1992年推出,支持更多的指令和功能,如虚拟内存管理单元(VMMU)和协处理器。
4. ARMv4:ARMv4指令集体系结构于1995年发布,引入了Thumb指令集,可以以压缩的形式执行16位指令,提高了代码密度和节能效果。
5. ARMv5:ARMv5指令集体系结构于1997年推出,引入了Jazelle技术,使处理器能够直接执行Java字节码。
6. ARMv6:ARMv6指令集体系结构于2002年发布,引入了Thumb-2技术,将16位Thumb指令和32位ARM指令混合使用,提高了代码密度和性能。
7. ARMv7:ARMv7指令集体系结构于2004年发布,引入了NEON SIMD(单指令多数据)扩展指令集,提供更高的并行计算能力。
8. ARMv8:ARMv8指令集体系结构于2011年推出,是一个重要的里程碑,引入了64位处理器架构(AArch64),并保持了与之前32位指令集的向后兼容性。
9. ARMv9:目前(2024年)尚未发布,但ARM Holdings已经透露正在研发ARMv9指令集体系结构。
ARMv9预计将进一步提升性能、安全性和AI加速能力。
上述是ARM指令集的主要发展历程,每个版本都带来了新的功能和改进,使ARM成为全球最受欢迎的处理器架构之一,并广泛应用于各个领域。
arm架构指令集数量ARM架构指令集数量ARM架构是一种广泛应用于嵌入式和移动设备的计算机体系结构,它的指令集被称为ARM指令集。
ARM指令集包括多个版本,涵盖了不同的性能和功耗需求。
据统计,目前ARM架构指令集的数量已经超过了1000条。
ARM指令集的版本分为两类:基于32位的ARM指令集和基于64位的ARM指令集。
其中,32位的ARM指令集包括ARMv4、ARMv5、ARMv6、ARMv7和ARMv8等多个版本,而64位的ARM指令集则包括ARMv8.1-A和ARMv8.2-A两个版本。
在这些版本中,每个版本都有自己的指令集架构和指令集扩展,具体如下:ARMv4指令集:ARMv4是最早的基于32位的ARM指令集,它包括了基础的指令集和Thumb指令集,但没有支持Java虚拟机的Jazelle指令集扩展。
ARMv5指令集:ARMv5是向后兼容ARMv4的一种指令集,它包括Thumb指令集、Java虚拟机支持的Jazelle指令集扩展和增强的指令集架构。
ARMv6指令集:ARMv6是ARMv5的一种改进版指令集,它包括优化的NEON指令集扩展和支持浮点运算的VFP指令集扩展。
ARMv7指令集:ARMv7是ARMv6的一种改进版指令集,它包括增强的VFP指令集扩展、支持虚拟化技术的虚拟化指令集扩展和支持硬件加速的NEON 指令集扩展等。
ARMv8指令集:ARMv8是一种基于64位的ARM指令集,它包括基础的AArch64指令集和向后兼容AArch32指令集。
AArch64是一种全新的指令集架构,它拥有更高的性能和更强的扩展能力,而AArch32则是向后兼容基于32位的ARM指令集。
总之,ARM架构指令集的数量已经超过了1000条,这使得它成为了一种非常灵活的计算机体系结构,可广泛应用于各种嵌入式和移动设备。
FutureWei AI计算平台中,也采用了ARM架构作为AI算法运行的基础。
ARM指令集详解ARM可以用两套指令集:ARM指令集和Thumb指令集。
本文介绍ARM指令集。
在介绍ARM指令集之前,先介绍指令的格式。
1 指令格式(1)基本格式<opcode>{<cond>}{S} <Rd>,<Rn>{,<opcode2>}其中,<>内的项是必须的,{}内的项是可选的,如<opcode>是指令助记符,是必须的,而{<cond>}为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。
opcode 指令助记符,如LDR,STR 等cond 执行条件,如EQ,NE 等S 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响Rd 目标寄存器Rn 第一个操作数的寄存器operand2 第二个操作数指令格式举例如下:LDR R0,[R1] ;读取R1 地址上的存储器单元内容,执行条件ALBEQ DATAEVEN ;跳转指令,执行条件EQ,即相等跳转到DATAEVENADDS R1,R1,#1 ;加法指令,R1+1=R1 影响CPSR 寄存器,带有SSUBNES R1,R1,#0xD;条件执行减法运算(NE),R1-0xD=>R1,影响CPSR 寄存器,带有S(2)第2个操作数在ARM 指令中,灵活的使用第2个操作数能提高代码效率,第2个操作数的形式如下:#immed_8r常数表达式,该常数必须对应8 位位图,即常数是由一个8 位的常数循环移位偶数位得到。
合法常量0x3FC、0、0xF0000000、200、0xF0000001等都是合法常量。
非法常量0x1FE、511、0xFFFF、0x1010、0xF0000010等都是非法常量。
常数表达式应用举例如下:MOV R0,#1 ;R0=1AND R1,R2,#0x0F ;R2 与0x0F,结果保存在R1LDR R0,[R1],#-4 ;读取R1 地址上的存储器单元内容,且R1=R1-4Rm寄存器方式,在寄存器方式下操作数即为寄存器的数值。
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中条件标志位的值。