繁体   English   中英

x86 `movq %rsp, (%rdi)` 和 `movq (%rsi), %rsp` 有什么作用,它们有何不同?

[英]What does x86 `movq %rsp, (%rdi)` and `movq (%rsi), %rsp` do and how are they different?

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

当然,它也要实现上下文切换,这个bit来自上下文切换function:

        movq %rsp, (%rdi)
        
        movq (%rsi), %rsp

我对 x86 和一般装配不太熟悉,很难弄清楚发生了什么。

在我看来, movq (%rsi), %rsp rsp 取消引用存储在%rsi中的(虚拟)memory 地址并将8个字节(从q开始)复制到%rsp

但是,我不知道movq %rsp, (%rdi)行是做什么的? (%rdi)似乎是一个目标寄存器,即将采用新值的寄存器..但是它与它周围的括号不匹配...据我所知(...)意味着取消引用..

请解释。

正确, (%register)表示取消引用寄存器中的值并将其用作 memory 位置。

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

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

movq (%rsi), %rsp表示“将 memory 地址存储在rsi中的位置的值复制到rsp ”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM