ARM汇编指令课件

上传人:新** 文档编号:578349497 上传时间:2024-08-24 格式:PPT 页数:38 大小:281KB
返回 下载 相关 举报
ARM汇编指令课件_第1页
第1页 / 共38页
ARM汇编指令课件_第2页
第2页 / 共38页
ARM汇编指令课件_第3页
第3页 / 共38页
ARM汇编指令课件_第4页
第4页 / 共38页
ARM汇编指令课件_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《ARM汇编指令课件》由会员分享,可在线阅读,更多相关《ARM汇编指令课件(38页珍藏版)》请在金锄头文库上搜索。

1、8.1 ARM8.1 ARM寻址方式寻址方式1. 1. 立即数寻址立即数寻址操作数由指令直接给出操作数由指令直接给出 MOV R0, #0xFFMOV R0, #0xFF;R0 0xFF;R0 0xFFADD R0, R0, #300ADD R0, R0, #300 ;R0 300;R0 3002. 寄存器寻址 操作数存放在寄存器中 ADD R0, R1, R2;R0R1+R23. 寄存器移位寻址寄存器中数据移位后形成操作数 ADD R0, R1, R2 LSR #2;R0R1+R244. 寄存器间接寻址 操作数地址由寄存器给出例MOV R2, #0xC0000018STR R1, R20x0

2、00053A10x000053A10xC00000100xC00000140xC00000180xC000001C0xC00000200xC0000018R20x000053A1R15. 基址变址寻址 寄存器内容与指令给出的偏移量相加形成操作数地址LDR R0, R1, #4; R0R1+4LDR R0, R1, #4; R0R1, R1R1+4LDR R0, R1, R2; R0R1+R2偏移量由12位表示,即范围4K6. 多寄存器寻址 完成多个寄存器传送(多达16个寄存器)LDMIA R0,R1,R3-R5;R1R0, R3R0+4;R4R0+8, R5R0+12数据数据数据数据A A数据

3、数据数据数据B B数据数据数据数据C C 数据数据数据数据D D数据数据数据数据A A数据数据数据数据B B数据数据数据数据C C 数据数据数据数据D D0x00100200R00x001002000x001002040x001002080x0010020CR1R3R4R57. 相对寻址PC为基地址,指令中地址标号为偏移量,二者相加形成操作数有效地址。BL next8. 堆栈寻址SP 指示栈顶位置,4种堆栈操作0x123456780x12345678空空空空SP栈底满递减堆栈空递减堆栈0x123456780x12345678空空空空SP栈底地址递增空空空空0x12345678 0x123456

4、78 SP栈底空递增堆栈空空空空0x12345678 0x12345678 SP栈底满递增堆栈8.2 ARM8.2 ARM指令格式指令格式u 基本指令格式基本指令格式s,操作码条件域(执行该指令要满足的条件)要否影响程序状态寄存器(CPSR)目的寄存器第一源操作数,必须是寄存器第二源操作数1可选2 指令长度32bit3 数据处理类指令通过寄存器移位寻址实现移位操作,ARM不单独提供移位指令4 除Load/Store类指令,其余指令均不能涉及存储器操作数 说明s,操作码操作码条件助记符条件助记符标志标志含义含义00000000EQEQZ=1Z=1相等相等00010001NENEZ=0Z=0不相等

5、不相等00100010CS/HSCS/HSC=1C=1无符号数大于或等于无符号数大于或等于00110011CC/LOCC/LOC=0C=0无符号数小于无符号数小于01000100MIMIN=1N=1负数负数01010101PLPLN=0N=0正数或零正数或零01100110VSVSV=1V=1溢出溢出01110111VCVCV=0V=0没有溢出没有溢出10001000HIHIC=1,Z=0C=1,Z=0无符号数大于无符号数大于10011001LSLSC=0,Z=1C=0,Z=1无符号数小于或等于无符号数小于或等于10101010GEGEN=VN=V有符号数大于或等于有符号数大于或等于 1011

6、1011LTLTN!=VN!=V有符号数小于有符号数小于 11001100GTGTZ=0,N=VZ=0,N=V有符号数大于有符号数大于 11011101LELEZ=1,N!=VZ=1,N!=V有符号数小于或等于有符号数小于或等于 11101110ALAL任何任何无条件执行无条件执行 ( (指令默认条件指令默认条件) ) 11111111NVNV任何任何从不执行从不执行( (不要使用不要使用) ) 对应的汇编代码:CMP R0,R1 ;比较R0(a)与R1(b)ADDHI R0,R0,#1 ;若R0R1,则R0=R0+1ADDLS R1,R1,#1 ;若R0R1,则R1=R1+1C C代码:代码

7、:If(a b) a+; Elseb+;s,中的32位立即数是由8位常数在32位宽度经过偶数次循环右移得到(指令解码后中保存指令解码后中保存该常数和移位该常数和移位信息信息);能通过上述算法得到的立即数是有效的,否则无效。u 关于关于数据处理指令中的有三种形式:#imm (立即数寻址)Rm (寄存器寻址)Rm shift (寄存器移位寻址)condcond 0 00 01 1 opcodeopcode s sRnRn RdRd Rotate_immRotate_immImmed_8Immed_8 4 4 1 4 4 4 8u 关于移位操作关于移位操作 移位不额外花费时间,且Rm不受影响 移位次

8、数由立即数或Rs决定桶形移位器桶形移位器ALURd预预处处理理第一第一源操源操作数作数RmRnMSB Rm LSB0MSB Rm LSB0MSB Rm LSBMSB Rm LSBCMSB Rm LSBRm, shift 的具体形式LSLASRLSRRORRRXCCC桶形移位器的操作桶形移位器的操作助记符助记符功能功能移位值移位值LSL #imm/RsLSL #imm/Rs逻辑左移逻辑左移#031 or Rs#031 or RsLSR #imm/RsLSR #imm/Rs逻辑右移逻辑右移#031 or Rs#031 or RsASR #imm/RsASR #imm/Rs算术右移算术右移#031

9、or Rs#031 or RsROR #imm/RsROR #imm/Rs循环逻辑右移循环逻辑右移#131 or Rs#131 or RsRRXRRX扩展循环右移扩展循环右移1 1ADDR1, R1, R1, LSL #3 ;R1=R1+R13SUBR1, R1, R2, LSR R3 ;R1=R1-R2R3ARM指令一般格式 condcondopcodeopcodes sRnRn RdRd Rotate_immRotate_immImmed_8Immed_8条件域代码域第一操作数(基址寄存器)目的寄存器第二操作数31 28 27 21 20 19 1615 1211 0数据处理指令程序状态寄

10、存器访问指令加载/存储指令跳转指令协处理器指令异常中断产生指令8.3 ARM8.3 ARM指令集指令集u数据处理指令数据处理指令数据处理指令数据处理指令1 数据传送缺省缺省s=0不更新不更新CPSR标志位标志位立即数立即数/寄存器寄存器MOVs , MOVs , 数据传送数据传送Rdop2Rdop2MVNs , MVNs , 数据取非传送数据取非传送Rdop2Rdop2MOV R1,R0;R1R0MOV R0, #0d32;R032MOV R1, R0, LSL #3;R1R0*8MVNR0, #4;R0-5例MVN用于用于向寄存器送负数向寄存器送负数生成掩码生成掩码求反码求反码2 算数运算指

11、指 令令 格格 式式说说 明明操操 作作ADDADDsconds Rd,Rn,op2 Rd,Rn,op2加法加法RdRn+op2RdRn+op2ADCADCss Rd,Rn,op2 Rd,Rn,op2带进位加法带进位加法RdRn+op2+CRdRn+op2+CSUBSUBss Rd,Rn,op2 Rd,Rn,op2减法减法RdRn-op2RdRn-op2SBCSBCss Rd,Rn,op2 Rd,Rn,op2带进位减法带进位减法RdRn-op2-CRdRn-op2-CRSBRSBss Rd,Rn,op2 Rd,Rn,op2逆向减法逆向减法Rdop2-RnRdop2-RnRSCRSCss Rd,

12、Rn,op2 Rd,Rn,op2带进位逆向减法带进位逆向减法Rdop2-Rn-CRdop2-Rn-C说明选s,影响NVCZ标志,除非Rd=R15(异常模式下,恢复标志);对标志C的影响:ADD/ADC C=1 有进位,C=0 无进位;SUB/SBC/RSC C=1 无借位,C=0 有借位例ADDS R1,R1,#1020;R1R1+1020,并影响标志位ADDR1,R1,R2,LSL #2;R1R1+R22SUBS R0,R0,#240;R0R0-240 ,并影响标志位 SUBS R2,R1,R2;R2R1-R2 ,并影响标志位RSB R3,R1,#0xFF00 ;R30xFF00-R164位

13、数相加:结果存放R1、R0ADDS R0,R0,R2 ;R0低32位相加,并影响标志位ADCR1,R1,R3;R1高32位和+CRSBS R2,R0,#0 ;R2=-R0RSCR3,R1,#0 ;R3=-R1- C3 比较运算指指 令令 格格 式式说说 明明操操 作作CMPCMP cond Rn, op2Rn, op2比较比较Rn-op2Rn-op2CMNCMN cond Rn, op2Rn, op2负数比较负数比较Rn-(-op2)Rn-(-op2)说明Rn(寄存器)减去op2(寄存器/立即数),结果不保留,影响标志(参数s无需显式)。CMP R1, R2CMP R0, #50CMN R1,

14、 R2例4 逻辑/测试运算指指 令令 格格 式式说说 明明操操 作作ANDANDsconds Rd,Rn,op2 Rd,Rn,op2逻辑与操作逻辑与操作RdRn & op2RdRn & op2ORRORRsconds Rd,Rn,op2 Rd,Rn,op2逻辑或操作逻辑或操作RdRn | op2RdRn | op2EOREORsconds Rd,Rn,op2 Rd,Rn,op2逻辑异或操作逻辑异或操作RdRn op2RdRn op2BICBICsconds Rd,Rn,op2 Rd,Rn,op2位清除位清除RdRn & (op2)RdRn & (op2)TSTTST Rn, op2Rn, op

15、2位测试指令位测试指令标标志志Rn & op2Rn & op2TEQTEQ cond Rn, op2Rn, op2相等测试指令相等测试指令标标志志Rn op2Rn op2AND运算通常用于某些位置0;ORR运算通常用于某些位置1;EOR运算通常用于某些位取反;TST/TEQ与AND/EOR作相同运算,影响标志,不保留结果。例AND R0, R0, #3;R0高位清零,保留最低2位AND R0, R1, #0xFFFF0000 ; 留R1高16位,存入R0EORNZ R3, R3, #0x0000000F; 上一结果不为零,将R3低4位取反BIC R0, R0, #3;保留R0高位,最低2位清零

16、将R2的高8位移入到R3低8位MOV R1,R2,LSR #24 ORR R3,R1,R3,LSL #8TST R0, #1; R0=偶数?TEQ R0, R1; 根据Z标志判断,Z=1R0=R1?5 乘法运算MULMULss Rd,Rm,Rs Rd,Rm,RsRdRm*Rs 32RdRm*Rs 32位乘法位乘法 MLA MLA ss Rd,Rm,Rs,Rn Rd,Rm,Rs,RnRdRm*Rs+Rn 32RdRm*Rs+Rn 32位乘加位乘加 UMULL UMULL ss RdLo,RdHi,Rm,Rs RdLo,RdHi,Rm,Rs(RdLo,RdHi) Rm*Rs 64(RdLo,RdH

17、i) Rm*Rs 64位无符号乘法位无符号乘法UMLAL UMLAL ss RdLo,RdHi,Rm,Rs RdLo,RdHi,Rm,Rs (RdLo,RdHi) Rm*Rs+(RdLo,RdHi) 64 (RdLo,RdHi) Rm*Rs+(RdLo,RdHi) 64位无符号乘加位无符号乘加SMULL SMULL ss RdLo,RdHi,Rm,Rs RdLo,RdHi,Rm,Rs(RdLo,RdHi) Rm*Rs 64(RdLo,RdHi) Rm*Rs 64位有符号乘法位有符号乘法SMLAL SMLAL ss RdLo,RdHi,Rm,Rs RdLo,RdHi,Rm,Rs(RdLo,RdH

18、i) Rm*Rs+(RdLo,RdHi) 64(RdLo,RdHi) Rm*Rs+(RdLo,RdHi) 64位有符号乘加位有符号乘加说明指令中操作数全为寄存器,不允许立即数或寄存器移位,且RdRm对标志N、Z产生影响;V不变;C无意义MULR1, R2, R3 ;R1=R2R3,结果的低32位保存MLAS R1, R2, R3, R0 ;R1=R2R3+R0,影响标志位UMULL R0, R1, R5, R8 ;(R1、R0)=R5R8 UMLAL R0, R1, R5, R8 ;(R1、R0)=R5R8+(R1、R0)例u 跳转指令跳转指令跳转指令跳转指令程序流程跳转程序流程跳转向PC写入

19、跳转地址(范围4GB)分支指令(范围32MB)目标地址最低2位为0 指指 令令 格格 式式说说 明明操操 作作BB cond label label分支指令分支指令分支指令分支指令PCPClabellabelBLBL cond labellabel带返回的带返回的带返回的带返回的分支指令分支指令分支指令分支指令LRLRPC-4PC-4,PCPClabellabel适用于子程序调用适用于子程序调用适用于子程序调用适用于子程序调用BXBX cond RmRm带状态切带状态切带状态切带状态切换的分支换的分支换的分支换的分支指令指令指令指令PCPCRmRm根据跳转地址(根据跳转地址(根据跳转地址(根据

20、跳转地址(RmRm)的最)的最)的最)的最低位来切换处理器状态低位来切换处理器状态低位来切换处理器状态低位来切换处理器状态Label 目标地址(标号或绝对地址)保存返回地址Rm最低位=1 则T置位,跳转后进入Thumb状态condcond101101L Loffsetoffset31 28 27 25 24 23 0l 关于目标地址B/BL指令:lable1:0=0b00(ARM地址字边界对齐)BX指令:Rm1:0=0b00 (进入ARM状态,合法地址)Rm bit0=1 (进入Thumb状态,PCRm&0xFFFFFFFE)l 关于跳转范围24位offset按符号位扩展为32位后再左移2位形

21、成的值加到PC(即225=33554432)L=0 保存返回地址L=1 不保存B again;转移到again标号处BL pros;调用子程序prosCMP R1, #0BNE next;R1不为0跳转到nextMOV R5, #0x00120005BX R5;转移到0x00120004,执行Thumb指令例start cmp r0, r1 ;if r0 r1 subgt r0, r0, r1 ;subtract r1 from r0 sublt r1, r1, r0 ;else subtract r0 from r1 bne start start: cmp r0, r1jz stopcmp

22、 r0,r1ja nextsub r1,r0jmp startnest:sub r0,r1jmp startstop:.指指 令令 格格 式式说说 明明操操 作作MRS Rd, psrMRS Rd, psr读读PSRPSR RdpsrRdpsrMSR psr_fields,RmMSR psr_fields,RmMSR psr_fields, #imm_8MSR psr_fields, #imm_8写写PSRPSRpsr_fieldsRmpsr_fieldsRmpsr_fields#imm_8psr_fields#imm_8u 程序状态寄存器访问程序状态寄存器访问程序状态寄存器访问程序状态寄存器

23、访问说明RdR15psr=CPSR/SPSRfields=“f” ;条件标志位域PSR31:24fields=“s” ;状态域PSR23:16fields=“x” ;扩展域PSR15:8fields=“c” ;控制域PSR7:0特权模式下才能写PSR,不能通过MSR指令直接修改T位实现ARM/Thumb切换例子程序中设置IRQ使能IRQ中断读CPSR7,置0写回enable_IRQMRS R0, CPSRBICR0, R0, #0X80MSR CPSR_c, R0MOV PC, LR禁止IRQ中断读CPSR7,置1写回disable_IRQMRS R0, CPSRORR R0, R0, #0X

24、80MSR CPSR_c, R0MOV PC, LRMSRCPSR_c, #0xD3;切换到管理模式MSRCPSR_cxsf, R3 ;CPSR=R3u Load/StoreLoad/StoreLoad/StoreLoad/Store指令(有关存储器数的指令)指令(有关存储器数的指令)指令(有关存储器数的指令)指令(有关存储器数的指令)单寄存器操作指令LDR/STR灵活传送(字节、半字、字);多寄存器访问指令LDM/STM现场保护与恢复,存储器数据块拷贝;数据交换指令SWP寄存器存储器,常用于多处理器系统该类指令实现存储器、I/O与寄存器数据传输指指 令令 格格 式式说说 明明LDRLDRco

25、ndRd,addrRd,addr加载字数据加载字数据LDRLDRcondT T Rd,addr Rd,addr以用户模式加载字数据以用户模式加载字数据LDRLDRcondBTBT Rd, addr Rd, addr 以用户模式加载无符号字节以用户模式加载无符号字节LDRLDRcondB B Rd,addr Rd,addr 加载无符号字节数据加载无符号字节数据LDRLDRcondH H Rd, addr Rd, addr 加载无符号半字数据加载无符号半字数据LDRLDRcondSBSB Rd, addr Rd, addr 加载有符号字节数据加载有符号字节数据LDRLDRcondSHSH Rd,

26、addr Rd, addr加载有符号半字数据加载有符号半字数据l单数据加载 Rdaddr addr代表一种寻址方式 T-用户模式S-有符号数B-字节数据(Rd7:0有效,Rd31:8=0H-半字数据(Rd15:0有效,Rd31:16=0)缺省-字数据 关于addr的形式LDR , RnLDR , Rn零偏移零偏移零偏移零偏移 Rn Rn为传送地址,为传送地址,RdRnRdRnLDR , Rn, offset!LDR , Rn, offset!前索引偏移前索引偏移前索引偏移前索引偏移 RdRn+offsetRdRn+offset!=RnRn+offset!=RnRn+offsetLDR , la

27、belLDR , label程序相对偏移程序相对偏移程序相对偏移程序相对偏移偏移量偏移量=4KB=4KB范围范围LDR , Rn, offsetLDR , Rn, offset后索引偏移后索引偏移后索引偏移后索引偏移 RdRnRdRnRnRn+offsetRnRn+offsetRn=R15则不能”!”Rn 基地址寄存器例LDR R0, R1, #7;R0R1+7(R1不变)LDR R0, R1, #7!;R0R1+7(R1R1+7)LDR R0, R1, #7;R0R1(R1R1+7)LDRH R6, R2, #2 ;将R2指向的半字存入R6, ;高16位0扩展 R2=R2+2LDRSB R1

28、, R1, -R3;R1-R3的字节读出,;经符号位扩展到32位后写;入R1MOV R0, #0x0000A998LDR R15, R0;程序转移到0x0000A998;单元指示的地址前前索索引引后后索索引引零零偏偏移移指指 令令 格格 式式说说 明明STRSTRcondRd,addrRd,addr存储字数据存储字数据STRSTRcondT T Rd,addr Rd,addr以用户模式存储字数据以用户模式存储字数据STRSTRcondBTBT Rd, addr Rd, addr 以用户模式存储字节以用户模式存储字节STRSTRcondB B Rd,addr Rd,addr 存储字节数据存储字节

29、数据STRSTRcondH H Rd, addr Rd, addr 存储半字数据存储半字数据l单数据存储 addrRdl数据块加载/存储指指 令令 格格 式式说说 明明LDMLDMcondRn!,Rn!, reglistreglistRnRn指示指示的连续存储单元的连续存储单元STMSTMcondRn!,Rn!, RnRn指指示示的的连连续续存存储储单元单元 reglistreglist 存储单元地址增量模式IA 传送后地址+4IB 传送前地址+4DA 传送后地址-4DB 传送前地址-4寄存器列表 范围R0R15(组合)编号低对应低地址,编号高对应高地址!最后地址写回Rn用户模式寄存器,非当前

30、模式起始地址,R15例利用LDM/STM进行数据复制LDR R0, =srcData1;设置源操作数地址LDR R1, =dstData1;设置目标地址LDMIA R0, R2R9;加载8个数据到R2R9STMIA R1, R2R9;保存R2R9到目标地址srcData1srcData1srcData2srcData2srcData3srcData3srcData8srcData8R2R2R3R3R4R4R9R98x32ByteR2R2R3R3R4R4R9R9dstData1dstData1dstData2dstData2dstData3dstData3dstData8dstData8l堆栈加

31、载/存储操作指指 令令 格格 式式说说 明明LDMLDMcondR13!,reglistR13!,reglist出栈操作出栈操作STMSTMcondR13!,reglistR13!,reglist 入栈操作入栈操作堆栈指针增量模式FA 满递增堆栈EA 空递增堆栈FD 满递减堆栈ED 空递减堆栈R13用作堆栈指针SP,指示栈顶xxxxxxSPxxxxxxSPxxxxxxSPxxxxxxSP地址高满递增满递增空递增空递增空递减空递减满递减满递减堆栈工作方式以入栈为准,堆栈工作方式以入栈为准,入栈出栈方式统一入栈出栈方式统一例STMIB R5!, R0,R1,R2 LDMDA R5!, R2,R1,

32、R0STMFD SP!, R0R2,LR ;保护现场,R0R7、LR入栈LDMFD SP!, R0R2,PC ;恢复现场,异常处理返回0x000010010x000010010x000010020x000010020x000010030x000010030x0005B0080x0005B0080x016001000x01600100R0R1R2LRSP0x0005B0080x0005B0080x000010030x000010030x000010020x000010020x000010010x00001001xxxx0x016000F00x016000F40x016000F80x016000F

33、C0x01600100SP入栈后l数据交换(寄存器存储器)指指指指 令令令令 格格格格 式式式式说说说说 明明明明操操操操 作作作作SWPSWPcond cond Rd, Rm, Rn Rd, Rm, Rn 字数据交字数据交换换RdRnRdRn,RnRm RnRm SWPSWPcond B cond B Rd, Rm, Rn Rd, Rm, Rn 字字节节数据交数据交换换说明1 RnRm或Rd,Rm可与Rd相同,此时Rd Rn2 字节交换:Rn单元的字节数据Rd(高24位清零),Rm中低8位 Rn单元例SWP R0, R1, R2;R0 R2, R2R1SWP R1, R1, R2;R1 R2

34、, R2R1u异常产生指令异常产生指令异常产生指令异常产生指令软中断指令 主要用于用户程序调用操作系统的系统服务;切换到管理模式,将CPSR保存到管理模式的SPSR中,然后程序跳转到SWI异常入口。不影响条件码标志SWI断点中断指令产生预取异常,用于设置断点(程序调试)BKPT ARM指令系统总结指令系统总结1 ARM 指令长度32b2 绝大部分指令有选项,算数逻辑运算指令有s选项3 部分指令有附带操作,如乘加,如数据加载的地址回写(选项!)4 目的寄存器Rd,第一源操作数Rn(寄存器),第二源操作数op2在不同类型指令中的相互位置不尽相同5 第二源操作数可以是#imm(满足要求的32b无符号常量)或Rm(包括移位操作的寄存器数)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号