【问题标题】:arm instruction width specifiers cannot be compiled无法编译 arm 指令宽度说明符
【发布时间】:2016-11-29 07:54:02
【问题描述】:

我正在尝试反汇编和修改 arm 的一些代码。反汇编显示一些带有指令宽度说明符的指令,例如:

 80002be:   f44f 5360   mov.w   r3, #14336  ; 0x3800
 80002c2:   f2c4 0302   movt    r3, #16386  ; 0x4002
 80002c6:   f44f 5260   mov.w   r2, #14336  ; 0x3800
 80002ca:   f2c4 0202   movt    r2, #16386  ; 0x4002

但是当我尝试修改代码和汇编时,汇编器不喜欢 mov.w:

main.asm:5: Error: unexpected character `w' in type specifier
main.asm:5: Error: bad instruction `mov.w r3,#14336'

我尝试指定 -mcpu=cortex-m4 -march=armv7-m -mthumb 但没有帮助。有什么想法吗?

【问题讨论】:

  • 使用 gcc?我对 ARM 只了解一点,但也许这只能在“统一”语法模式下工作(相对于单独的 thumb-only 语法)

标签: assembly arm disassembly thumb


【解决方案1】:

指令宽度说明符是 UAL 语法的一部分。看来您正在使用 GNU 汇编器,它默认为(对传统的单独 ARM/Thumb 语法的一种相当宽松的解释),具体取决于 -marm/-mthumb 或等效指令。如果您想正确使用 UAL 功能,您需要先使用.syntax unified 指令进行设置。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2019-12-09
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多