第3章 存儲器的分段_第1頁
第3章 存儲器的分段_第2頁
第3章 存儲器的分段_第3頁
第3章 存儲器的分段_第4頁
第3章 存儲器的分段_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

本章要求教學(xué)重點及難點:物理地址計算1.了解存儲器地址和內(nèi)容的概念;2.了解存儲器地址分段的方式;3.掌握邏輯地址和物理地址的概念及計算方式;4.了解堆棧的概念及外部設(shè)備。計劃學(xué)時:2學(xué)時第3章存儲器的分段

3.1存儲單元的地址和內(nèi)容基本概念:

計算機(jī)存儲信息的基本單位是位(Bit),一位可存儲一個二進(jìn)制數(shù)。每8個位組成一個字節(jié)。

存儲器存儲信息的基本單位是字節(jié)(Byte),由8個二進(jìn)制位組成。位編號如下:

在存儲器中,每一個字節(jié)單元都有一個與之對應(yīng)的、唯一的存儲器地址。稱為物理地址。對于16位字長的PC機(jī)(8086/8088),由兩個字節(jié)組成一個字(Word)。其位編號如下:

01234567

0123456789101112131415高位字節(jié)MSB低位字節(jié)LSB地址的定義每一個字節(jié)單元都有一個與之對應(yīng)的單元地址。對于字單元,由兩個字節(jié)單元組成,其地址是采用低位字節(jié)地址來表示的。對于多字單元(雙字,4字等),其地址同樣是采用最低位字節(jié)地址來表示的。地址范圍:不同機(jī)器,其可以訪問的物理地址范圍是不同的,一般由系統(tǒng)的地址總線寬度決定。例如:8086的地址總線為20位,其地址訪問范圍是:0H---0FFFFFH。而PentiumII的地址總線為36位,則地址范圍是:0H---0FFFFFFFFFH。存儲單元的內(nèi)容定義:存儲單元中存放的信息稱為該存儲單元的內(nèi)容表示:存儲地址加”()”如果用X表示某存儲單元的地址,則X單元的內(nèi)容可以表示為(X);假如X單元中存放著Y,而Y又是一個地址,則可用(Y)=((X))來表示Y單元的內(nèi)容。

34H12H…1EH2FH字節(jié)0000H0001H0002H0003H0004H0005H0006H1234H1235H0004H字節(jié)單元的內(nèi)容:(0004H)=34H0004H字單元的內(nèi)容:(0004H)=1234H0004H字單元的內(nèi)容為1234H,表示為:

(0004H)=1234H0004H字節(jié)單元存放的信息為34H,表示:(0004H)=34H

字單元由兩個字節(jié)單元組成,其地址采用它的低地址來表示。字存入存儲器:低位字節(jié)存入低地址單元,高位字節(jié)存入高地址單元。假如X單元中存放著Y,而Y又是一個地址,則可用(Y)=((X))來表示Y單元的內(nèi)容。

34H12H…1EH2FH字節(jié)0000H0001H0002H0003H0004H0005H0006H1234H1235H直接表示1234H字單元的內(nèi)容:

S=(1234H)=2F1EH直接給出S的單元地址,(1234H)=2F1EH例如,1234H字單元的內(nèi)容為S,有兩種表示方式:間接表示1234H字單元的內(nèi)容:

S=((0004H))=(1234H)=

2F1EHS的單元地址存放在0004H字單元中,(0004H)=1234H從0004H字單元中取出S的單元地址,再把S的內(nèi)容讀出來:((0004H))=2F1EH

8086/8088CPU有20根地址總線A19A18…A1A0,可以訪問存儲器的最大容量為:220B=1024KB=1MB,在8086CPU中所有可用來存放地址的寄存器都是16位的。3.2存儲器地址的分段

在IBMPC機(jī)里采用了存儲器地址分段的辦法。把1MB的存儲空間劃分成若干個段(Segment),每個段可由1~64KB(即65536B)個連續(xù)的字節(jié)單元組成。每個段是一個可獨立尋址的邏輯單位。在8086/8088的程序設(shè)計中,需要設(shè)立幾個段,每個段有多少個字節(jié)以及每個段的用途完全由用戶自己確定。同時每個段中存儲的代碼或數(shù)據(jù),可以存放在段內(nèi)任意單元中。

那么在16位字長的機(jī)器里,用什么辦法來提供20位地址呢?分段的基本規(guī)則

在編制程序時,要把存儲器劃分成段,每個段最大可達(dá)64KB,這樣段內(nèi)地址可以用16位表示。

PC機(jī)對段的起始地址有限制,段不能起始于任意地址,而必須從任一小段(Paragraph)的首地址開始。機(jī)器規(guī)定:從0地址開始,每16個字節(jié)為一小段。00000,00001,00002,……,0000E,0000F;00010,00011,00012,……,0001E,0001F;00020,00021,00022,……,0002E,0002F;在十六進(jìn)制表示的地址中,最低位為0(即20位地址的低4位為0)。

雖然存儲器可以劃分成若干個段,但在任何時刻,一個程序只能訪問4個段中的內(nèi)容,這4個段分別是代碼段(CodeSegment),堆棧段(StackSegment),數(shù)據(jù)段(DataSegment)和附加段(ExtraSegment)。它們的段首地址的段基值分別由對應(yīng)的4個段寄存器CS,SS,DS,ES指明。它們分別保存各自段首地址的高16位值(A19~A4),由4個段寄存器指向的那些段叫當(dāng)前段(CurrentSegment)。所以當(dāng)前段至多可容納64KB的程序代碼,64KB的堆棧和128KB的數(shù)據(jù)(分別由DS、ES指向的當(dāng)前段)在規(guī)模不是很大的應(yīng)用程序中,這些容量是足夠使用。如果應(yīng)用規(guī)模較大,可以在程序中通過修改相應(yīng)段寄存器的內(nèi)容,從而訪問其他段,如可用LDS,LES指令等方式來改變當(dāng)前段。

CPU訪問主存必須傳送出物理地址,而用戶編程則使用邏輯地址,于是在8086/8088系列微型機(jī)中,每個存儲單元都有兩種形式的地址:物理地址(PhsysicalAddress)和邏輯地址(LogicalAddress)以及CPU內(nèi)如何把程序員使用的邏輯地址形成物理地址(真實地址)的問題。每一個存儲單元的物理地址是唯一的,就是這個單元的地址編碼。CPU與存儲器之間的任何信息交換,都必須使用20位的物理地址先行,經(jīng)地址譯碼器后形成開門信號,把被訪問的存儲單元的“門”打開,方能進(jìn)行數(shù)據(jù)交換。在程序設(shè)計中,程序員使用的是邏輯地址,而不使用物理地址,這不僅有利于程序的開發(fā),且對存儲器的動態(tài)管理也是有利的。一個邏輯地址是由段基值和偏移量(OFFSET)兩部分組成,而且都是無符號的16位二進(jìn)制數(shù)。3.3邏輯地址與物理地址段基值是一個段首地址的高16位,它存放在某一個16位段寄存器中。段首址的低4位為0,即A3A2A1A0=0000。偏移量表示了某存儲單元與它所對應(yīng)的段的段首地址之間的字節(jié)距離。如當(dāng)偏移量為‘0’時,就在這個段的起始單元,當(dāng)偏移量為0FFFFH時,就是這個段(最大)最末一個字節(jié)單元。每當(dāng)CPU訪問存儲器時,總線接口部件BIU便把邏輯地址轉(zhuǎn)換成物理地址。

轉(zhuǎn)換方法是:首先把邏輯地址中的段寄存器保存的段基值左移4位(把段寄存器的內(nèi)容乘以16),其本質(zhì)是恢復(fù)A3A2A1A0的四位二進(jìn)制的0或一位16進(jìn)制的0,使之形成一個完整的段首地址。這也就是為什么段首址要從小段的首地址開始的原因。形成了20位的段起始地址(段基址)之后,再加上16位的無符號偏移量,即產(chǎn)生了CPU訪問主存單元的20位物理地址,從地址總線輸出。物理地址的計算計算公式:

物理地址=段地址×10H+偏移地址每個存儲單元只有唯一的物理地址,但它卻可以由不同的段地址和不同的偏移地址組成。

16位段地址15016位偏移地址150+20位物理地址190【例】

:計算下列存儲單元的物理地址:(1)2000:3000;(2)2100:2000;(3)2280:0800;(4)2250:0500;【解】:(1)物理地址=2000H×10H+3000H=23000H;(2)物理地址=2100H×10H+2000H=23000H;(3)物理地址=2280H×10H+0800H=23000H;(4)物理地址=2250H×10H+0500H=22A00H;

每個段寄存器可以按規(guī)定給出一個段的起始地址的段基值,每個段都有各自的用途。如前所述,代碼段存放的是要運行的程序及數(shù)據(jù)。數(shù)據(jù)段存放運行程序所用的數(shù)據(jù),如果在程序中使用了串操作處理指令,則其源操作數(shù)默認(rèn)存放在數(shù)據(jù)段中(源串可允許段超越)。堆棧段定義了堆棧的所在區(qū)域,堆棧是一個數(shù)據(jù)結(jié)構(gòu),它開辟了一個比較特殊的存儲區(qū),并以“后進(jìn)先出”的原則訪問這一區(qū)域。附加段是附加的數(shù)據(jù)段,它是一個輔助的數(shù)據(jù)區(qū),對于串處理指令,它是目的串操作數(shù)存放的區(qū)域,它不允許進(jìn)行段跨越。當(dāng)用戶在編制程序時,應(yīng)該按照上述規(guī)定把程序的各部分放在規(guī)定的區(qū)段之中。除非專門指定,如用戶自行設(shè)定之外,在一般情況下,各段在存儲器中的分配是由操作系統(tǒng)負(fù)責(zé)的。每個段可以獨立地占用64KB存儲區(qū)。各段也允許部分重疊或完全重疊,下面的例子可以說明這種情況。

【例】如果代碼段中的程序占有16KB(4000H)存儲區(qū),數(shù)據(jù)段占有2KB(800H)存儲區(qū),堆棧段占有1KB存儲區(qū)。代碼段的區(qū)域本可以為01000H~10FFFH(64KB),由于程序區(qū)只需要16KB,所以程序區(qū)結(jié)束后的第一個小段的首地址就作為數(shù)據(jù)段的起始地址(05000H)。而數(shù)據(jù)段僅需2KB,則數(shù)據(jù)段結(jié)束后的第一個小段的首地址又成為堆棧段的起始地址(05800H)。這樣,代碼段和數(shù)據(jù)段及堆棧段重疊在一起了。

注意:每個存儲單元的內(nèi)容是絕對不允許發(fā)生沖突的,也就是說,某個存儲單元既存儲了指令代碼,又將存儲操作的數(shù)據(jù),這是絕對禁止的。這里所提到的重疊只是指每個區(qū)段的大小可允許根據(jù)編程的實際情況分配,并非一定要占用64KB的最大段空間。物理地址01000H10FFFH代碼段代碼段實際使用16KB04FFFH數(shù)據(jù)段05000H057FFH數(shù)據(jù)段實際使用2KB堆棧段05800H【例】:已知(CS)=1000H,(DS)=4000H,其中代碼段大小為1KB,數(shù)據(jù)段大小為64KB,試畫出對應(yīng)儲存器分段的示意圖,要求標(biāo)出首尾地址?!痉治觥浚?/p>

對于代碼段,由題意,大小為1KB,即對應(yīng)的偏移地址為:0H---3FFH,且CS為1000H,則對應(yīng)的物理地址為:

10000H---103FFH對于數(shù)據(jù)段,由題意,大小為64KB,即對應(yīng)的偏移地址為:0H---FFFFH,且DS為4000H,則對應(yīng)的物理地址為:

40000H---4FFFFH1000HCS4000HDSSSES代碼段數(shù)據(jù)段10000H103FFH40000H4FFFFH4000:00004000:FFFF

堆棧是一個特定的存儲區(qū),在這個存儲區(qū)中信息的進(jìn)出嚴(yán)格按照一定的規(guī)則進(jìn)行。堆棧主要用于暫存數(shù)據(jù)以及在“過程”調(diào)用或處理中斷時暫存斷點信息。不僅在現(xiàn)代程序設(shè)計中經(jīng)常使用堆棧,在其他一些領(lǐng)域(如編譯技術(shù))中亦廣泛地應(yīng)用堆棧的概念。

堆棧的結(jié)構(gòu)現(xiàn)在常采用軟件堆棧,由編程人員用軟件在存儲器中劃出一塊存儲區(qū)作為堆棧。該存儲區(qū)的一端是固定的,另一端是浮動的,所有信息的存取都在浮動的一端進(jìn)行,這是進(jìn)棧與出棧操作的特點。浮動端的地址生長方向一般有兩種方法:一為向高地址方向生長稱為向上生長,另一種為向低地址方向生長,即為向下生長。8086/8088系列微機(jī)屬于向下生長的堆棧。3.4堆棧

這個存儲區(qū)最大地址的字存儲單元為堆棧底部,稱為棧底(Bottom)。在堆棧中存放的數(shù)據(jù)或斷點信息從這里開始,逐漸向地址小的方向“堆積”。在任何時刻,存放最后一個信息的字存儲單元為堆棧頂部,稱為棧頂(Top)。棧頂是隨著進(jìn)出棧信息的多少而變的。而棧底是由軟件設(shè)定后固定不變的。

堆棧指針SP始終指向堆棧頂部的地址。8086/8088堆棧的組織在8086/8088系列微機(jī)中,堆棧是由堆棧段寄存器(SS)指定的一段存儲區(qū),通常,堆棧段中所包含的存儲單元字節(jié)數(shù)即為堆棧深度或稱為堆棧長度。SP中始終包含段基址與棧頂之間的距離(字節(jié)數(shù))。當(dāng)SP初始化時,它的值就是這個堆棧的長度,由于SP是16位的寄存器,而堆棧深度最大是64KB,則至多可存放32K個字?jǐn)?shù)據(jù)。

設(shè)SP=2000H,把1234H進(jìn)棧的示意圖如下。【例】:已知CPU各段寄存器的內(nèi)容為:(CS)=3000H,(DS)=1060H,(ES)=1140H,(SS)=2200H,SP=0200H其中代碼段大小為16KB,數(shù)據(jù)段、附加段大小為64KB,試畫出對應(yīng)儲存器分段的示意圖,要求標(biāo)出首尾地址?!痉治觥浚?/p>

對于代碼段,大小為16KB,即對應(yīng)的偏移地址為:0H---3FFFH,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論