无法编译 arm 指令宽度说明符

arm instruction width specifiers cannot be compiled

我正在尝试解除assemble 并修改 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

但是当我尝试修改代码时 assemble,assembler 不喜欢 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 但它无济于事。有什么想法吗?

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