答案: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 偏移位址
(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 Settings\Administrator>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?的詳細內容。更多資訊請關注PHP中文網其他相關文章!