ARM指令集详解ppt课件

上传人:资****亨 文档编号:132779554 上传时间:2020-05-20 格式:PPT 页数:31 大小:46KB
返回 下载 相关 举报
ARM指令集详解ppt课件_第1页
第1页 / 共31页
ARM指令集详解ppt课件_第2页
第2页 / 共31页
ARM指令集详解ppt课件_第3页
第3页 / 共31页
ARM指令集详解ppt课件_第4页
第4页 / 共31页
ARM指令集详解ppt课件_第5页
第5页 / 共31页
点击查看更多>>
资源描述

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

1、 ARM指令集详解 ARM指令集分类 数据处理指令Load Store指令状态寄存器操作指令转移指令软中断指令协处理器指令 数据处理和逻辑指令 主要指加法 减法 乘法 移位 比较 测试 传送 逻辑指令 ADD ADCSUB SBC RSB RSCMUL UMULL UMLAL SMULL SMLALLSL LSR ASL ASR ROR RRXCMP CMNTEQ TSTMOV MVN 数据处理指令 ADD ADD 条件 S Rd Rn op 2ADD将把两个操作数加起来 把结果放置到目的寄存器中 操作数Rn是一个寄存器 操作数op2可以是一个寄存器 被移位的寄存器 或一个立即值 ADDSR0

2、 R1 R2 R0 R1 R2影响标志位ADDR0 R1 256 R0 R1 256ADDR0 R2 R3 LSL 1 R0 R2 R3 1 数据处理指令 ADC ADC 条件 S Rd Rn op 2 carryADC将把两个操作数加起来 并把结果放置到目的寄存器中 它使用一个进位标志位 可以做比32位大的加法 下列例子将加两个128位的数 128位结果 寄存器0 1 2 和3第一个128位数 寄存器4 5 6 和7第二个128位数 寄存器8 9 10 和11 ADDSR0 R4 R8 加低端的字ADCSR1 R5 R9 加下一个字 带进位ADCSR2 R6 R10 加第三个字 带进位ADC

3、SR3 R7 R11 加高端的字 带进位如果要做这样的加法 不要忘记设置S后缀来更改进位标志 数据处理指令 SUB SUB 条件 S Rd Rn op 2用操作数Rn减去操作数op 2 把结果放置到目的寄存器中 操作数Rn是一个寄存器 操作数op 2可以是一个寄存器 被移位的寄存器 或一个立即值 SUBSR0 R1 R2 R0 R1 R2 影响标志位SUBR0 R1 256 R0 R1 256SUBR0 R2 R3 LSL 1 R0 R2 R3 1 数据处理指令 SBC SBC 带借位的减法SBC 条件 S Rd Rn op 2 carrySBC做两个操作数的减法 把结果放置到目的寄存器中 它

4、使用进位标志来表示借位 这样就可以做大于32位的减法 SUB和SBC生成进位标志的方式不同于常规 如果需要借位则清除进位标志 所以 指令要对进位标志进行一个非操作 在指令执行期间自动的反转此位 SUBSR3 R6 R9SBCSR4 R7 R10SBCR5 R8 R11 数据处理指令 RSB RSB 反向减法RSB 条件 S Rd op 2 op 1用操作数op 2减去操作数Rn 把结果放置到目的寄存器中 操作数Rn是一个寄存器 操作数op 2可以是一个寄存器 被移位的寄存器 或一个立即值 RSBR0 R1 R2 R0 R2 R1RSBR0 R1 256 R0 256 R1RSBR0 R2 R3

5、 LSL 1 R0 R3 1 R2 数据处理指令 RSC RSC 带借位的反向减法RSC 条件 S Rd op 2 Rn carry同于SBC 但倒换了两个操作数的前后位置 数据处理指令 MUL MUL 乘法MUL 条件 S Rd Rn op 2MUL提供两个寄存器之间的32位整数乘法 给出的所有操作数 和目的寄存器必须为简单的寄存器 不能对操作数2使用立即值或被移位的寄存器 目的寄存器和操作数1必须是不同的寄存器 不能指定R15为目的寄存器 MULR0 R1 R2R0 R1 R2 数据处理指令 MLA MLA 带累加的32位乘法MLA 条件 S dest op 1 op 2 op 3MLA的

6、行为同于MUL 但它把操作数3的值加到结果上 这在求总和时有用 MLAR10 R0 R1 R10 R10 R0 R1 R10 数据处理指令 64位长乘 UMULL UMLAL SMULL SMLAL 条件 S RdHi RdLo Rm Rs AND 逻辑与 AND 条件 S dest op 1ANDop 2AND将在两个操作数上进行逻辑与 把结果放置到目的寄存器中 对屏蔽位很有用 操作数1是一个寄存器 操作数2可以是一个寄存器 被移位的寄存器 或一个立即值 ANDR0 R0 3 R0 保持R0的位 和1 丢弃其余的位 ORR 逻辑或 ORR 条件 S dest op 1ORop 2OR将在两个

7、操作数上进行逻辑或 把结果放置到目的寄存器中 对设置特定的位有用 操作数1是一个寄存器 操作数2可以是一个寄存器 被移位的寄存器 或一个立即值 ORRR0 R0 3 设置R0中位0和1 EOR 逻辑异或 EOR 条件 S dest op 1EORop 2EOR将在两个操作数上进行逻辑异或 把结果放置到目的寄存器中 对反转特定的位有用 操作数1是一个寄存器 操作数2可以是一个寄存器 被移位的寄存器 或一个立即值 EORR0 R0 3 反转R0中的位0和1 BIC 位清除 BIC 条件 S dest op 1AND op 2 BIC是在一个字中清除位的一种方法 与OR位设置是相反的操作 操作数2是

8、一个32位位掩码 mask 如果如果在掩码中设置了某一位 则清除这一位 未设置的掩码位指示此位保持不变 BICR0 R0 1011 清除R0中的位0 1 和3 保持其余的不变 移位指令 LSL LSR ASL ASR ROR RRXARM处理器组建了可以与数据处理指令 ADC ADD AND BIC CMN CMP EOR MOV MVN ORR RSB SBC SUB TEQ TST 一起使用的桶式移位器 barrelshifter 你还可以使用桶式移位器影响在LDR STR操作中的变址值 移位操作在ARM指令集中不作为单独的指令使用 它是指令格式中是一个字段 在汇编语言中表示为指令中的选项

9、 比较指令 CMP 比较CMP 条件 P status op 1 op 2CMP允许把一个寄存器的内容如另一个寄存器的内容或立即值进行比较 更改状态标志来允许进行条件执行 它进行一次减法 但不存储结果 而是正确的更改标志 标志表示的是操作数1比操作数2如何 大小等 如果操作数1大于操作操作数2 则此后的有GT后缀的指令将可以执行 不需要显式的指定S后缀来更改状态标志 如果指定了它则被忽略 CMPR1 R2MOVNER0 0 xff 比较指令 CMN 比较取负的值CMN 条件 P status op 1 op 2 CMN同于CMP 但它允许你与小负值 操作数2的取负的值 进行比较 与 1比较将使

10、用 CMNR0 1 把R0与 1进行比较 测试指令 TST 测试位TST 条件 P Status op 1ANDop 2TST类似于CMP 不产生放置到目的寄存器中的结果 而是在给出的两个操作数上进行操作并把结果反映到状态标志上 使用TST来检查是否设置了特定的位 操作数1是要测试的数据字而操作数2是一个位掩码 经过测试后 如果匹配则设置Zero标志 否则清除它 象CMP那样 不需要指定S后缀 TSTR0 0 x3F8 测试指令 TEQ 条件 P Status op 1EORop 2TEQ类似于TST 区别是EOR而不是AND 这提供了一种查看两个操作数是否相同而又不影响进位标志 不象CMP那

11、样 的方法 数据传送指令 MOV 条件 S dest op 1MOV从另一个寄存器 被移位的寄存器 或一个立即值装载一个值到目的寄存器 可以指定相同的寄存器来实现NOP指令的效果 还可以专门移位一个寄存器 MOVR0 R0 R0 R0 NOP指令MOVR0 R0 LSL 3 R0 R0 8如果R15是目的寄存器 将修改程序计数器或标志 用于返回到调用代码 方法是把连接寄存器的内容传送到R15 MOVPC R14 退出到调用者MOVSPC R14 退出到调用者并恢复标志位 数据传送指令 MVN 传送取反的值MVN 条件 S dest op 1MVN从另一个寄存器 被移位的寄存器 或一个立即值装载

12、一个值 按位取反置入到目的寄存器 MVNR0 4 MVNR0 0 Load Store指令 传送单一数据LDR 条件 Rd STR 条件 Rd LDR 条件 BRd STR 条件 BRd LDR 条件 HRd STR 条件 HRd SWP 条件 B P157的例子 Load Store指令 使用多数据传送指令 LDM和STM 来装载和存储多个字的数据从 到内存 LDM STM的主要用途是把需要保存的寄存器复制到栈上 如我们以前见到过的STMFDR13 R0 R12 R14 指令格式是 xxM 条件 类型 Rn xx 是LD表示装载 或ST表示存储 再加4种 类型 就变成了8个指令 LDMEDL

13、DMIB预先增加装载LDMFDLDMIA过后增加装载LDMEALDMDB预先减少装载LDMFALDMDA过后减少装载STMFASTMIB预先增加存储STMEASTMIA过后增加存储STMFDSTMDB预先减少存储STMEDSTMDA过后减少存储 Load Store指令 SWP 单一数据交换SWP 条件 B 从操作数2所指向的内存装载一个字并把这个字放置到目的寄存器中 把寄存器操作数1的内容存储到同一个地址中 如果目的和操作数1是同一个寄存器 则把寄存器的内容和给定内存位置的内容进行交换 如果提供了B后缀 则将传送一个字节 否则传送一个字 SWPR1 R2 R3 R1 R3 状态寄存器读写指令

14、 MRS 条件 Rd CPSR SPSR将状态寄存器的值读到Rd中MRSR0 CPSRMRSR3 SPSR 状态寄存器读写指令 MSR 条件 CPSR f SPSR f 32位立即数MSR 条件 CPSR SPSR Rmc控制域PSR 7 0 f标志位域PSR 31 24 MSRCPSR f 0 xf0000000 置NZCV为1MRSR0 CPSR 读出CPSR到R0ORRR0 R0 0 x20000000 设置R0的29位MSRCPSR f R0 写到CPSRMRSR0 CPSRBICR0 R0 0 x1F 低5位置0ORRR0 R0 0 x12 设为IRQ模式MSRCPSR C R0 转

15、移指令 B 条件 B是最简单的分支 一旦遇到一个B指令 ARM处理器将立即跳转到给定的地址 从那里继续执行 注意存储在分支指令中的实际的值是相对当前的R15的值的一个偏移量 而不是一个绝对地址 它的值由汇编器来计算 它是24位有符号数 左移两位后有符号扩展为32位 表示的有效偏移为26位 32M BLBXBLXBLLabel 软中断指令 SWI 软件中断SWI 条件 保存寄存器R0 R12从r14中减去4来获得SWI指令的地址 把这个指令装载到一个寄存器 清除这个指令的高端8位 去掉了OpCode而只剩下的SWI编号 使用这个值来找到要被执行的代码的例程的地址 使用查找表等 恢复寄存器R0 R12 使处理器离开超级用户模式 跳转到这个例程的地址 软中断指令 STMFDR13 r0 r2 R14 保存工作寄存器和返回地址 LDRR0 R14 4 得到SWI指令 BICR0 R0 0 xFF000000 清除高端的8位

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

最新文档


当前位置:首页 > 高等教育 > 大学课件

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