02 寄存器和描述符

描述符

GDT;全局描述符表:主要存放操作系統和個任務公用的描述符

非常重要:在計算機轉換成保護模式之後,gdt就用來表示內存中的位置
	公用的數據和代碼段描述符,各任務的TSS描述符和LDT描述符		tss是任務狀態段,存放各個任務私有運行狀態信息描述符

在這裏插入圖片描述

GDTR :  ,48位

LDT;局部描述符表,主要存放各個任務的私有描述符

段寄存器:高13位表示索引號,低2位表示特權級別

在這裏插入圖片描述

寄存器

32位寄存器

-數據寄存器 用於存儲程序運行中間數據,ecx常用於計數
	EAX
	EBX
	ECX
	EDX

-變址寄存器 :主要用於存放存儲單元段內偏移量;用於尋址
	ESI:源地址
	EDI:目的地址

- 指針寄存器:用於棧
	EBP:棧底
	ESP:棧頂

注:在其他地方,變址寄存器和指針寄存器同時也被稱爲地址寄存器

- 段寄存器:selector  可知系統的段模式是由cpu決定的,段寄存器根據gdt來查找具體位置
	 CS:代碼段寄存器
	 DS:數據段寄存器
	 ES:附加數據段寄存器
	 SS:棧段寄存器
	 FS:主要用來指向Thread Information Block(TIB)  還可以當作附加段寄存器
	 GS:全局段寄存器  還可以當作附加段寄存器
	 	段寄存器可以訪問這篇bolghttps://blog.csdn.net/pilifeng1/article/details/81842347

- 指令寄存器
	EIP:存放下次要執行的指令地址

- 標誌寄存器
	PSW:程序的運行狀態

32位寄存器使用慣例

  1. %esp 存儲棧頂指針

  2. %eax 存儲函數返回值

  3. %ebx 父過程使用的通用寄存器 所以開始要 pus %ebx

    寄存器使用慣例 
        1. 調用者保存 :父函數保存寄存器數值
           1. %eax  %edx  %ecx
        2. 被調用者保存 : 子函數保存寄存器數值  
              1. %ebx  %esi  %edi
    

例如遞歸調用 %eax直接使用 %ebx使用前保存舊值;退出前恢復

在這裏插入圖片描述

64位寄存器使用慣例

%rsp是專門用於指向棧  %rbp被解放
寄存器使用慣例 
            1. 調用者保存 :父函數保存寄存器數值
               1. %rax  %rdx , %rcx, %rsi ,%rdi %r8,%r9,%11
            2. 被調用者保存 : 子函數保存寄存器數值  
                1. %rbx  %rbp  %r10 %r12,%r13,%r14,%r15



64位下 %rsp往下128字節可以直接使用,不用移動%rsp

Trick

volatile 強制存儲在棧空間:記得在c語言編程時有一個聲明reg也就是寄存器變量,可以加快對數據的訪問,但是當多線程修改同一個變量的時候,就會造成互斥

RISC:MIPS1,mips3

只有load/store指令來訪問內存,其他都來操作寄存器爲中心32個寄存器

ARM:類似於risc,使用16位操作碼,而且具有條件執行

只有load/store指令來訪問內存,其他都來操作寄存器爲中心32個寄存器

ARM:類似於risc,使用16位操作碼,而且具有條件執行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章