操作数LLVM编译程序集文件中的意外标记。替代说明?

时间:2013-06-04 15:34:27

标签: ios assembly arm llvm

在iPhone项目中,我正在编译.s程序集文件。在这个文件中,我需要访问外部C变量的地址并将其加载到寄存器中。我有以下代码:

_execute_read_spsr:
  ldr r0,=_spsr_pointer
  ldr r0, [r0]
  ldr r0, [r0]
  bx lr 

但是,在编译时,Clang / LLVM会在方法的第一行引发错误,说:

unexpected token in operand
  ldr r1,=_spsr_pointer
         ^

我在某处读过iOS汇编程序不支持这种形式的伪操作。不幸的是,这是我从其他人那里收到的代码,而且我的汇编知识有限。汇编程序接受的这行代码相当于什么?

1 个答案:

答案 0 :(得分:1)

ldr r1,=_spsr_pointer

将转换为:

mov r1,#_spsr_pointer

ldr r1,[pc, #offset_to_spsr_ptr]
...
spsr_ptr: .word _spsr_pointer

取决于_spsr_pointer的值。