寄存器

寄存器
體系結(jié)構(gòu) 長度 名稱

x64 64 RAX,RBX,RCX,RDX,RDI,RSI, R8-R15
x64 32 EAX,EBX,ECX,EDX,EDI,ESI, R8D-R15D
x64 16 AX,BX,CX,DX,DI,SI, R8W-R15W
x64 8 AL,BL,CL,DL,DIL,SIL, R8L-R15L
arm64 64 X0-X30, XZR
arm64 32 W0-W30, WZR

EAX
EBX
ECX
EDX
EDI
ESI
EBP
ESP

_add_a_and_b:push%ebx
mov%eax,[%esp+8]
mov%ebx,[%esp+12]
add%eax,%ebx
pop%ebx
ret
_main:push3push2call_add_a_and_b
add%esp,8
ret

線程切換時的寄存器復用
具體的實現(xiàn)是每創(chuàng)建一個線程時都會為這線程創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)來保存這個線程的信息,我們稱這個數(shù)據(jù)結(jié)構(gòu)為線程上下文,每個線程的上下文中有一部分數(shù)據(jù)是用來保存當前所有寄存器的副本。每當操作系統(tǒng)暫停一個線程時,就會將CPU中的所有寄存器的當前內(nèi)容都保存到線程上下文數(shù)據(jù)結(jié)構(gòu)中。而操作系統(tǒng)要讓另外一個線程執(zhí)行時則將要執(zhí)行的線程的上下文中保存的所有寄存器的內(nèi)容再寫回到CPU中,并將要運行的線程中上次保存暫停的指令也賦值給CPU
的指令寄存器,并讓新線程再次執(zhí)行??梢钥闯霾僮飨到y(tǒng)正是通過這種機制保證了即使是多線程運行時也不會導致寄存器的內(nèi)容發(fā)生錯亂的問題。因為每當線程切換時操作系統(tǒng)都幫它們將數(shù)據(jù)處理好了。
函數(shù)調(diào)用時的寄存器復用

解決的方法就是高級語言里面的每一行代碼在編譯為機器指令時總是先將數(shù)據(jù)從內(nèi)存讀取到寄存器中,處理完畢后立即寫回到內(nèi)存中去,中間并不將數(shù)據(jù)進行任何在寄存器上的緩存
1432482-02b548861ac4928a.png


0.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 組件 計算機是一種數(shù)據(jù)處理設(shè)備,它由CPU和內(nèi)存以及外部設(shè)備組成。CPU負責數(shù)據(jù)處理,內(nèi)存負責存儲,外部設(shè)備負責數(shù)...
    哆啦灬少A夢閱讀 1,773評論 1 2
  • 一彈指六十剎那,一剎那九百生滅。 --《仁王經(jīng)》 組件 計算機是一種數(shù)據(jù)處理設(shè)備,它由CPU和內(nèi)存以及外部設(shè)備組成...
    歐陽大哥2013閱讀 21,823評論 15 147
  • 這篇文章主要針對eip,esp,ebp寄存器進行介紹,有關(guān)別的通用寄存器在很多匯編相關(guān)書籍中都有介紹,由于篇幅有限...
    Hello密斯托李閱讀 769評論 0 0
  • 1、數(shù)據(jù)寄存器ax、bx、cx、dx4個16位寄存器又可分割成8個獨立的8位寄存器(AX:AH-AL、BX:BH-...
    倒數(shù)第三閱讀 1,829評論 0 1
  • 原文地址:C語言函數(shù)調(diào)用棧(一)C語言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過程可看作連續(xù)的函數(shù)調(diào)用。當一個函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,972評論 1 19

友情鏈接更多精彩內(nèi)容