什么是 ARM Thumb 指令集?

2024-01-19

在“ARM11TechnicalRefManual”第 1-34 节的“Thumb 指令集”下,它说:

“Thumb指令集是最常用的32位ARM指令的子集。Thumb指令有16位长,并且有相应的32位ARM指令,对处理器模型具有相同的效果。”

任何人都可以解释一下这尤其是第二句话并说明处理器如何执行它吗?


ARM 处理器有 2 个指令集,传统的 ARM 集,其中指令都是 32 位长,以及更精简的 Thumb 集,其中最常见的指令是 16 位长(有些是 32 位长)。开发人员可以选择要运行的指令集,并且只有一组可以处于活动状态(即,一旦处理器切换到 Thumb 模式,所有指令将被解码为使用 Thumb 而不是 ARM)。

尽管它们是不同的指令集,但它们共享相似的功能,并且可以使用相同的汇编语言表示。例如,指令

ADDS  R0, R1, R2

可以编译为 ARM (E0910002 / 11100000 10010001 00000000 00000010) 或 Thumb (1888 / 00011000 10001000)。当然,它们执行相同的功能(将 r1 和 r2 相加并将结果存储到 r0),即使它们具有不同的编码。这就是Thumb指令长16位,并有相应的32位ARM指令,对处理器型号具有相同的效果。

Thumb编码中的每条*指令在ARM中也有对应的编码,即“子集”这句话的意思。


*:严格来说并不正确,ARM 中没有“IT”指令,尽管 ARM 无论如何都不需要“IT”(它将被汇编器忽略)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是 ARM Thumb 指令集? 的相关文章

  • 在嵌入式设备上使用new或malloc引起的段错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • x86 汇编中 cmove 指令的用途?

    反汇编可执行文件时我遇到了cmove操作说明 我已经在互联网上搜索过 但我只发现这是一个有条件的移动 如果源和目的地相等mov发生 我还不明白为什么我需要它 因为它不会改变操作数 它的目的是什么 The CMOVcc指令不比较源和目标 它们
  • 这是 GCC 中的错误还是我的代码错误?

    我有这个C代码 int test signed char anim col if anim col gt 31 return 1 else if anim col lt 15 return 2 return 0 使用 Android NDK
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • 基于 Windows 8 ARM 的平板电脑上的 VB6

    随着 Windows 8 将支持 VB6 我的问题是 Microsoft 是否在任何地方表示 是或否 VB6 应用程序将在基于 ARM 的平板电脑上运行 如果没有 是否有任何 ARM 模拟器 以便我们可以在 Windows 8 ARM 平板
  • 为什么 FMA _mm256_fmadd_pd() 内在函数有 3 个 asm 助记符:“vfmadd132pd”、“231”和“213”?

    有人可以向我解释一下为什么融合乘法累加指令有 3 种变体 vfmadd132pd vfmadd231pd and vfmadd213pd 而只有一个 C 内在函数 mm256 fmadd pd 为了简单起见 在 AT T 语法中 有什么区别
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 可以对 Xcode 中的 Arm 架构设置进行一些澄清

    据我了解 iPhone 5将采用新的架构 armv7s 我的项目具有有效的架构armv7 并且有Build Active Architecture Only set to true 由于现在商店中的每个应用程序都是为armv6 and or
  • 为什么前向引用 ADR 指令在 Thumb 代码中以偶数偏移进行汇编?

    To bx对于 Thumb 函数 需要设置地址的最低有效位 GNU 作为文档states https sourceware org binutils docs as ARM Opcodes html当地址是从一个生成时这是如何工作的adr伪
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 直接写入 ARM Cortex A8 分支预测器中的全局历史缓冲区 (GHB) 或 BTB?

    我有兴趣直接修改 Cortex A8 上的 BTB 分支目标缓冲区 和 GHB 的内容 ARM 手册上有这样的内容 要在指令端 GHB 数组中写入一项 例如 LDR R0 0x3333AAAA MCR p15 0 R0 c15 c1 0 M
  • ARM 汇编:从 STDIN 获取字符串

    我目前正在学习 CS 课程 我们刚刚开始在 Raspberry Pi 上使用 ARM Assembly 事实证明这相当困难 想知道是否有人可以提供帮助 我当前的任务是从 stdin 获取一个字符串 使用 scanf 并计算其中的字符数 然后
  • LDR指令如何将常量加载到寄存器中?

    我刚刚读了一本ARM指令书 看到一条指令我无法解释 It says LDR将 32 位常量加载到r0登记 LDR r0 pc const number 8 pc const number DCD 0xff00ffff 我不明白什么 pc c
  • 了解带有 pc 偏移的 Cortex-M 组件 LDR

    我正在查看这段 C 代码的反汇编代码 define GPIO PORTF DATA R volatile unsigned long 0x400253FC int main void Initialization code while 1
  • ARM、VFP、浮点、惰性上下文切换

    我正在为 ARM 处理器 Cortex A9 编写操作系统 我正在尝试实现浮点寄存器的延迟上下文切换 这背后的想法是 浮点扩展最初对线程禁用 因此不需要在任务切换上保存浮点上下文 当线程尝试使用浮点指令时 会触发异常 然后 操作系统启用浮点
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • 2022年Android CPU架构分布(armeabi-v7a vs arm64-v8a)

    有没有关于 2022 年 Android 设备上的架构使用情况的官方信息 我有一个支持armeabi v7a 和arm64 v8a 的应用程序 我想要放弃对armeabi v7a的支持并且仅支持 64 位设备 arm64 v8a 但我找不到

随机推荐

  • C# 面板列表

    我想创建包含有关某个项目的详细信息的面板 包括左侧的缩略图 然后将它们添加到可滚动列表中 与 iPhone 上的 iTunes 显示可用应用程序列表的方式非常相似 我已经进行了一些搜索 但迄今为止尚未找到任何帮助 有谁有任何想法或样本链接想
  • Bing 拼写检查 API 是否对 mode = 拼写有额外的长度限制?

    The Bing 拼写检查 API https msdn microsoft com en us library mt711411 aspx对于请求想要进行拼写检查 mode spell 或校对 mode proof default 的文本
  • 后备机制 - 最佳方法?

    我有三种不同类型的服务器连接 这些可以在属性文件中配置 假设有三台服务器 Server1 Server2 Server3 In Properties文件 我的配置如下 ServerPref1 Server1 ServerPref2 Serv
  • 如何使用 Spark-Submit 和 pyspark 运行 luigi 任务

    我有一个luigipython 任务 其中包括一些 pyspark 库 现在我想用spark submit在mesos上提交这个任务 我应该做什么来运行它 下面是我的代码框架 from pyspark sql import function
  • UIBarStyleBlack 与 TintColor 黑色

    设置和设置有什么区别tintColor的财产UINavigationBar to UIColor blackColor 和设置barStyle to UIBarStyleBlack在不透明的导航栏上 有一些细微的差别 例如 在 iPad 上
  • C#中如何从字符串中获取数字

    我在 HTML 中有一个字符串 3 Trip 中的 1 3 如何获取数字 3 在 trip 之前 并将其转换为 int 我想将其用作计数 找到了这段代码 public static string GetNumberFromStr strin
  • Fail2ban - 为 docker-container 日志创建第二个 sshd-jail 不起作用

    我有一个运行 Ubuntu 18 04 3 的 Linux 机器 并且有一个有效的 fail2ban 配置 就像在我的所有主机上一样 在本例中 我设置了一个 docker container 它充当多个用户的 sftp 服务器 docker
  • String 或 StringBuilder 返回值?

    如果我在方法中使用 StringBuilder 对象构建字符串 那么以下操作是否有意义 返回StringBuilder对象 并让调用代码调用ToString return sb 或者通过自己调用 ToString 返回字符串 return
  • javascript 全局变量 - 保护

    我在基于 Html Javascript 构建的 Web 应用程序上使用一些全局变量 我跨页面 或其中的一部分 使用这些变量 有时它们被用作 ajax 调用的发布数据 我的问题是 这有多安全 当然 我可以为这些变量设置不同的值 例如使用控制
  • 如何从内存分配发生在C层的Python脚本将float*数组传递给C方法

    我试图从Python脚本调用C方法 C方法调用反过来C 方法 我使用 malloc 在 getResults 方法内分配数组 现在的问题是如何将参数传递给 python 脚本中的 float oresults 其内存分配发生在 C 层内 这
  • 如何使用 Spring Hibernate 配置包级别 @TypeDefs

    我需要配置 TypeDefs 以在包级别使用自定义 Type 当我按照以下方式配置它时 我收到 ClassNotFoundException 但是当我将 TypeDefs 放在类级别时 它工作正常 我发现了类似的堆栈溢出帖子 https s
  • 在recyclerview末尾添加进度条

    在我的应用程序中 我发送了一个齐射请求 该请求逐一获取列表项 而不是一次全部获取 我想在获取数据时在回收器视图的末尾实现一个进度条 updateAdapter 类更新适配器 我正在考虑使进度条在 recyclerview 滚动侦听器中可见
  • Unix 套接字,SOCK_SEQPACKET 与 SOCK_DGRAM

    似乎至少有 3 种不同的本地 unix 套接字类型 AF UNIX SOCK STREAM SOCK DGRAM and SOCK SEQPACKET 虽然我知道一个SOCK STREAM为您提供双向字节流 如 TCP 或双向管道 另外两个
  • 访问WPF用户控件值

    我在 WPF 用户控件中有 2 个文本框 在 WPF 窗体上有两个按钮 如何访问我使用 WPF 用户控件的主窗体的按钮单击事件上的这些文本框值 首先 请记住WPF 不是 WinForms 理论上你应该数据绑定您的文本框到属性 然后更改属性的
  • 字符串中的 ImageSource 不起作用?

    我的项目文件夹中有一堆 tif 图像 我也将其添加到位于 Templates Team Logos 的文件夹中的 Visual Studio 项目中 现在如果我设置一个图像源说
  • 如何获取 bufferedImage 的缩放实例

    我想获得缓冲图像的缩放实例 我这样做了 public void analyzePosition BufferedImage img int x int y img BufferedImage img getScaledInstance ge
  • PHP 相当于 Ruby 的 @instance_variable?

    我想知道是否有一种更短 更好或更干净的方法来在 PHP 中分配和使用类变量 然后通过 this gt instance variable class Bar internal variables var foo Hello World pu
  • 当内存中的类对象已经是二进制(C/C++)时为什么要进行序列化?

    我的猜测是 数据分散在物理内存中 即使类对象的数据在虚拟内存中也是连续的 因此为了正确发送数据 需要重新组装数据 并且能够通过网络发送 一附加步骤是将主机字节顺序转换为网络字节顺序 这是对的吗 正确的序列化可用于将数据发送到任意系统 这些系
  • 在 Laravel Backpack 中 - 查看详细信息和 XLS 下载中的列数据被截断

    如果列数据大约超过 50 个字符 则该列将被截断为 50 个左右 addColumn 函数有 type gt text 最后有 这既包含在详细信息弹出窗口中 也包含在 XLS 下载中 问题是 可以通过任何配置增加此限制吗 是的你可以 有一个
  • 什么是 ARM Thumb 指令集?

    在 ARM11TechnicalRefManual 第 1 34 节的 Thumb 指令集 下 它说 Thumb指令集是最常用的32位ARM指令的子集 Thumb指令有16位长 并且有相应的32位ARM指令 对处理器模型具有相同的效果 任何