ARM汇编指令总结 |
您所在的位置:网站首页 › SAL指令英文全称 › ARM汇编指令总结 |
一、什么是指令集
在计算机的世界里,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指令格式形式如下: 指令 {条件} {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)下面给出一个从文档中抓出的表格,更详细的总结了指令格式。 每种架构的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 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 |