8086記憶體分段理解問題 謝謝,為什麼8086對儲存器要採用分段管理

2022-07-12 06:26:27 字數 5239 閱讀 3955

1樓:小伊凡_豆豆

8086是16位cpu,cpu內部暫存器都是16位。那麼地址也是由cpu裡面的暫存器提供的,故只能提供16位地址,可定址64k空間。而8086覺得64k空間不夠用,引腳地址線非要弄成20條,定址1m空間。

但cpu裡面地址只能是16位提供16位地址,裡面的16位地址和外面的20根地址線矛盾怎麼解決呢?只好多加了那幾個段暫存器,和一些如di的指標暫存器。每次形成地址時,根據不同的指令,系統會自動選取一個段暫存器(16位)左移四位後再加上一個對應的指標暫存器(在biu裡的地址加法器中完成),形成實際的實體地址20位輸出,可定址1m空間。

你看四個段左移四位後形成20位的實際實體地址的段基址,再加上各自的指標64k的範圍,四個段每個都是64k。

總結:8086採用這種段加偏移技術,可以解決內部暫存器16位,但可提供20位地址的問題,將外定址空間擴大到1m。我們在程式最初將cs ds ss es給初值後,那這四個段在1m空間中的起始位置就確定了,由於每段對應的指標(如di)是16位,故每段大小是64k。

當然cs,ds還可以再重給初值對段重新定義,cs,ds可以相同幾個段重疊(如果放得下的話),也可以分開。大致是這樣,不知你明白了沒?

2樓:文刀舍予

你能問出這種問題的話,我分析有以下幾種可能:

1.你看書不認真,或者根本就是跳著讀的

2.對彙編沒有興趣,導致看書不認真

3.選的書不好,不是那種適合初學者的書,如果你是個初學者的話,建議看王爽的《組合語言》吧,很適合初學者的

3樓:

cs ds ss es 是段暫存器,用來儲存段的地址的,

段的大小為 64k,可以有 64k 個段,段和段之間可以重疊

為什麼8086對儲存器要採用分段管理

4樓:諾諾百科

8086是一個16位的結構,採用分段管理辦法可形成超過16位的儲存器實體地址,擴大對儲存器的定址範圍(1mb,20位地址)。

這兩個地址都是16位的,將這兩個地址採用相加的方式組成20位地址去訪問儲存器。在8086系統的地址形成中,當段地址確定後,該段的定址範圍就已經確定,其容量不大於64kb。同時,通過修改段暫存器內容,可達到邏輯段在整個1mb儲存空間中浮動。

5樓:匿名使用者

8086裡面提供了一個叫做地址加法器的東西,它可以將要訪問的地址從16位加工成20位的地址。

以這個20位地址為起點cpu可以向後訪問64kb的記憶體,如果需要訪問更多地址,則可以用地址加法器生成一個更大的起點地址(段基址),再從此起點向後又可以訪問64kb記憶體。

以此類推,就完成了對所有記憶體地址的訪問。20根地址線外面接了1m的記憶體。如果不採用這種分段方式cpu只能定址00000h到0ffffh的記憶體地址,這才64kb,剩下的960kb浪費了,豈不是太可惜了,所以,要採用分段管理。

8086cpu儲存器為什麼要採用分段的形式?

6樓:文東出山

為了解決你說的這個問題,8086裡面提供了一個叫做地址加法器的東西,它可以將你要訪問的地址從16位加工成20位的地址。以這個20位地址為起點cpu可以向後訪問64kb的記憶體,如果需要訪問更多地址,則可以用地址加法器生成一個更大的起點地址(段基址),再從此起點向後又可以訪問64kb記憶體。以此類推,就完成了對所有記憶體地址的訪問。

20根地址線外面接了1m的記憶體。如果不採用這種分段方式cpu只能定址00000h到0ffffh的記憶體地址,這才64kb,剩下的960kb浪費了,豈不是太可惜了?

課本上有8086邏輯結構的圖,你看看。

8086系統中的儲存器為什麼要採用分段結構?有什麼好處?

7樓:匿名使用者

分段結構可以實現在有限的地址線路條數的情況下可定址更大的儲存空間...

8086有20根地址線..其內部暫存器都是16位的,可定址2的16次方位元組,也就是64kb,這個大小完全不能滿足使用,因此採用了分段技術,將記憶體空間劃分為無數個邏輯段,邏輯段沒有固定的位置,可以在記憶體中任意浮動。

寫的程式中指令了只用到16位地址,縮短了指令長度,提高了程式執行速度。

8088/8086 cpu 是如何實現記憶體的分段管理的?這種管理機制的優劣有哪些?

8樓:沙裡波特

用段暫存器和偏移地址暫存器,搭配在一起,合成 20 位的地址號碼。

缺點,是添亂。沒有優點。到了 386 cpu 問世的時候,就不分段了。

或者說,全部記憶體,就分成一個段。

分段管理,就是個笑柄。其它品牌的 cpu,都沒有用這麼笨的方法。

8086/8088系統中,儲存器為什麼要分段,一個段的最大和最小各為多少位元組

9樓:教育仁昌

8086/8088系統中,儲存器分段的主要目的是便於儲存器的管理,使得可以用16位暫存器來定址20位的記憶體空間。一個段最大為64kb,最小為16b。

儲存器一般用來儲存程式的中間結果,為隨後的指令快速提供運算元,從而避免把中間結果存入記憶體,再讀取記憶體的操作。

由於儲存器的個數和容量都有限,不可能把所有中間結果都儲存在儲存器中,所以,要對儲存器進行適當的排程。根據指令的要求,管理安排適當的暫存器,避免運算元過多的傳送操作。

8086/8088cpu可直接定址1mb的儲存器空間,直接定址需要20位地址碼,而所有內部暫存器都是16位的,只能直接定址6kb,因此採用分段技術來解決。將1mb的儲存空間分成若干邏輯段,每段最長64kb,最短16b。這些邏輯段在整個儲存空間中可浮動。

10樓:搗蒜大師

8086cpu的資料匯流排是16位。

地址匯流排的寬度不一定要與alu的寬度相同。因為alu的寬度是固定的,它受限於當時的工藝水平,當時只能製造出16位的alu;但地址匯流排不一樣,它可以設計得更寬。

如果地址匯流排太窄的話,可定址範圍會很小。如果地址匯流排設計為16位的話,可定址空間是2^16=64kb,這在當時被認為是不夠的;intel最終決定要讓8086的地址空間為1m,也就是20位地址匯流排。

把記憶體分為很多段,每一段有一個段基址,當然段基址也是一個20位的記憶體地址。不過段暫存器仍然是16位的,它的內容代表了段基址的高16位,這個16位的地址後面再加上4個0就構成20位的段基址。

這樣,一個完整的實體記憶體地址就由兩部分組成,高16位的段基址和低16位的段內偏移量,當然它們有12位是重疊的,它們兩部分相加在一起,才構成完整的實體地址。

11樓:

8086/8088內部暫存器都只有16位,而訪問記憶體單元在多數情況下都要通過暫存器間接定址,很明顯,若不採取特殊措施,是無法訪問1mb的儲存空間的。8086/8088採用了將地址空間分段的方法來解決這個問題,即將1mb的地址空間劃分為若干個64kb的段(每段最大為64kb,最小為16b)然後再用段基地址加上段內偏移地址來訪問物理儲存器。

12樓:橋今瑤

cpu為16位 而實體地址是20位 所以將地址空間分段。將其地址空間分位若干個64kb的段,最大64kb,最小16b。

13樓:匿名使用者

8086/8088系統中,儲存器為什麼要分段?一個段最大為多少位元組?最小為多少位元組?

解:分段的主要目的是便於儲存器的管理,使得可以用16位暫存器來定址20位的記憶體空間。一個段最大為64kb,最小為16b。

14樓:啥玩意兒

分段結構可以實現在有限的地址線路條數的情況下可定址更大的儲存空間。

8086有20根地址線,其內部暫存器都是16位的,可定址2的16次方位元組,也就是64kb,這個大小完全不能滿足使用,因此採用了分段技術,將記憶體空間劃分為無數個邏輯段,邏輯段沒有固定的位置,可以在記憶體中任意浮動。寫的程式中指令了只用到16位地址,縮短了指令長度,提高了程式執行速度。

8086cpu把1mb 的記憶體空間分成幾個邏輯段?

15樓:匿名使用者

8086cpu把1mb 的記憶體空間分成一個段,範圍就是64k。

段和段,可以重疊,甚至可以完全重合,即共用同一個64k。那麼,就是可以隨便分,多少段都行。如果不重疊,最多就是分成16個段,因為:16 × 64k = 1m。

8086把1mb的儲存空間分為若干個邏輯段,每段最多可含64kb長的連續儲存單元。每個段由軟體賦給一個起始地址,這個地址低四位為零。

擴充套件資料

8086型別的cpu地址匯流排寬度為20,定址能力相當於2的20次方,資料匯流排為16,一次性傳遞資料2b,讀取1k資料需要512次。8086把1mb的儲存空間分為若干個邏輯段,每段最多可含64kb長的連續儲存單元。每個段由軟體賦給一個起始地址,這個地址低四位為零。

8086cpu最大可訪問1mb的儲存空間。8086 cpu有20條地址線,可直接定址1mb的儲存空間,每一個儲存單元可以存放一個位元組(8位)二進位制資訊。

微機原理中提到在計算機硬體中傳遞的高低電平的2進位制訊號,1根是2的1次方,2根是2的2次方,以此類推20根就是2的20次方,也就是2^10*2^10--2的10次方乘以2的10次方,也就是1024*1024=1mb。這樣才可以在8086工作在任何狀態下都可以保證資料通道不會阻塞。

16樓:龍三遊戲

一個段,範圍就是64k。

段和段,可以重疊,甚至可以完全重合,即共用同一個64k。那麼,就是可以隨便分,多少段都行。 如果不重疊,最多就是分成16個段。因為:16 × 64k = 1m。

分段技術只是邏輯上的概念,並不是說非要把1mb的記憶體空間劃分了,利用段+偏移來定址,這樣有助於資料的訪問,不同的段只需要載入段首地址就可以實現訪問了。

若干個具體是多少是不確定了,因為在實際的應用中,比如資料段和**段這是可以重疊的,所以不能確定哪個段是某個固定的大小。另外利用分段技術可以很容易實現重定向的,這才是採用分段技術的關鍵說在。

17樓:

分段技術只是邏輯上的概念,並不是說非要把1mb的記憶體空間劃分了,利用段+偏移來定址,這樣有助於資料的訪問,不同的段只需要載入段首地址就可以實現訪問了。若干個具體是多少是不確定了,因為在實際的應用中,比如資料段和**段這是可以重疊的,所以不能確定哪個段是某個固定的大小。另外利用分段技術可以很容易實現重定向的,這才是採用分段技術的關鍵說在。

如果還不是很清楚,可以繼續跟貼

18樓:

理論上可分為:1024*1024/16=65536(個)

虛擬記憶體問題高手進來看看謝謝了

當系統執行時,先要將所需的指令和資料從外部儲存器 如硬碟 軟盤 光碟等 調入記憶體中,cpu 再從記憶體中讀取指令或資料進行運算,並將運算結果存入記憶體中,記憶體所起的作用就像一個 二傳手 的 作用。當執行一個程式需要大量資料 佔用大量記憶體時,記憶體這個倉庫就會被 塞滿 而在這個 倉庫 中總有一部...

「長期股權投資」科目的理解問題 謝謝了,大神幫忙啊

如果所取得的股權投資的公允價值比所放棄非現金資產的公允價值更為清楚,在以取得股權投資的公允價值確定其投資成本時,如被投資單位為 公開上市公司,該股權的公允價值即為對應的股份的市價總額 如被投資單位為其他企業,該股權的公允價值按評估確認價或雙方協議價確定。長期股權投資是指通過投資取得被投資單位的股份。...

CPU超頻和記憶體時序的問題,CPU超頻為什麼記憶體時序也提升?

在用cpu z看記憶體時序的時候有一項 記憶體頻率 只有300多mhz,而2個記憶體是ddr2 667。不應該是667mhz。這裡看到的頻率是當前記憶體實際的執行頻率,數值乘以2就是等效頻率。由於ddr2記憶體在時脈頻率的上升沿和下降沿都傳輸資料,所以實際的執行頻率是等效頻率的一半,ddr2 667...