我正在学习汇编代码的手臂皮层M4。
__asm volatile (
" LDR r0,=MY_NUM \n" /* Restore the context. */
" \n"
".align 2 \n"
"MY_NUM: .word 0x12345678 \n"
);
字符串
screenshot
我收到“错误#29:在ldr指令中需要表达式”。如何解决?
1条答案
按热度按时间xqkwcwgp1#
你正在使用的ARMCC没有真正的内联汇编程序,而是有一个类似于汇编的编译语言。像
.align
和.word
这样的指令对它没有任何意义。代码几乎是GCC + GNU AS的正确语法,但是像大多数汇编程序一样,GNU AS要求任何不是标签的东西都缩进一个空格或制表符。您需要在
.align
指令之前添加一个空格。虽然这将编译,但它将具有未定义的行为,因为它修改2个寄存器和条件代码而不通知编译器(假设寄存器未更改),并且如果为拇指模式构建,则从未指定的地址读取一个字节。0x12345678反汇编为:
字符串
或在拇指模式下为:
型