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