01 段暫存器

2021-09-09 06:32:18 字數 785 閱讀 9431

引言:要學習保護模式中段的機制,首先就要學習段暫存器。

首先,我們來看一下下面這段**:

mov dword ptr ds:[0x123456],eax

在上面我們真正讀寫的位址是:ds.base + 0x123456

**中的ds就是我們這裡要介紹的段暫存器,base是段暫存器中的成員;為了更直觀的了解段暫存器,我們用od開啟乙個.exe檔案如下圖:

圖中紅框中就是段暫存器(如果非要對概念了解很清楚,那麼請去學以下8086彙編),當然除了上面幾個段暫存器,x86中還有兩個暫存器,乙個是ldtr,另乙個是tr,接下來我們看一下段存器的結構,如圖:

段暫存器分為可見部分和不可見部分,其中對我們可見的就只有16位的段選擇子,其他80位對我們不可見;用結構體來表示器結構如下:

struct segmentregister;
attribute:表示這個段的屬性,如可讀還是可寫亦或是可執行的等。

base:指的是當前段起始位置

limit:指的是段的長度

然後,我們看一下對段暫存器的讀寫:

我們讀段暫存器的時候只能讀它可見部分的16位如:

mov ax,es

寫暫存器的時候寫了段暫存器的96位,如:

mov es,ax

段暫存器和段基址

段暫存器是因為對記憶體的分段管理而設定的。計算機需要對記憶體分段,以分配給不同的程式使用 類似於硬碟分頁 在描述記憶體分段時,需要有如下段的資訊 1.段的大小 2.段的起始位址 3.段的管理屬性 禁止寫入 禁止執行 系統專用等 需要用8個位元組 64位 儲存這些資訊,但段暫存器只有16位,因此段暫存...

bss段 和 暫存器

乙個程式本質上都是由 bss段 data段 text段三個組成的。這樣的概念,不知道最初 於 的規定,但在當前的計算機程式設計中是很重要的乙個基本概念。而且在嵌入式系統的設計中也非常重要,牽涉到嵌入式系統執行時的記憶體大小分配,儲存單元占用空間大小的問題。在採用段式記憶體管理的架構中 比如intel...

彙編2 段暫存器

8086cpu有20根位址線,最大可定址記憶體空間為1mb。而8086的暫存器只有16位,指令指標 ip 和變址暫存器 si di 也是16位的。用16位的位址定址1mb空間是不可能的。所以就要把記憶體分段,保證0000h ffffh 能將整個段尋遍 也就是把1mb空間分為24,即16個段,每段不超...