《ARM汇编指令》PPT课件.ppt

上传人:san****019 文档编号:17252594 上传时间:2020-11-16 格式:PPT 页数:38 大小:781.60KB
收藏 版权申诉 举报 下载
《ARM汇编指令》PPT课件.ppt_第1页
第1页 / 共38页
《ARM汇编指令》PPT课件.ppt_第2页
第2页 / 共38页
《ARM汇编指令》PPT课件.ppt_第3页
第3页 / 共38页
资源描述:

《《ARM汇编指令》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《ARM汇编指令》PPT课件.ppt(38页珍藏版)》请在装配图网上搜索。

1、8.1 ARM寻址方式 1. 立即数寻址 操作数由指令直接给出 MOV R0, #0 xFF ;R0 0 xFF ADD R0, R0, #300 ;R0 300 2. 寄存器寻址 操作数存放在寄存器中 ADD R0, R1, R2 ;R0R1+R2 3. 寄存器移位寻址 寄存器中数据移位后形成操作数 ADD R0, R1, R2 LSR #2 ;R0R1+R2 4 4. 寄存器间接寻址 操作数地址由寄存器给出 例 MOV R2, #0 xC0000018 STR R1, R2 0 x000053A1 0 xC0000010 0 xC0000014 0 xC0000018 0 xC000001

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

3、x00100200 R0 0 x00100200 0 x00100204 0 x00100208 0 x0010020C R1 R3 R4 R5 7. 相对寻址 PC为基地址,指令中地址标号为偏 移量,二者相加形成操作数有效地址。 BL next 8. 堆栈寻址 SP 指示栈顶位置, 4种堆栈操作 0 x12345678 空 SP 栈底 满递减堆栈 空递减堆栈 0 x12345678 空 SP 栈底 地 址 递 增 空 0 x12345678 SP 栈底 空递增堆栈 空 0 x12345678 SP 栈底 满递增堆栈 8.2 ARM指令格式 基本指令格式 s, 操作码 条件域(执行该指 令要满

4、足的条件) 要否影响程序状态 寄存器( CPSR) 目的寄存器 第一源操作数, 必须是寄存器 第二源操作数 1可选 2 指令长度 32bit 3 数据处理类指令通过寄存器移位寻址实现移位操作, ARM不 单独提供移位指令 4 除 Load/Store类指令,其余指令均不能涉及存储器操作数 说明 s , 操作码 条件助记符 标志 含义 0000 EQ Z=1 相等 0001 NE Z=0 不相等 0010 CS/HS C=1 无符号数大于或等于 0011 CC/LO C=0 无符号数小于 0100 MI N=1 负数 0101 PL N=0 正数或零 0110 VS V=1 溢出 0111 VC

5、 V=0 没有溢出 1000 HI C=1,Z=0 无符号数大于 1001 LS C=0,Z=1 无符号数小于或等于 1010 GE N=V 有符号数大于或等于 1011 LT N!=V 有符号数小于 1100 GT Z=0,N=V 有符号数大于 1101 LE Z=1,N!=V 有符号数小于或等于 1110 AL 任何 无条件执行 (指令默认条件 ) 1111 NV 任何 从不执行 (不要使用 ) 对应的汇编代码: CMP R0,R1 ;比较 R0( a) 与 R1( b) ADDHI R0,R0,#1 ;若 R0R1, 则 R0=R0+1 ADDLS R1,R1,#1 ;若 R0R1, 则

6、 R1=R1+1 C代码: If(a b) a+; Else b+; s, 中的 32位立即数是由 8位常数在 32位宽度经过 偶数次循环右移得到( 指令解码后中保存 该常数和移位 信息 );能通过上述算法得到的立即数是有效的,否则 无效。 关于 数据处理指令中的 有三种形式: #imm (立即数寻址) Rm (寄存器寻址) Rm shift (寄存器移位寻址) cond 0 0 1 opcode s Rn Rd Rotate_imm Immed_8 4 4 1 4 4 4 8 关于移位操作 移位不额外花费时 间,且 Rm不受影响 移位次数由立即数 或 Rs决定 桶形移位器 ALU Rd 预

7、处 理 第一 源操 作数 Rm Rn MSB Rm LSB 0 MSB Rm LSB 0 MSB Rm LSB MSB Rm LSB C MSB Rm LSB Rm, shift 的具体形式 LSL ASR LSR ROR RRX C C C 桶形移位器的操作 助记符 功能 移位值 LSL #imm/Rs 逻辑左移 #031 or Rs LSR #imm/Rs 逻辑右移 #031 or Rs ASR #imm/Rs 算术右移 #031 or Rs ROR #imm/Rs 循环逻辑右移 #131 or Rs RRX 扩展循环右移 1 ADD R1, R1, R1, LSL #3 ;R1=R1+R

8、13 SUB R1, R1, R2, LSR R3 ;R1=R1-R2R3 ARM指令一般格式 cond opcode s Rn Rd Rotate_imm Immed_8 条件域 代码域 第一操作数 (基址寄存器 ) 目的寄存器 第二操作数 31 28 27 21 20 19 1615 1211 0 数据处理指令 程序状态寄存器访问指令 加载 /存储指令 跳转指令 协处理器指令 异常中断产生指令 8.3 ARM指令集 数据处理指令 1 数据传送 缺省 s=0不更新 CPSR标志位 立即数 /寄存器 MOVs , 数据传送 Rdop2 MVNs , 数据取非传送 Rdop2 MOV R1,R0

9、 ;R1R0 MOV R0, #0d32 ;R032 MOV R1, R0, LSL #3 ;R1R0*8 MVN R0, #4 ;R0 -5 例 MVN用于 向寄存器送负数 生成掩码 求反码 2 算数运算 指 令 格 式 说 明 操 作 ADDs Rd,Rn,op2 加法 RdRn+op2 ADCs Rd,Rn,op2 带进位加法 RdRn+op2+C SUBs Rd,Rn,op2 减法 RdRn -op2 SBCs Rd,Rn,op2 带进位减法 RdRn -op2-C RSBs Rd,Rn,op2 逆向减法 Rdop2 -Rn RSCs Rd,Rn,op2 带进位逆向减法 Rdop2 -

10、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 ,并影响标志位 ADD R1,R1,R2,LSL #2 ;R1R1+R22 SUBS R0,R0,#240 ;R0R0 -240 ,并影响标志位 SUBS R2,R1,R2 ;R2R1 -R2 ,并影响标志位 RSB R3,R1,#0 xFF00 ;R30 xFF00 -R1 64位数相加:结果存放 R1、 R0 AD

11、DS R0,R0,R2 ;R0 低 32位相加 ,并影响标志位 ADC R1,R1,R3 ;R1 高 32位和 +C RSBS R2,R0,#0 ;R2=-R0 RSC R3,R1,#0 ;R3=-R1- C 3 比较运算 指 令 格 式 说 明 操 作 CMP Rn, op2 比较 Rn-op2 CMN Rn, op2 负数比较 Rn-(-op2) 说明 Rn(寄存器)减去 op2(寄存器 /立即数),结果不保 留,影响标志(参数 s无需显式)。 CMP R1, R2 CMP R0, #50 CMN R1, R2 例 4 逻辑 /测试运算 指 令 格 式 说 明 操 作 ANDs Rd,Rn

12、,op2 逻辑与操作 RdRn R0高位清零,保留最低 2位 AND R0, R1, #0 xFFFF0000 ; 留 R1高 16位,存入 R0 EORNZ R3, R3, #0 x0000000F; 上一结果不为零,将 R3低 4 位取反 BIC R0, R0, #3 ;保留 R0高位,最低 2位清零 将 R2的高 8位移入到 R3低 8位 MOV R1,R2,LSR #24 ORR R3,R1,R3,LSL #8 TST R0, #1 ; R0=偶数? TEQ R0, R1 ; 根据 Z标志判断, Z=1R0=R1? 5 乘法运算 MULs Rd,Rm,Rs RdRm*Rs 32 位乘法

13、 MLA s Rd,Rm,Rs,Rn RdRm*Rs+Rn 32 位乘加 UMULL s RdLo,RdHi,Rm,Rs (RdLo,RdHi) Rm*Rs 64 位无符号乘法 UMLAL s RdLo,RdHi,Rm,Rs (RdLo,RdHi) Rm*Rs+(RdLo,RdHi) 64 位无符号乘加 SMULL s RdLo,RdHi,Rm,Rs (RdLo,RdHi) Rm*Rs 64 位有符号乘法 SMLAL s RdLo,RdHi,Rm,Rs (RdLo,RdHi) Rm*Rs+(RdLo,RdHi) 64 位有符号乘加 说 明 指令中操作数全为寄存器,不允许立即数或寄存器 移位,且

14、 RdRm 对标志 N、 Z产生影响; V不变; C无意义 MUL R1, R2, R3 ;R1=R2 R3,结果的低 32位保存 MLAS R1, R2, R3, R0 ;R1=R2 R3+R0,影响标志位 UMULL R0, R1, R5, R8 ;(R1、 R0)=R5 R8 UMLAL R0, R1, R5, R8 ;(R1、 R0)=R5 R8+(R1、 R0) 例 跳转指令 程序流程跳转 向 PC写入跳转地址(范围 4GB) 分支指令(范围 32MB) 目标地址最低 2位为 0 指 令 格 式 说 明 操 作 B label 分支指令 PC label BL label 带返回的分

15、支指令 LR PC-4, PC label 适用于子程序调用 BX Rm 带状态切 换的分支 指令 PC Rm 根据跳转地址( Rm)的最 低位来切换处理器状态 Label 目标地址(标号或绝对地址) 保存返回地址 Rm最低位 =1 则 T置位, 跳转后进入 Thumb状态 cond 101 L offset 31 28 27 25 24 23 0 关于目标地址 B/BL指令: lable1:0=0b00( ARM地址字边界对齐) BX指令: Rm1:0=0b00 (进入 ARM状态,合法地址) Rm bit0=1 (进入 Thumb状态, PCRm转移到 again标号处 BL pros ;

16、调用子程序 pros CMP R1, #0 BNE next ;R1不为 0跳转到 next MOV R5, #0 x00120005 BX R5 ;转移到 0 x00120004,执行 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, r1 jz stop cmp r0,r1 ja next sub r1,r0 jmp start nest: sub r0,r

17、1 jmp start stop: . 指 令 格 式 说 明 操 作 MRS Rd, psr 读 PSR Rdpsr MSR psr_fields,Rm MSR psr_fields, #imm_8 写 PSR psr_fieldsRm psr_fields#imm_ 8 程序状态寄存器访问 说明 RdR15 psr=CPSR/SPSR fields=“f” ;条件标志位域 PSR31:24 fields=“s” ;状态域 PSR23:16 fields=“x” ;扩展域 PSR15:8 fields=“c” ;控制域 PSR7:0 特权模式下才能写 PSR,不能通过 MSR 指令直接修改

18、T位实现 ARM/Thumb切换 例 子程序中设置 IRQ 使能 IRQ中断 读 CPSR7,置 0写回 enable_IRQ MRS R0, CPSR BIC R0, R0, #0X80 MSR CPSR_c, R0 MOV PC, LR 禁止 IRQ中断 读 CPSR7,置 1写回 disable_IRQ MRS R0, CPSR ORR R0, R0, #0X80 MSR CPSR_c, R0 MOV PC, LR MSR CPSR_c, #0 xD3;切换到管理模式 MSR CPSR_cxsf, R3 ;CPSR=R3 Load/Store指令(有关存储器数的指令) 单寄存器操作指令

19、LDR/STR 灵活传送(字节、半 字、字); 多寄存器访问指令 LDM/STM 现场保护与恢复, 存储器数据块拷贝; 数据交换指令 SWP 寄存器 存储器,常用于多 处理器系统 该类指令实现存储器、 I/O与寄存器数据传输 指 令 格 式 说 明 LDRRd,addr 加载字数据 LDRT Rd,addr 以用户模式加载字数据 LDRBT Rd, addr 以用户模式加载无符号字节 LDRB Rd,addr 加载无符号字节数据 LDRH Rd, addr 加载无符号半字数据 LDRSB Rd, addr 加载有符号字节数据 LDRSH Rd, addr 加载有符号半字数据 单数据加载 Rda

20、ddr addr 代表一种寻址方式 T-用户模式 S-有符号数 B-字节数据( Rd7:0有效, Rd31:8=0 H-半字数据( Rd15:0有效, Rd31:16=0) 缺省 -字数据 关于 addr的形式 LDR , Rn 零偏移 Rn为传送地址, RdRn LDR , Rn, offset! 前索引偏移 RdRn+offset !=RnRn+offset LDR , label 程序相对偏移 偏移量 = 4KB范围 LDR , Rn, offset 后索引偏移 RdRn RnRn+offset Rn=R15则不能” !” Rn 基地址寄存器 例 LDR R0, R1, #7 ;R0R1

21、+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+2 LDRSB R1, R1, -R3 ;R1-R3的字节读出, ;经符号位扩展到 32位后写 ;入 R1 MOV R0, #0 x0000A998 LDR R15, R0 ;程序转移到 0 x0000A998 ;单元指示的地址 前 索 引 后 索 引 零 偏 移 指 令 格 式 说 明 STRRd,addr 存储字数据 STRT Rd,addr 以用户

22、模式存储字数据 STRBT Rd, addr 以用户模式存储字节 STRB Rd,addr 存储字节数据 STRH Rd, addr 存储半字数据 单数据存储 addrRd 数据块加载 /存储 指 令 格 式 说 明 LDMRn!, reglist Rn指示的连续存储单元 STMRn!, Rn指示的连续存储单元 reglist 存储单元地址增量模式 IA 传送后地址 +4 IB 传送前地址 +4 DA 传送后地址 -4 DB 传送前地址 -4 寄存器列表 范围 R0R15(组合) 编号低对应低地址,编 号高对应高地址 !最后地址写回 Rn 用户模式寄存 器,非当前模式 起始地址 ,R15 例

23、利用 LDM/STM进行数据复制 LDR R0, =srcData1 ;设置源操作数地址 LDR R1, =dstData1 ;设置目标地址 LDMIA R0, R2R9 ;加载 8个数据到 R2R9 STMIA R1, R2R9 ;保存 R2R9到目标地址 srcData1 srcData2 srcData3 srcData8 R2 R3 R4 R9 8x 32B yte R2 R3 R4 R9 dstData1 dstData2 dstData3 dstData8 堆栈加载 /存储操作 指 令 格 式 说 明 LDMR13!,reglist 出栈操作 STMR13!,reglist 入栈操

24、作 堆栈指针增量模式 FA 满递增堆栈 EA 空递增堆栈 FD 满递减堆栈 ED 空递减堆栈 R13用作堆栈指针 SP,指示栈顶 xx xx xx SP xx xx xx SP xx xx xx SP xx xx xx SP 地址 高 满递增 空递增 空递减 满递减 堆栈工作方式以入栈为准, 入栈出栈方式统一 例 STMIB R5!, R0,R1,R2 LDMDA R5!, R2,R1,R0 STMFD SP!, R0R2,LR ;保护现场, R0R7、 LR入栈 LDMFD SP!, R0R2,PC ;恢复现场,异常处理返回 0 x00001001 0 x00001002 0 x000010

25、03 0 x0005B008 0 x01600100 R0 R1 R2 LR SP 0 x0005B008 0 x00001003 0 x00001002 0 x00001001 xx 0 x016000F0 0 x016000F4 0 x016000F8 0 x016000FC 0 x01600100 SP 入 栈 后 数据交换 (寄存器 存储器 ) 指 令 格 式 说 明 操 作 SWPcond Rd, Rm, Rn 字数据交换 RdRn , RnRm SWPcond B Rd, Rm, Rn 字节数据交换 说明 1 RnRm或 Rd, Rm可与 Rd相同,此时 Rd Rn 2 字节交换:

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

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!