ARM 嵌入式微处理器指令集(下)

教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社

目录:


ARM v5TE 架构指令体系

v5TE 架构包含了v4T 架构下所有的 ARM / Thumb 指令集,新增了一些指令,并且对 ARM / Thumb 的交互支持进行了改进

前导 0 计数指令

  • CLZ{cond} Rd, Rm
  • 返回寄存器内容中第一个 1 之前的二进制 0 的个数

符号乘法操作指令

  • SMULxy{cond} Rd, Rm, Rs
    SMULWy{cond} Rd, Rm, Rs
    SMLAxy{cond} Rd, Rm, Rs, Rn
    SMLAWy{cond} Rd, Rm, Rs, Rn
    SMLALxy{cond} RdLo, RdHi, Rm, Rs
  • 不会影响 NZCV标志位 (指令后加‘S’后缀是不允许的)

  • x,y 分别代表第一个操作数 Rm 和第二个操作数 Rs 的高半字(**T**op)或者低半字(**B**ottom)

  • W 代表选择 48 位乘积的高 32 位

  • SMLA 指令会影响 Q 标志位

  • 具体操作流程
    符号乘法流程

    • SMULxy: 16x16->32. For all of these instructions, the upper or lower half of both the source registers can be chosen with ‘T’ and ’B’.
    • SMULWy: 32x16->32. ‘y’ selects top or bottom half of second source. Note 32-bit result is generated by discarding lower 16 bits of intermediate 48-bit product.
    • SMLAxy: 16x16+32->32.
    • SMLAWy: 32x16+32->32.
    • SMLALxy: 16x16+64->64. Accumulation is into pair of registers.

饱和运算指令

  • 饱和运算
    • 向 0x7FFFFFFF 加 1 导致了正值向负值的转变
    • 从 0x80000000 减 1 导致负值向正值的转变
  • QSUB{cond} Rd, Rm, Rn    ;Rd = saturate(Rm - Rn)
    QADD{cond} Rd, Rm, Rn    ;Rd = saturate(Rm + Rn)
    QDSUB{cond} Rd, Rm, Rn   ;Rd = saturate(Rm - saturate(Rn*2))
    QDADD{cond} Rd, Rm, Rn   ;Rd = saturate(Rm + saturate(Rn*2))
  • 在这些指令的执行中,如果饱和发生,那么 Q 标志位就会被置位,并不影响 NZCV

  • 避免信号处理过程中出现不期望的“尖峰”信号

加载/存储 2 个寄存器指令

  • LDR/STR{<cond>}D <Rd>, <addressing_mode>
  • 内存中相邻的两个字与寄存器对 (r0,r1), (r2,r3), (r4,r5), (r6,r7), (r8,r9), (r10,r11) or (r12,r13)的数据传输
  • Rd 需指定为偶数号的寄存器,紧跟其后的奇数号寄存器用来传输第二个字
  • LDRD 指令使用与 LDRH/STRH 指令相同的寻址模式,加载的是两个字中内存较小的地址,较高地址由该地址 + 4 产生,因此要求给出的地址是 8 字节对齐的

断点指令

  • BKPT <#imm16>
  • 执行该指令或将引起一个预取指令(Prefetch Abort)异常,或者使处理器进入调试状态
  • 通常用于调试,立即数供调试工具使用,将被处理器忽略

高速缓存预加载指令

  • PLD [Rn, <offset>]

  • 告诉存储系统对一个指定地址的数据访问即将到来

  • 偏移量可以为
    • 无符号的12位立即数( 0 - 4095 bytes)
    • 寄存器,可选择移位操作
  • PLD 是一条提示指令,若该 ARM 处理器不支持,则相当于执行了一条空操作语句 NOP

ARMv6 架构指令体系

ARM 的 V6 版本包含了 81 条新的指令,扩充的指令几乎都是条件执行的

打包数据类型指令

字节选择指令

SIMD 指令

绝对差值求和指令

SETEND 指令

字节反转指令

饱和指令

排他加载/存储指令

异常进入与退出指令

Thumb 指令集

Thumb 是一个 16 位的指令集

与 ARM 指令集的对比
  • 优点
    • 从 C 代码得到最优的代码密度 (约为 ARM 指令集 65% 左右)
    • 对窄内存系统有更好的指令性能
  • 缺点
    • 它是 ARM 指令集的一个功能子集,也许几条 Thumb 指令才能代替一条ARM 指令
    • 有限制的条件执行
    • 数据处理指令只能使用低编号的寄存器(r0 - r7)
    • 不能使用内嵌的桶型移位器
    • 立即数的范围更小
    • 不能访问协处理器
  • 适合作为编译器的输出,而并非处理代码
v4T & v5TE 的 Thumb 指令集

ARMv6 的 Thumb 指令集

Thumb-2 指令集

  • 提供了32位和16位的混合指令
  • 在增强了灵活性的同时保持了代码高密度
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值