關於CPU暫存器的那些事兒(6) 指令暫存器

2021-10-25 03:48:29 字數 1553 閱讀 5698

段暫存器與cpu的記憶體定址密碼切相關,請參見(彙編的12種定址方式)

早在16位的8086cpu時代,記憶體資源寶貴,cpu使用分段式記憶體定址技術:

16位的暫存器能定址的範圍是64kb,通過引入段的概念,將記憶體空間劃分為不同的區域:分段,通過段基址+段內偏移段方式來定址。

這樣一來,段的基位址儲存在**呢?8086cpu專門設定了幾個段暫存器用來儲存段的基位址,這就是段暫存器段的由來。

段暫存器也是16位的。

段暫存器有下面6個,前面4個是早期16位模式就引入了,到了32位時代,又新增了fs和gs兩個段暫存器。

cs: **段

ds: 資料段

ss: 棧段

es: 擴充套件段

fs: 資料段

gs: 資料段

段暫存器裡面儲存的內容與cpu當前工作的記憶體定址模式緊密相關。

當cpu處於16位實位址模式下時,段暫存器儲存段的基位址,定址時,將段暫存器內容左移4位(乘以16)得到段基位址+段內偏移得到最終的位址。

當cpu工作於保護模式下,段暫存器儲存的內容不再是段基址了,此時的段暫存器中存放的是段選擇子,用來指示當前這個段暫存器「指向」的是哪個分段。

16個bit長度的段暫存器內容劃分了三個字段:

prl: 特權請求級,就是我們常說的ring0-ring3四個特權級。

ti: 0表示用的是全域性描述符表gdt,1表示使用的是區域性描述符表ldt。

index: 這是乙個**中表項的索引值,這個**叫記憶體描述符表,它的每乙個表項都描述了乙個記憶體分段。

這裡提到了兩個表,全域性描述符表gdt和區域性描述符表ldt,關於這兩個表的介紹,下面介紹描述符暫存器時再詳述,這裡只需要知道,這是cpu支援分段式記憶體管理需要的**,放在記憶體中,**中的每一項都是乙個描述符,記錄了乙個記憶體分段的資訊。

保護模式下的段暫存器和段描述符到最後的記憶體分段,通過下圖的方式聯絡在一起:

通用暫存器、段暫存器、標誌暫存器、指令暫存器,這四組暫存器共同構成了乙個基本的指令執行環境,乙個執行緒的上下文也基本上就是這些暫存器,在執行執行緒切換的時候,就是修改這些暫存器的內容。

關於CPU暫存器的那些事兒(2) 暫存器是什麼

暫存器是cpu內部用來存放資料的一些小型儲存區域 主要是用於儲存資料的!主要是用於儲存資料的!主要是用於儲存資料的!當然,有時候也會儲存一些標誌資訊 控制資訊等,這些都可以看成一資料。x86架構cpu的指指令集是複雜指令集 cisc 提供了豐富的指令來實現強大的功能,與此同時也提供了大量暫存器來輔助...

關於CPU暫存器的那些事兒(3) 通用暫存器

通用暫存器 是程式執行 最最常用,也是最最基礎的暫存器,程式在執行過程中,絕大部分時間都是在操作這些暫存器來實現指令的功能。既然是通用的,那麼這些暫存器就沒有特殊的用途,應用程式愛怎麼使用怎麼使用,只要遵循乙個既定的潛規則即可。eax 通常用來執行加法,函式呼叫的返回值一般也放在這裡面 ebx 資料...

CPU中的主要暫存器

在cpu中至少要有六類暫存器。這些暫存器用來暫存乙個計算機字。根據需要,可以擴充其數目。下面詳細介紹這些暫存器的功能與結構。1.資料緩衝暫存器 dr 資料緩衝暫存器用來暫時存放由記憶體儲器讀出的一條指令或乙個資料字 反之,當向記憶體存入一條指令或乙個資料字時,也暫時將它們存放在資料緩衝暫存器中。緩衝...