assembly 我得到“错误#29:在stm32f3中使用内联汇编指令时,需要表达式“,如何解决?

tktrz96b  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(87)

我正在学习汇编代码的手臂皮层M4。

__asm volatile (
                "   LDR r0,=MY_NUM          \n" /* Restore the context. */
                "                                       \n"
                ".align 2                   \n"
                "MY_NUM: .word 0x12345678       \n" 
                );

字符串
screenshot
我收到“错误#29:在ldr指令中需要表达式”。如何解决?

xqkwcwgp

xqkwcwgp1#

你正在使用的ARMCC没有真正的内联汇编程序,而是有一个类似于汇编的编译语言。像.align.word这样的指令对它没有任何意义。
代码几乎是GCC + GNU AS的正确语法,但是像大多数汇编程序一样,GNU AS要求任何不是标签的东西都缩进一个空格或制表符。您需要在.align指令之前添加一个空格。虽然这将编译,但它将具有未定义的行为,因为它修改2个寄存器和条件代码而不通知编译器(假设寄存器未更改),并且如果为拇指模式构建,则从未指定的地址读取一个字节。
0x12345678反汇编为:

0:   12345678        eorsne  r5, r4, #120, 12        ; 0x7800000

字符串
或在拇指模式下为:

0:   5678            ldrsb   r0, [r7, r1]
2:   1234            asrs    r4, r6, #8

相关问题