我正在尝试学习手臂皮层m4的装配编码。
__asm volatile (
" LDR r0,=MY_NUM \n" /* Restore the context. */
" \n"
".align 2 \n"
"MY_NUM: .word 0x12345678 \n"
);
我在ldr指令处收到“错误#29:期望表达式”。 如何解决?
答案 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