跳至內容

爲什麼8086CPU的地址線有20根而最大可尋址的存儲空間只有1MB?

更新時間
快连VPN:速度和安全性最佳的VPN服务
快连VPN:速度和安全性最佳的VPN服务

8086CPU的地址線是20根最大可尋址1MB的存儲空間爲什麼其物

答:8086 CPU的尋址範圍爲1MB。這是因爲8086 CPU的地址線有20條,2^20等於1024KB,即1MB。然而,在8086系統中,指令只提供了16位的地址,與尋址相關的寄存器也只有16位長。因此,尋址範圍僅有64KB。爲了能夠尋址1MB的內存空間,8086 CPU將內存劃分爲四個邏輯段。當CPU訪問內存時,段寄存器的內容(段基址)會自動左移4位(以二進制表示),然後與段內的16位地址偏移量相加,從而形成20位的物理地址。

在分段結構的存儲器中,每個邏輯地址由16位的段基址和偏移地址組成。

物理地址:存儲器的絕對地址,從00000H~FFFFFH,是CPU訪問存儲器的實際尋址地址(也稱爲絕對地址)

16位的段基址左移4位(相當於在段基址最低位後添4個“0”),與偏移地址相加獲得物理地址。

物理地址=段基址*16+偏移地址

?

在分段結構的存儲器中,每個邏輯地址由16位的段基址和偏移地址組成。

物理地址:存儲器的絕對地址,從00000H~FFFFFH,是CPU訪問存儲器的實際尋址地址(也稱爲絕對地址)

16位的段基址左移4位(相當於在段基址最低位後添4個“0”),與偏移地址相加獲得物理地址。

物理地址=段基址*16+偏移地址

12彙編語言。一 80868088CPU允許的最大存儲空間爲其物

(1/2)彙編語言。一,8086/8088CPU允許的最大存儲空間爲(1MB+65520),其物理地址編號從(00000)到(ffff0+ffff+1=10FFF0)H。二、十進制數-46的十六進制數表示爲(0FFD2h或0D2H)

十進制數46的十六進制數表示爲2EH

Microsoft Windows XP [版本 5.1.2600]

(C) 版權所有 1985-2001 Microsoft Corp.

C:Documents and SettingsAdministrator>debug

-a

0AFE:0100 mov ax,2e

0AFE:0103 xor bx,bx

0AFE:0105 sub bx,ax

0AFE:0107

-t

AX=002E BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0103 NV UP EI PL NZ NA PO NC

0AFE:0103 31DB XOR BX,BX

-t

AX=002E BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0105 NV UP EI PL ZR NA PE NC

0AFE:0105 29C3 SUB BX,AX

-t

AX=002E BX=FFD2 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0107 NV UP EI NG NZ AC PE CY

0AFE:0107 0029 ADD [BX+DI],CH DS:FFD2=00

-

在8086系統中有幾個可尋址空間?各有多大

寄存器是16位的,例如AX,BX,SI,DI都是16位的,它們能表示的地址碼所以只有16位的。2的16次方等於64K,這是我們作爲程序編寫者能通過寄存器直接訪問的內存空間。而8086/8088CPU提供的地址總線有20位,2的20次方等於1M,這是CPU它自己能訪問的最大內存空間。

這就有個矛盾了:CPU能訪問1M內存,而寄存器卻只能表示64K內存大小。所以就引入段地址和偏移地址的概念。把這1M 的內存空間分成64K大小的一段段,指定哪一段,然後再在這個段的開始加上“偏移地址”,這不就可以訪問1M內存的任意空間了?

段地址怎麼得到的問題:

比如在彙編數據段某處聲明瞭某個字符變量 STR

MOV DX,SEG STR

通過SEG 語句則可把STR所在段地址取出來,送給DX.

一上內容希望對你有幫助!

以上就是爲什麼8086CPU的地址線有20根而最大可尋址的存儲空間只有1MB?的詳細內容,更多請關注本站其它相關文章!

更新時間

發表留言

請注意,留言須先通過審核才能發佈。