ios - LLVM 编译汇编文件的操作数中存在意外标记。替代说明?

标签 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 汇编器不支持这种形式的伪操作。不幸的是,这是我从别人那里收到的代码,我的汇编知识有限。汇编器接受的这行代码的等价物是什么?

最佳答案

ldr r1,=_spsr_pointer

将转换为:

mov r1,#_spsr_pointer

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

取决于_spsr_pointer的值。

关于ios - LLVM 编译汇编文件的操作数中存在意外标记。替代说明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921858/

相关文章:

ios - 具有相同根 bundle 的两个应用程序的 SSL 证书(推送通知)

c - arm7tdmi汇编讲解+崩溃调试

在 VirtualBox 上的 linux fedora 13 或 14 中编译 alsa + c + armv5tel

ios - React-Native:在项目或这些目录中找不到 React

ios - 自定义栏按钮项目不执行 segue

ios - 如何在 iOS 5 中创建位置自动完成输入字段?

assembly - 'escape opcode' 是什么意思?

iOS ARM64 系统调用

gcc - mov %rax,%rax 的目的是什么?

ios - 从 arm 汇编函数返回 float 到 objective-c