暫存器和地址

文章目錄
- 暫存器和地址
- 一、暫存器
- (1)透明暫存器
- (2)可編程暫存器
- 1.通用暫存器
- 2.專用暫存器
- 二、地址
- (1)存盤模型
- (2)存盤空間分段管理
- (3)物理地址與邏輯地址
- (4)對存盤器地址的理解
一、暫存器
(1)透明暫存器
透明暫存器對應用人員來說不可見,不能直接控制
(2)可編程暫存器
具有參考名稱、供編程使用
1.通用暫存器
處理器最常使用的整數通用暫存器,可用于保存整數資料、地址等
32位IA-32處理器具有8個32位通用暫存器
EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
它們源自16位8086處理器的8個16位通用暫存器 AX,BX,CX,DX,SI,DI,BP,SP
前4個暫存器還可分成高低位元組,形成8個8位通用暫存器 AH,AL,BH,BL,CH,CL,DH,DL
- 32位通用暫存器
暫存器名稱 英文 中文 作用 EAX Accumulator 累加器 使用頻度最高,用千算術運算邏輯運算以及與外設傳送資訊等 EBX Base Address 基址暫存器 常用來存放存盤器地址,以方便指向變批或陣列中的元素 ECX Counter 計數器 常作為回圈操作等指令中的計數器 EDX Data 資料暫存器 可用來存放資料,其中低 16 DX 常用來存放外設埠地址 ESI Source Index 源變址暫存器 用于指向字串或陣列的源運算元 EDI Destination Index 目的變址暫存器 用于指向字串或陣列的目的運算元 EBP Base Pointer 基址指標 默認情況下指向程式堆疊區域的資料,主要用于在子程式中訪問通過堆疊傳遞的引數和區域變批 ESP Stack Pointer 堆疊指標 專用于指向程式堆疊區域頂部的資料,在涉及堆疊操作的指令中會自動增加或減少
2.專用暫存器
-
標志暫存器FLAG
標志體現了某種作業形態,反映指令執行結果或控制指令執行形式,
標志暫存器包含 組狀態標志 、一 個控制標志和 組系統標志,其初始狀態為000000002 H:
- ?狀態標志:記錄指令執行結果的輔助資訊
狀態標志有 6個 從低位到高位依次是:
中文 縮寫 全稱 進位標志 CF Carry Flag 奇偶標志 PF Parity Flag 調整標志 AF Adjust Flag 零標志 ZF Zero Flag 符號標志 SF Sign Flag 溢位標志 OF Overflow Flag - ?控制標志:方向標志DF,僅用于用于串操作指令中,控制地址的變化方向
- ?系統標志:控制作業系統或核心管理程式的操作方式
- ?狀態標志:記錄指令執行結果的輔助資訊
-
指令指標暫存器EIP
保存將要執行的指令在主存的存盤器地址
EIP 具有自動增量的能力 處理器執行完一條指令, EIP 就加上該指令的位元組數,指向下一條指令
-
段暫存器
段暫存器表明某個段在主存中的位置
段 暫存器 代碼段 CS(Code Segment) 堆疊段 SS(Stack Segment) 資料段 DS(Data Segment)ES (Extra Segment)FS GS
二、地址
(1)存盤模型
-
平展存盤模型(Flat Memory Model)
存盤器是一個連續的4GB線性地址空間
平展存盤模型 (Flat Memory Model) 下,對程式來說存盤器是一個連續的地址空間,稱為線性地址空間,程式需要的代碼、資料和堆疊都包含在這個地址空間中,線性地址空間也以位元組為基本存盤單位,即每個存盤單元保存一個位元組且具有一個地址,這個地址稱為線性地址 (Linear Address) IA-32 處理器支持的線性地址空間是 0 ~ 2 32 2^{32} 232 - 1 (4GB 容量),
-
段式存儲模型(Segmented Memory Model)
存盤器由一組獨立的地址空間組成:段(Segment) 每個段都可以達到4GB
段式存盤模型 (Segmented Memory Model) 下,對程式來說存盤器由一組獨立的地址空間組成,這個地址空間稱為段 (Segment) ,通常,代碼、資料和堆疊位千分開的段中,程式利用邏輯地址 (Logical Address) 尋址段中的每個位元組單元,每個段都可以達到 4GB,
在處理器內部,所有的段都被映射到線性地址空間 程式訪問一個存盤單元時,處理器會將邏輯地址轉換成線性地址 使用段式存盤模型的主要目的是增加程式的可靠性,
-
實地址存盤模型(Real-address Memory Model)
實地址存盤模型 (Real address Mode Memory Model) 8086 處理器的存盤模型 IA-32 處理器之所以支持這種存盤模型,是為了兼容原來為 8086 處理器撰寫的程式 實地址存盤模型是段式存盤模型的特例,其線性地址空間最大為 1MB 容量,由最大為 64KB 的多個段組成,
(2)存盤空間分段管理
- 代碼段(Code Segment):存放程式的可執行代碼(處理器指令)
- 段基地址:代碼段暫存器CS指示
- 偏移地址:指令指標暫存器EIP保存
- 資料段(Data Segment):存放程式所用的資料,例如全域變數
- 段基地址:堆疊段暫存器SS指示
- 偏移地址:堆疊指標暫存器ESP保存
- 堆疊段(Stack Segment):程式需要的特殊區域,存放回傳地址、臨時變數等
- 段基地址:資料段暫存器DS指示,有時也用ES、FS和GS指示
- 偏移地址:存盤器尋址方式計算出,有效地址EA指示
(3)物理地址與邏輯地址
-
物理地址
主存盤器需要處理器通過總線進行訪問,稱為物理存盤器,物理存盤器的每個存盤單元有一個唯一的地址,這個地址就是物理地址 (Physical Address) ,物理地址空間從 開始順序編排,直到處理器支持的最大存盤單元,
-
邏輯地址
存盤器空間可以分段管理,采用邏輯地址指示
- 邏輯地址=段基地址∶偏移地址
- ?段基地址=在主存中的起始地址
- ?偏移地址=距離段基地址的位移量
- 處理器內部以及程式員編程時采用邏輯地址
不論是何種存盤模型,程式員都采用邏輯地址進行程式設計,邏輯地址由段基地址和偏移地址組成 段基地址(簡稱段地址)確定段在主存中的起始地址,以段基地址為起點,段內的位置可以用距離該起點的位移量表示,稱為偏移 (Offset) 地址 ,
- 邏輯地址=段基地址∶偏移地址
(4)對存盤器地址的理解
存盤器地址在計算機硬體上的位置為物理地址,如果將物理地址暴露給程式,程式可以輕易訪問每一個位元組的空間,可能會破壞作業系統,導致程式崩潰,因此作業系統對記憶體進行新的抽象,作業系統為程式分配一個線性的空間,線性空間內的地址就是虛擬地址,在虛擬地址中的程式采取分段管理,想要確定存盤器的位置,只需要知道存盤器位于哪一段,在段的什么位置即可,因此編程使用的邏輯地址可以使用段基地址:偏移地址來表示,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266341.html
標籤:其他

