簡體   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