ARM 指令系统

A R M 指令 系统

本章重点讲述 ARM V7 架构的指令系 统,包括 ARM 指令的指令格式、条件码、ARM 指令的寻址方式和 ARM V7 架构下的 Thumb-2 指令集。一.指令格式 {}{S} , {,<shifter_operand>} opcode 为指令操作码,cond 为执行条件,S 表示该指令的执行是否影响应用程序状态寄存器 APSR(标志)寄存器的值(若写上则影响 APSR),Rd 为目的操作数(寄存器),Rn 为第一源操作数(寄 存器),shifter_operand 为第二源操作数“<>”符号内的项是必需的,“{}”符号内 的项是可选的例如: MOVS R1, R2 ;R2 传送到 R1,且更新 APSR MOV R1, R2 ;R2 传送到 R1,且不更新 APSR 二. 4 位的条件码(cond)条件码共有 16 种(见下表)。 EQ 相等 NE 不相等 CS/HS 无符号数大于等于 CC/LO 无符号数小于三.第二源操作数<shifter_operand>有三类共 11 种选择形式,三类方式分别是立即数方式、寄存器方式 和寄存器移位方式。(1) 立即数方式(#immed) 32位立即数 = immed_8循环右移(2×rotate_imm)位 例:(2) 寄存器方式(Rm) 例如: ADD R2, R3, R4 ; R2 ← R3 + R4 SUB R1, R3, R2 ; R1 ← R3 – R2 (3) 寄存器移位方式(Shift_operand) 例如: MOV R0, R2, LSL #3 ;R2 逻辑左移 3 位(相当于乘 8)后,赋值给 R0 寄存器 具体的移位类型有 9 种:  ,ASR #<shift_imm>/ 操作:按照立即数 shift_imm 或 Rs(通用寄存器,不能是 R15)内容指定的次数,对寄存器 Rm 中 的值向右移动,左端用 Rm第 31 位的值来填充。算术右移一位相当于有符号数除以 2。  ,LSL #<shift_imm>/ 操作:按照立即数 shift_imm 或 Rs(通用寄存器,不能是 R15)内容指定的次数,对寄存器 Rm 中 的值向左移动,低位用 0 填充。逻辑左移一位相当于无符号数乘以 2。  ,LSR #<shift_imm>/ 操作:按照立即数 shift_imm 或 Rs(通用寄存器,不能是 R15)内容指定的次数,对寄存器 Rm 中 的值向右移动,高位用 0 填充。逻辑右移一位相当于无符号数除以 2。  ,ROR #<shift_imm> / 操作:按照立即数 shift_imm 或 Rs(通用寄存器,不能是 R15)内容指定的次数,对寄存器 Rm 中 的值向右循环移动,左端用右端移出的位填充。  ,RRX 操作:对寄存器 Rm 中的值进行带扩展的循环右移操作,执行该指令时数据循环右移 1 位。与 ROR 指令不同的是,要在循环数据的高位与低位之间添加 CPSR 中的进位标志位 C,每右移一位,C 标 志位移入 Rm 高位,Rm 的低位移入 C 标志位。 以上 9 种类型的立即数 shift_imm 由于只有 5 位,所以取值范围为 0~31。 四.ARM 指令的寻址方式 立即寻址 寄存器直接寻址 寄存器移位寻址 寄存器间接寻址 基址变址寻址 多寄存器直接寻址 堆栈寻址 五.ARM 核心指令数据传送指令 存储器访问指令 算术运算指令 逻辑运算指令 移位和循环指令 符号扩展指令字节调序指令 位域处理指令 比较和测试指令 子程序调用与无条件转移指令 饱和运算指令伪指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值