首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ios arm64体系结构中的“指令操作数无效”错误

ios arm64体系结构中的“指令操作数无效”错误
EN

Stack Overflow用户
提问于 2015-08-10 09:10:43
回答 1查看 1.8K关注 0票数 1

在使用32位架构的arm64 architecture.Works中运行下面的内联程序集指令时,我会遇到编译错误。

存储指令存储指向变量stack_ptr的堆栈指针(Sp)。

代码语言:javascript
复制
unsigned long stack_ptr = 0;

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

回答 1

Stack Overflow用户

发布于 2015-08-10 13:12:48

在64位代码中,不能将SP用作STR指令中的操作数。引用文档

在以下说明中,只能将SP用作操作数:

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

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

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

代码语言:javascript
复制
unsigned long stack_ptr = (unsigned long)&stack_ptr;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31915667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档