"指令的操作数无效" ios的arm64架构中的错误

时间:2015-08-10 09:10:43

标签: ios assembly arm64

尝试在arm64架构中运行下面的内联汇编指令时出现编译错误。使用32位架构时可以正常工作。

存储指令将堆栈指针(sp)存储到变量stack_ptr。

unsigned long stack_ptr = 0;

__asm__ __volatile__("str sp, %[stack_ptr]"
                     :[stack_ptr]"=m" (stack_ptr) //output operand list
                     );

1 个答案:

答案 0 :(得分:1)

在64位代码中,您不能在SP指令中使用STR作为操作数。引用documentation

  

您只能在以下说明中使用SP作为操作数:

     
      
  • 作为装载和存储的基本寄存器。在这种情况下,在添加任何偏移量或堆栈对齐之前,它必须是四字对齐的   异常发生。
  •   
  • 作为算术指令的源或目标,但它不能用作设置指令的目标   条件标志。
  •   
  • 在逻辑指令中,例如为了对齐它。
  •   

首先应将其复制到通用寄存器中,然后将其存储到内存中。

除非你需要一个真正精确的值,否则你可以使用普通的C并获取局部变量本身的地址来估计堆栈指针:

unsigned long stack_ptr = (unsigned long)&stack_ptr;