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

2023-12-21 10:38

本文主要是介绍ARM 嵌入式微处理器指令集(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

目录:

    • ARM v5TE 架构指令体系
      • 前导 0 计数指令
      • 符号乘法操作指令
      • 饱和运算指令
      • 加载存储 2 个寄存器指令
      • 断点指令
      • 高速缓存预加载指令
    • ARMv6 架构指令体系
      • 打包数据类型指令
      • 字节选择指令
      • SIMD 指令
      • 绝对差值求和指令
      • SETEND 指令
      • 字节反转指令
      • 饱和指令
      • 排他加载存储指令
      • 异常进入与退出指令
    • Thumb 指令集
        • 与 ARM 指令集的对比
        • v4T v5TE 的 Thumb 指令集
        • ARMv6 的 Thumb 指令集
    • Thumb-2 指令集


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位的混合指令
  • 在增强了灵活性的同时保持了代码高密度

这篇关于ARM 嵌入式微处理器指令集(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/519681

相关文章

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2  5. 算法设计 5.1 正确性 5.2 可读性(高内聚、低耦合) 5.3 健壮性 5.4 高效率(时间复杂度)时间复杂度越低,效率越高, 5.5 低储存(空间复杂度)空间复杂度越低,存储空间越少 6.排序算法 6.1 冒

上位机图像处理和嵌入式模块部署(mcu和swd接口)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         最近学习mcu的时候,接触了不少调试器,这里面有daplink、st-link v2、j-link v9。虽然模块的形状可能不太一样,但是硬件的连线都差不多,都是mcu上的3.3v、clk、dio和gnd四根连线。出于好奇,今天花了点时间了解了一下debug port、sw

嵌入式linux系统中LCD屏驱动实现思路分析

在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。接下来就来学习一下如何在 Linux 下驱动 LCD 屏幕。                           第一:Framebuffer设备简介       先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下: ①、初始化 I.MX6U

C++系统相关操作4 - 获取CPU(指令集)架构类型

1. 关键词2. sysutil.h3. sysutil.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 关键词: C++ 系统调用 CPU架构 指令集 跨平台 实现原理: Unix-like 系统: 可以通过 uname -m 命令获取 CPU 架构类型。Windows 系统: 可以通过环境变量 PROCESSOR_ARCHITECTURE 获取 CPU 架构类型。

嵌入式中逻辑分析仪与示波器的基本原理

大家好,今天主要给大家分享一下,嵌入式中如何使用逻辑分析仪和示波器的方法,希望对大家有所帮助。                 https://dreamsourcelab.cn/ 第一:什么是逻辑分析仪      是否遇到使用示波器分析数字电路的冏境:深度不够,时间太短,无法抓到想要的波形,没有协议内容解析?      逻辑分析仪是专门针对数字信号的调试工具,可长时间

针对ARM64嵌入式系统的Linux内核参数优化

文章目录 0. 概要1. 网络性能优化开启TCP连接重用减少TCP连接超时时间 2. 文件系统和I/O优化提高文件描述符限制 3. 内存管理优化提高内存可用性 4. 内核调度优化调整CFS调度器的调度周期 5. 完整配置文件 0. 概要 在ARM64架构的嵌入式系统中,系统性能和资源优化至关重要。这类系统通常在资源受限的环境下运行,如物联网设备、移动设备等。合理配置Linux

ARM-V9 RME(Realm Management Extension)系统架构之系统初始化流程

安全之安全(security²)博客目录导读 目录 一、重置取消 二、应用处理单元(PE)初始启动 三、MSD初始化 四、GPT初始化 五、初始启动退出(由所有应用PE执行) 六、RMSD初始化 七、PE进入丢失上下文的低功耗状态 本博客提供了RME系统初始化流程的示例,并描述了系统组件之间的关系以及系统启动序列的相应安全注意事项,不包括有关安全启动序列或软件测量流程的具体细

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)

Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go! (8)软串口与SoftwareSerial库使用 在第六节中我们提到了,如果我们Arduino开发板的0、1号引脚接线了,即硬件串口被占用了,想给Arduino下载程序,就需要先

【GD32】从零开始学兆易创新32位微处理器——RTC实时时钟+日历例程

1 简介 RTC实时时钟顾名思义作用和墙上挂的时钟差不多,都是用于记录时间和日历,同时也有闹钟的功能。从硬件实现上来说,其实它就是一个特殊的计时器,它内部有一个32位的寄存器用于计时。RTC在低功耗应用中可以说相当重要,因为在使用外部低速晶振的条件下,它在所有的低功耗模式下都可以工作,这使得RTC很适合实现芯片的低功耗唤醒。下面是RTC的框图。 咋一看RTC的内部还挺复杂的。 2 硬件时