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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

01234567

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

字單元由兩個(gè)字節(jié)單元組成,其地址采用它的低地址來(lái)表示。字存入存儲(chǔ)器:低位字節(jié)存入低地址單元,高位字節(jié)存入高地址單元。假如X單元中存放著Y,而Y又是一個(gè)地址,則可用(Y)=((X))來(lái)表示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)容讀出來(lái):((0004H))=2F1EH

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

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

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

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

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

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

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

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

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

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

:計(jì)算下列存儲(chǔ)單元的物理地址:(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;

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

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

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

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

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

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

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

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

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

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

設(shè)SP=2000H,把1234H進(jìn)棧的示意圖如下?!纠浚阂阎狢PU各段寄存器的內(nèi)容為:(CS)=3000H,(DS)=1060H,(ES)=1140H,(SS)=2200H,SP=0200H其中代碼段大小為16KB,數(shù)據(jù)段、附加段大小為64KB,試畫(huà)出對(duì)應(yīng)儲(chǔ)存器分段的示意圖,要求標(biāo)出首尾地址。【分析】:

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論