ARM汇编指令总结

您所在的位置:网站首页 SAL指令英文全称 ARM汇编指令总结

ARM汇编指令总结

2023-12-31 15:08| 来源: 网络整理| 查看: 265

一、什么是指令集

在计算机的世界里,CPU只能识别二进制的机器码,对于一个32位ARMv7架构来说,每一个指令由32个0或1的组合组成,CPU的设计者会指定一组固定的组合格式,告诉CPU完成什么动作,这组固定格式的0或1的组合就是指令集。 对于程序员来说,阅读二进制的机器码是一个相当大的挑战,为了便于编写程序,最早的汇编语言就诞生了,比如 ADD R0,R1,R2 这句话的的作用是寄存器R1、R2里的值求和后,存储到R0里面。 汇编语言通过编译器的编译,转换成CPU能够识别的二进制机器码。

二、ARM指令集版本历史

计算机完成一定的操作通过指令来实现,不同的指令方式被称为计算机架构,目前计算机主要有三大架构阵营,一是CISC(Complex Instruction Set Computers)复杂指令集架构,另一种是RISC(Reduced Instruction Set Computers)精简指令集架构,此外还有一个国内比较火的MIPS指令集。采用CISC架构的代表是Intel和AMD的X86指令集,采用RISC架构的代表是ARM指令集和PowerPC指令集。ARM架构从诞生到今天从V1版本已经升级到了V8版本,各版本代表的分支型号如下表所示。

架构处理器家族历史ARMv1ARM1最早由Acorn 计算机公司设计,1985年开发出样本。ARMv2ARM2、ARM31986年开发出ARM2,32位数据,26位地址空间。ARMv3ARM6、ARM71990年设计团队组成新公司Advanced RISC Machines Ltd. (安某国际)ARMv4StrongARM、ARM7TDMI、ARM9TDMI ARMv5ARM7EJ、ARM9E、ARM10E、XScale ARMv6ARM11、ARM Cortex-M ARMv7ARM Cortex-A、ARM Cortex-M、ARM Cortex-R ARMv8Cortex-A35、Cortex-A50系列[14]、Cortex-A72、Cortex-A73 

从图中可以看出,Cortex-A9 架构的CPU采用的是ARMv7的指令集,目前高性能的64位视频处理,比如Cortex-A72,采用的是ARMv8指令集。 高版本的指令集会向下兼容低版本,在低版本的基础上增加了更多特殊用途的指令集,比如浮点运算,CPU加速、数据安全等特殊用途的指令集。

在这里插入图片描述

三、ARM指令格式

ARM指令格式形式如下:

指令 {条件} {S} {目的Register},{OP1},{OP2}

括号中的操作都是可选项,对应的32机器码,哪里代表指令,哪里代表条件,哪里代表操作数呢? 请看下表。

313029282726252423222120191817161514131211109876543210Cond   OpcodeSRnRdShift_operand

不同域的具体意义如下表所示:

[31:28]Cond条件域,用来定义指令执行的条件[27:25]指令类别,跳转指令、数据处理指令、移位指令等等[24:21]Opcode指令域,代表具体的指令,比如ADD,MOV等。[20]S指令的后缀,可加可不加,指令后缀带S表示该指令的结果会影响CPSR寄存器。[19:16]Rn第一个操作数(OP1)的寄存器编码[15:12]Rd目标寄存器编码[11:0]Shift_oprand第二个操作数(OP2)

下面给出一个从文档中抓出的表格,更详细的总结了指令格式。 在这里插入图片描述

四、特殊寄存器–CPSR

每种架构的CPU都有一组特殊用途的寄存器,用来存放从存储器读来数据或者指令编码,在ARM中,有一个特殊的寄存器叫CPSR(current program status register),用来存放当前指令执行的状态。比如存放数学运算结果的正负、借位、溢出等情况,详细信息如下表所示。

CPSR fieldF (Flags field mask byte)S (Stats field mask byte)X (Extension field mask byte)C (control field mask byte)CPSR313029282726252423222120191817161514131211109876543210意义NZCVQDNZ (RAZ) 系统扩展用IFTM4M3M2M1M0 CPSR各bit详细意义N 当前指令运算结果为负时,N = 1; 结果为非负时,N = 0Z 运算结果为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]0b10000User0b10001FIQ0b10010IRQ0b10011Supervisor0b10111Abort0b11011Undefined0b11111System 五、ARM指令举例 .data /* the .data section is dynamically created and its addresses cannot be easily predicted */ var1: .word 3 /* variable 1 in memory */ var2: .word 4 /* variable 2 in memory */ .text /* start of the text (code) section */ .global _start _start: ldr r0, adr_var1 @ 加载adr_var1的内存地址到寄存器R0中。load the memory address of var1 via label adr_var1 into R0 ldr r1, adr_var2 @ 加载adr_var2的内存地址到寄存器R1中。load the memory address of var2 via label adr_var2 into R1 ldr r2, [r0] @ 加载地址为adr_var1的内存中的数据到R2中。load the value (0x03) at memory address found in R0 to register R2 str r2, [r1] @ R2中的数据保存到加载地址为adr_var2的内存中。store the value found in R2 (0x03) to the memory address found in R1 bkpt adr_var1: .word var1 /* address to var1 stored here */ adr_var2: .word var2 /* address to var2 stored here */

详细过程如下面的动画所示 在这里插入图片描述

六、ARM指令详表 1. 条件域(Cond)描述 31302928Cond域描述0000EQZ=1Equal0001NEZ=0Not equal, or unordered0010CS/HSC=1Carry set / Unsigned higher or sameGreat than or equal, or unordered0011CC/LOC=0Carry clear / Unsigned lowerLess than0100MIN=1NegativeLess than0101PLN=0Positive or zeroGreater than or equal , or unordered0110VSV=1OverflowUnordered0111VCV=0No overflowNot unordered1000HIC=1且Z=0Unsigned higherGreater than, or unordered1001LSC=0或Z=1Unsigned lower or sameLess than or equal1010GEN=1且V=1 或N=0且V=0Signed greater than or equalGreater than or equal1011LTN=1且V=0 或N=0且V=1Signed less thanLess than , or unordered1100GTZ=0或N=VSigned greater thanGreat than1101LEZ=1或N!=VSigned less than or equalLess than or equal , or unordered1110AL Always (unconditional) 2. 数据处理类指令编码

其它类指令请参阅 ARM Articheture Reference Manual

24232221Opcode域描述0000ANDLogical AND0001EORLogical Exclusive OR0010SUBSubtract0011RSBReverse Subtract0100ADDAdd0101ADCAdd with Carry0110SBCSubtract with Carry0111RSCReverse Subtract with Carry1000TSTTest1001TEQTest Equivalence1010CMPCompare1011CMNCompare Negated1100ORRLogical OR1101MOVMove1110BICBit Clear1111MVNMove Not 3. 指令汇总表 指令格式:  指令{条件}{S} {目的Register},{OP1},{OP2}"{ }"中的内容可选。即,可以不带条件只有目的寄存器,或只有目的寄存器和操作数1,也可以同时包含所有选项。“S” 决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值 助记符英文全称示例、功能跳转指令BBranchB  Label ;程序无条件跳转到标号Label处执行BLBranch with LinkBL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中BLXBranch with Link and exchangeBLX  Label ;从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中BXBranch and exchangeBX  Label ;跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令数据处理MOVMoveMOV R1,R0,LSL#3 ;将寄存器R0的值左移3位后传送到R1MVNMove NOTMVN R0,#0 ;将立即数0取反传送到寄存器R0中,完成后R0=-1CMPCompareCMP R1,R0  ;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位CMNCompare negativeCMN R1,R0  ;将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位TSTTestTST R1,#0xffe ;将寄存器R1的值与立即数0xffe按位与,并根据结果设置CPSR的标志位TEQTest equivalenceTEQ  R1,R2 ;将寄存器R1的值与寄存器R2的值按位异或,并根据结果设置CPSR的标志位ADDAddADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3