[英]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.