段暫存器和段基址

2021-07-10 03:20:41 字數 645 閱讀 4250

段暫存器是因為對記憶體的分段管理而設定的。計算機需要對記憶體分段,以分配給不同的程式使用(類似於硬碟分頁)。在描述記憶體分段時,需要有如下段的資訊:1.段的大小;2.段的起始位址;3.段的管理屬性(禁止寫入/禁止執行/系統專用等)。需要用8個位元組(64位)儲存這些資訊,但段暫存器只有16位,因此段暫存器中只能儲存段號(segment selector,也譯作「段選擇符」),再由段號對映到存在記憶體中的gdt(global (segment) descriptor table,全域性段號記錄表),讀取段的資訊。[1] 

16位cpu有四個16位段暫存器,所以,其程式可同時訪問四個不同含義的段。

8086cpu有20根位址線,最大可定址記憶體空間為1mb。而8086的暫存器只有16位,指令指標(ip)和變址暫存器(si、di)也是16位的。用16位的位址定址1mb空間是不可能的。所以就要把記憶體分段,也就是把1mb空間分為2^4,即16個段,每段不超過64kb(2^16,16位資料線就可以定址)。在8086中設定4個16位的段暫存器,用於管理4種段:cs是**段,ds是資料段,ss是堆疊段,es是附加段。把記憶體分段後,每乙個段就有乙個段基址,段暫存器儲存的就是這個段基址的高16位,這個16位的位址左移四位(後面加上4個0)就可構成20位的段基址。

bss段 和 暫存器

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

01 段暫存器

引言 要學習保護模式中段的機制,首先就要學習段暫存器。首先,我們來看一下下面這段 mov dword ptr ds 0x123456 eax 在上面我們真正讀寫的位址是 ds.base 0x123456 中的ds就是我們這裡要介紹的段暫存器,base是段暫存器中的成員 為了更直觀的了解段暫存器,我們...

彙編2 段暫存器

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