我正在玩一些實作自定義執行緒的“只是為了好玩”的代碼。
當然,它也得實作背景關系切換,這個位來自于背景關系切換功能:
movq %rsp, (%rdi)
movq (%rsi), %rsp
我一般對 x86 和匯編不太熟悉,很難弄清楚發生了什么。
在我看來,movq (%rsi), %rsp取消參考存盤在 中的(虛擬)記憶體地址%rsi并將 8 個位元組(因為q)復制到%rsp.
但是,我無法弄清楚這movq %rsp, (%rdi)條線的作用是什么?(%rdi)似乎是一個目標暫存器,即將采用新值的暫存器..但是它與它周圍的括號不匹配...據我所知(...)意味著取消參考..
請解釋。
uj5u.com熱心網友回復:
正確,(%register)意味著取消參考暫存器中的值并將其用作記憶體位置。
所以(在 ??AT&T 語法中):
movq %rsp, (%rdi)意思是“將值復制rsp到存盤地址的位置rdi”。
和
movq (%rsi), %rsp意思是“將值從存盤地址的位置復制rsi到rsp”。
目的似乎是在執行緒切換期間保存當前堆疊指標(由 指向的保存位置rdi)并加載一個新的堆疊指??針(由 指向的加載位置)。rsi
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/509973.html
標籤:Intel Collective 部件x86-64属性
上一篇:如何使用更改名稱的變數地址
下一篇:單選按鈕-導致失敗的動態值
