如果存取記憶體時使用bp定址,則預設的段暫存器是「SS」,即堆疊段。SS堆疊段通常是指採用堆疊方式工作的一段記憶體區域;在採用段式記憶體管理方式進行程式記憶體分配的架構中,堆疊段用來存放區域性變數和函數返回地址。
段暫存器是因為對記憶體的分段管理而設定的。計算機需要對記憶體分段,以分配給不同的程式使用(類似於硬碟分頁)。在描述記憶體分段時,需要有如下段的資訊:1.段的大小;2.段的起始地址;3.段的管理屬性(禁止寫入/禁止執行/系統專用等)。需要用8個位元組(64位元)儲存這些資訊,但段暫存器只有16位元,因此段暫存器中只能儲存段號(segment selector,也譯作「段選擇符」),再由段號對映到存在記憶體中的GDT(global (segment) descriptor table,全域性段號記錄表),讀取段的資訊。
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位的段基址。
段暫存器CS指向存放程式的記憶體段,IP是用來存放下條待執行的指令在該段的偏移量,把它們合在一起可在該記憶體段內取到下次要執行的指令。
段暫存器SS指向用於堆疊的記憶體段,SP是用來指向該堆疊的棧頂,把它們合在一起可存取棧頂單元。另外,當偏移量用到了指標暫存器BP,則其預設的段暫存器也是SS,並且用BP可存取整個堆疊,不僅僅是隻存取棧頂。
段暫存器DS指向資料段,ES指向附加段,在存取運算元時,二者之一和一個偏移量合併就可得到儲存單元的實體地址。該偏移量可以是具體數值、符號地址和指標暫存器的值等之一,具體情況將由指令的定址方式來決定。
通常,預設的資料段暫存器是DS,只有一個例外,即:在進行串操作時,其目的地址的段暫存器規定為ES。當然,在一般指令中,我們還可以通過改變字首中的「段取代」欄位來改變運算元的段暫存器。
「可選用的段暫存器」即是可以用強置說明這些段暫存器的值來作為其運算元地址的段地址。
以上就是如果存取記憶體時使用bp定址,則預設的段暫存器是什麼?的詳細內容,更多請關注TW511.COM其它相關文章!