描述符
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位寄存器使用慣例
-
%esp 存儲棧頂指針
-
%eax 存儲函數返回值
-
%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位操作碼,而且具有條件執行