问题标签 [thumb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1468 浏览

debugging - 为什么 ARM 指令地址在我的 ARM 环境中不对齐?

我的 ARM 环境是

root@linaro-developer:~# uname -a Linux linaro-developer 3.2.0 #7 SMP Thu Feb 28 16:20:18 PST 2013 armv7l armv7l armv7l GNU/Linux

我的大会是

但是,当我尝试使用 gdb 进行调试时,pc 不会进入 sub r4、r4、r4 gdb 状态

subs r4, r4, r4 地址为 0x83d1 0x83d1 未对齐

为什么我的汇编代码位于未对齐的地址?

0 投票
4 回答
45222 浏览

arm - ARM、Thumb 和 Thumb 2 指令编码有什么区别?

我对指令集有点困惑。有 Thumb、ARM 和 Thumb 2。根据我的阅读,Thumb 指令都是 16 位的,但在ARMv7M 用户手册(第 vi 页)中提到了 Thumb 16 位和 Thumb 32 位指令。

现在我必须克服这种困惑。据说 Thumb 2 支持 16 位和 32 位指令。那么 ARMv7M 实际上是否支持 Thumb 2 指令而不仅仅是 Thumb?

还有一件事。我可以说 Thumb(32 位)与同样是 32 位的 ARM 指令相同吗?

0 投票
0 回答
346 浏览

linux-kernel - 在 thumb2 elf 中执行非法 NEON 指令时会发生什么?

假设我们有一个 thumb2 elf 文件,其中包含 objdump 的以下反汇编代码段:

1) 如果我将第 279af2 行修改为一些非法指令,例如“ffff”,而不是在执行时,进程在运行到 ffff 时会得到一个 SIGILL/ILL_ILLOPC

2)如果我将第 279af4 行修改为非法指令 ed2d ffff,进程将直接退出,而不会收到任何信号或 kmsg 中的任何输出......我真的很想知道为什么这只发生在 NEON 指令上?在这种情况下,我期待一些错误提示,但没有...除了内核消息之外,我在哪里可以找到额外的错误提示?

非常感谢你们。

0 投票
1 回答
2376 浏览

arm - 关于拇指 16/32 位混合指令流中的 arm pc 值

我读了几篇文章,包括 SO为什么 ARM PC 寄存器指向下一条要执行的指令之后的指令?,该 pc 寄存器值实际上是当前正在执行的指令地址加上前面的 2 条指令,因此在 ARM 状态下它是 +8 字节(2*32 位)。

我的问题是,对于拇指状态,可能有 16 位或 32 位指令,这是否意味着 16/32 位指令的获取 pc 地址可能分别是 +4 字节或 +8 字节的偏移量?

例如:

我用以下代码做了更多测试:

崩溃时,寄存器是:

上面代码注释(159c/15a3/15a6/15a9/15ac)中显示的地址是objdump生成的,我用寄存器检查了这些位置的内容,看起来还可以。

对于 16 位指令:

而对于 32 位拇指指令:

这样,对于 32 位指令,pc 读取 = pc 执行 +2。我错过了什么吗??现在我真的很困惑 pc 偏移量。

顺便说一句,这是使用 thumb2 的 armv7a 平台。

感谢你们。

0 投票
4 回答
12289 浏览

c - STM32Cube - 项目未构建(所选处理器不支持 Thumb 模式)

我已经使用 STM32Cube 为 STM32F205RB 生成了一个代码库,以便在 Atollic TrueSTUDIO 中使用。该项目未构建,出现错误:

我不太确定该去哪里 - 我已经看到了更改编译器选项的建议,尽管我无法在 TrueSTUDIO 中找到执行此操作的位置(让我有些担心的是,当我选择项目属性>C 时/C++ Build>Settings,我收到一个错误“当前显示的页面包含无效值” - 但是,我在 TrueSTUDIO 中新创建的项目上也遇到同样的错误)

非常感谢任何想法,建议或澄清!

0 投票
1 回答
263 浏览

arm - Thumb Mode 如何以比 ARM 更节能的方式工作?

与使用 32Thumb位指令时使用 16 位指令一样。ARM处理器通过什么方式使其更节能?通过关闭某些设备?

0 投票
3 回答
6738 浏览

assembly - ARM 程序集不能同时使用立即数和 ADDS/ADCS

我目前正在尝试使用汇编加速 Cortex-M0(飞思卡尔 KL25Z)上的一些 C 函数。我对这个最小的测试程序有疑问:

当我尝试将 .s 文件组装成 .o 文件时,出现此错误

该错误消息对我来说没有意义,ADDS 是根据此文档的有效指令。我在stackoverflow上找到了一个可能的答案,并在程序的开头添加了这一行(“.syntax Unified”有效,就像第二个答案所建议的那样)。这导致解决了这个问题,我现在可以使用 ADDS 和 ADCS 等指令,但我确实收到了一个新错误:

一些使用立即数的指令会出现此错误。我正在 Mac OS 10.9.5 上编译。我无法通过 Google 或 Stackoverflow 找到解决方案,也不知道如何解决这些错误。

0 投票
1 回答
1333 浏览

arm - 如何区分elf文件中的拇指指令和手臂指令?

如标题所示,我想反汇编elf文件,但遇到了一个问题,我不知道哪个指令是arm指令,哪个是拇指指令。因为arm指令是32位的,而thumb指令是16位的,所以反汇编方式是不同的。那么如何从hex指令中检测出thumb指令呢?

0 投票
2 回答
1353 浏览

arm - 关于 Thumb-2 的 ARM/Thumb 互通混淆

一段时间以来,我一直在阅读与 ARM ISA 相关的文档,到目前为止,我相信我对 ARM/Thumb 互通的基础知识有了很好的理解。我将在下面快速总结一下:

  • 指令可以是 4 字节对齐 (ARM) 或 2 字节对齐 (Thumb)。
  • Thumb 和 ARM 指令位于不同的区域,即它们不会在没有显式处理器状态更改的情况下混合使用。
  • 状态更改可以在执行bx, blx, ldm,中的任何一个时发生ldr。在 ARM 或 Thumb 之间进行选择取决于地址中最低有效位的值,分别可以是 0 或 1。
  • 处理器的当前状态可以是 ARM 或 thumb。这取决于 的第 5 位的状态CPSR

状态变化的规则可以总结为下图摘自本文

拇指状态更改规则]

但是,Thumb-2 指令让我有点困惑。例如,让我们检查指令的编码,ADC可以在A8.8.2ARMv7-A/R 参考手册的部分中找到。基本上,相同的指令有 3 种不同的编码 16 位 (Thumb)、32 位 (Thumb2) 和 32 位 (ARM)。

以下是我的问题:

  • 32 位 Thumb-2 指令是否在处理器的 ARM 或 Thumb 模式下执行?(我假设是后者,但不确定)

  • 一些资源提到 ARM/Thumb 指令可以在 thumb-2 中“自由”混合。这是否意味着使用,或不需要发生显式状态更改?bxblxldmldr

最后一点,这是最接近我的问题,但是,我专注于互通。

0 投票
3 回答
3836 浏览

assembly - 如何知道程序入口点是 ARM 还是 Thumb 模式

我正在编写一个 ARMv7 反汇编程序。ARM和Thumb模式之间的切换方式在ARM参考手册中有明确的描述,但是你怎么知道程序是在什么模式下启动的呢?

我使用的是默认编译为 thumb 的 Xcode,所以我知道我自己的所有程序都将在 Thumb 中启动,除非我强制编译为 ARM 模式。但是,我希望能够获取任意 mach-o 可执行文件并在代码开头找出指令集模式。

mach-o 标头中是否有某处指定入口点的指令集?