嵌入式微处理器arm指令集 ppt课件.pptVIP

  • 12
  • 0
  • 约1.97万字
  • 约 75页
  • 2018-06-04 发布于贵州
  • 举报
嵌入式微处理器arm指令集 ppt课件

ARM 指令集的特点 向后兼容:新版本增加指令,并保持指令向后兼容; Load-store 结构* load/store –从存储器中读某个值,操作完后再将其放回存储器中 只对存放在寄存器的数据进行处理; 对于存储器中的数据,只能使用load/store指令进行存取 指令格式 指令格式 3 地址指令格式 在ARM状态中使用 例 ARM指令编码格式 说明 Cond 指令执行的条件编码 Opcode 指令操作符编码 S 决定指令的操作是否影响CPSR的值 Rd 操作目标寄存器编码 Rn 包含第一操作数的寄存器编码 Shifter_operand 表示第二操作数 ARM指令的寻址方式 寄存器寻址  寄存器中的数据就是操作数 立即寻址   指令中给出了操作数本身 寄存器间接寻址 以寄存器中的数据为地址从存储器取出数据作为操作数 寄存器变址寻址 将寄存器中的数据和指令中的数据相加得到操作数的有效地址 多寄存器寻址  一次完成对多个寄存器的操作 相对寻址    指相对程序计数器PC当前值的寻址方式 堆栈寻址    针对堆栈的寻址方式 ARM 指令分类 数据处理指令 – 使用和改变寄存器的值 数据传送指令 – 把存储器的值拷贝到寄存器中 (load) or 把寄存器中的值拷贝到存储器中(store) 控制流指令 分支 分支和链接, 保存返回的地址,以恢复最先的次序 软件中断指令 程序状态寄存器指令 协处理器指令 数据处理指令 - 1 数据处理指令的类别 算术操作 按位逻辑操作 寄存器移位操作 比较操作 操作数: 32-bits 宽; 有3种指定操作数的方式 来自寄存器 第二操作数可以是常数(立即数) 移位寄存器操作数 数据处理指令 - 2 数据处理指令 - MOV 桶形移位器的使用 数据处理指令 移位操作 在任何数据处理指令中,第二个寄存器操作数可以有应用该操作数的移位操作. 逻辑移位 LSL:逻辑左移 字的最小位空位清零 LSR:逻辑右移字的最大位空位清零. 桶形移位器操作 数据处理指令 - 3 移位操作 (cont’d) 算术移位 ASR: = LSR ASL: 算术左移 循环移位: ROR, RRX 数据处理指令 立即数操作: 移位寄存器操作数 第二个操作数在与第一个操作数运算之前,先进行移位操作的. 条件码标志 任何数据处理指令都可以设置条件码 (N, Z, V, and C) 适用于除比较操作外的所有数据处理指令 特殊的请求必须在汇编语言中实现,这种请求是通过把”S”增加到选择代码中指定的 算术操作设置所有的标志位 (N, Z, C, and V) 逻辑和移位操作设置 N and Z 条件执行及标志位** ARM指令可以通过添加适当的条件码后缀来达到条件执行的目的。 这样可以提高代码密度,减少分支跳转指令数目,提高性能。 CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2 skip 默认情况下,数据处理指令不影响程序状态寄存器的条件码标志位,但可以选择通过添加“S”来影响标志位。 CMP不需要增加 “S”就可改变相应的标志位。 loop … SUBS r1,r1,#1 BNE loop Condition Codes 下表为所有可能的条件码: 注意:AL为默认状态,不需要单独指出 条件执行示例 一系列的指令都使用条件指令 if (a==0) func(1); CMP r0,#0 MOVEQ r0,#1;把func()函数的参数赋给r0 BLEQ func 置标志位,再使用不同的条件码 if (a==0) x=0 ;r0:a,r1:x if (a0) x=1; CMP r0,#0 MOVEQ r1,#0 MOVGT r1,#1 使用条件比较指令 if (a==4 || a==10) x=0; CMP r0,#4 CMPNE r0,#10 MOVEQ r1,#0 条件执行 所有的ARM指令都可以条件执行 指令的执行与否取决于CPSR寄存器的N, Z, C and V标志位 Condition Field in instruction 0000 = EQ - Z set (equal) 0001 = NE - Z clear (not equal) 0010 = CS - C set (unsigned higher or same) 0011 = CC - C clear (unsigned l

文档评论(0)

1亿VIP精品文档

相关文档