8086存儲器組織


8086/8088只工作於實模式。只允許CPU在1MB范圍內對存儲器進行存取操作,DOS操作系統也要求微處理器工作與實模式。
1.段地址和偏移地址
8086/8088共有20根地址總線,可直接尋址的內存空間為2的20次方=1MB字節單元,地址范圍00000~FFFFFH,每個單元都有一個絕對地址,稱為物理地址,CPU訪問存儲單元時,必須先確定物理地址,才能實現對該單元的存取操作。
兩個寄存器形成一個20位的地址
段地址或段基地址                         偏移地址或偏移量
表示形式       段地址:偏移地址        這種地址又叫做邏輯地址
                      16進制   16
在形成20位物理地址時,段寄存器16位數自動左移4位(1位16進制位)使最低的4位為0,然后與16位的偏移地址相加,形成20位物理地址
物理地址=段地址*10H+偏移地址
列如,段寄存器CS=1120H,指令指針IP=2008H,則邏輯地址表示為CS:IP=1120H:2008H,物理地址則為1120H*10H+2008H=13208H。
起始地址       結束地址
設段基地址為1000H,則該段的起始地址為1000H*16=10000H,偏移地址范圍0000~FFFFH,表示段的起始位置到所選單元格的距離。由於一個段的長度為64KB,所以該段末地址為1000H*16+FFFFH=1FFFFH
 
在實模式中,在每個段基地址的最右邊增加一個0H,形成一個20位物理地址,作為訪問存儲器的起點,在此后的64KB地址作為一個邏輯段。
如段基地址1200H,則從12000H處開始尋址64KB,
實模式的段只能從能被16整除的那些位置開始,也就是說從能被16整除的那些內存單元開始分段。
一個物理地址可以有不同邏輯地址來形成。
如:物理地址12560H  其邏輯地址有:
1200H:0560H
1250H:0060H
1000H:2560H
這說明12000H偏移560H單元和12500H偏移60H單元等。指向的是同一個內存單元。
2.默認段寄存器和偏移地址寄存器
8086cpu中有一套規則。
代碼段寄存器CS總是和指令寄存器IP組合在一起,尋址下一條要執行指令的字節單元;
堆棧寄存器SS和SP(棧操作指針寄存器).BP(源地址)組合,尋址存儲器堆棧段中的數據;
數據段寄存器DS和BX(基址寄存器).SI(源變址寄存器).DI(目標變址寄存器)組合,尋址數據段中的8位或16位數據;
附加段寄存器ES和DI組合尋址,目的串地址
通過段超越前綴可以對某些隱含規則進行修改。
3.堆棧的設置和操作
堆棧是在存儲器里開辟出來的一個特定的數據區域,稱為堆棧段。
用於存放暫時保存的數據。如:調用子程序時的返回地址,中斷處理時的斷點及現在信息等。
堆棧也采用段地址和偏移地址的組合來尋址。
堆棧的位置和長度由堆棧段寄存器ss和堆棧指針sp來設定。     給定一個ss:sp,就設置了一個堆棧,其最大容量為64KB. 
堆棧的設置
SP始終指向當前堆棧的棧頂,當堆棧為空時,SP也指向棧底。棧底指向的單元不能存放堆棧數據
對堆棧的操作按 先進后出的原則進行,操作方式有 PUSH(壓入)和POP(彈出)兩種,以字為單位進行,但不能超出范圍,如果超出將產生溢出錯誤。
PUSH操作壓入一個字,SP<-SP-2.如AX=1234H,BX=5678H執行PUSH AX 和PUSH BX,並使得sp=12FCH(2.6(b)),再執行POP DX指令,則
DX=5678H SP=12FEH
通過 BP指針也可在堆棧中獲取數據,或向堆棧存入數據。
注意:堆棧中的數據要保證低字節數據在偶地址單元中,高字節數據在奇地址單元中。
堆棧操作中,堆內數據未變化變化的是sp指針的位置和內容。
4.段加偏移量尋址機制允許重定位
允許程序或數據在存儲器內重定位。
重定位指的是一個程序或數據塊可以放到存儲器的任意有效區域。
可重定位程序是指一個可以存放在存儲器的任意區域,不加修改就可以執行的程序。
可重定位的數據指一個可以存放在存儲器的任意區域,不加修改就可以被程序引用的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM