我在stm32f3中使用内联汇编指令时遇到了“错误#29:期望表达式”。如何解决?

时间:2017-03-21 18:53:25

标签: assembly arm cortex-m3 stm32f4discovery

我正在尝试学习手臂皮层m4的装配编码。

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

screenshot

我在ldr指令处收到“错误#29:期望表达式”。 如何解决?

1 个答案:

答案 0 :(得分:0)

您正在使用的ARMCC没有真正的内联汇编程序,而是具有类似于汇编的编译语言。诸如.align.word之类的指令对此没有任何意义。

对于GCC + GNU AS,该代码几乎是正确的语法,但是像大多数汇编程序一样,GNU AS要求的所有内容都不是用空格或制表符缩进的标签。 .align指令前需要一个空格。尽管可以编译,但它会在未通知编译器的情况下修改2个寄存器和条件代码(假定寄存器未更改)时具有未定义的行为,并且如果是为Thumb模式构建的,则会从未指定的地址读取字节。

0x12345678反汇编为:

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

或在拇指模式下为:

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