首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >x86‘`movq %rsp,(%rdi)和’`movq (%rsi),%rsp‘做什么,它们有什么不同?

x86‘`movq %rsp,(%rdi)和’`movq (%rsi),%rsp‘做什么,它们有什么不同?
EN

Stack Overflow用户
提问于 2022-09-26 18:34:31
回答 1查看 142关注 0票数 0

我正在玩一些“只是为了好玩”的代码,实现自定义线程。

当然,它也必须实现上下文切换,这一点来自上下文切换功能:

代码语言:javascript
运行
复制
        movq %rsp, (%rdi)
        
        movq (%rsi), %rsp

我对x86和程序集不太熟悉,很难弄清楚到底发生了什么。

在我看来,movq (%rsi), %rsp取消了存储在%rsi中的(虚拟)内存地址,并将8个字节(自q以来)复制到%rsp

然而,我不知道movq %rsp, (%rdi)行是做什么的?(%rdi)似乎是一个目标寄存器,也就是将获得新值的寄存器。但是它和它周围的括号不匹配.据我所知,(...)的意思是取消引用。

请解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-26 19:02:18

正确的,(%register)意味着取消引用寄存器中的值,并将其用作内存位置。

所以(在AT&T语法中):

movq %rsp, (%rdi)的意思是“将rsp中的值复制到存储在rdi中的内存地址的位置”。

movq (%rsi), %rsp的意思是“将内存地址存储在rsi中的位置的值复制到rsp”。

其目的似乎是保存当前堆栈指针(rdi指向的保存位置),并在线程切换期间加载新的堆栈指针(由rsi指向的加载位置)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73858497

复制
相关文章

相似问题

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