知識(shí)點(diǎn):機(jī)器語(yǔ)言、匯編語(yǔ)言的產(chǎn)生、匯編語(yǔ)言的組成、存儲(chǔ)器、指令和數(shù)據(jù)、存儲(chǔ)單元、CPU對(duì)存儲(chǔ)器的讀寫(xiě)、地址總線、數(shù)據(jù)總線、控制總線、內(nèi)存地址空間(概述)、主板、接口卡、各類(lèi)存儲(chǔ)器芯片、內(nèi)存地址空間。
匯編語(yǔ)言是直接在硬件之上工作的編程語(yǔ)言,首先要了解硬件系統(tǒng)的結(jié)構(gòu),才能有效地應(yīng)用匯編語(yǔ)言對(duì)其編程。
機(jī)器語(yǔ)言
說(shuō)到匯編語(yǔ)言的產(chǎn)生,首先要講一下機(jī)器語(yǔ)言。機(jī)器語(yǔ)言是機(jī)器指令的集合。機(jī)器指令展開(kāi)來(lái)講就是一臺(tái)機(jī)器可以正確執(zhí)行的命令。
電子計(jì)算機(jī)的機(jī)器指令是一列二進(jìn)制數(shù)字。計(jì)算機(jī)將之轉(zhuǎn)變?yōu)橐涣懈叩碗娖?,以使?jì)算機(jī)的電子器件受到驅(qū)動(dòng),進(jìn)行運(yùn)算。
上面所說(shuō)的計(jì)算機(jī)指的是可以執(zhí)行機(jī)器指令,進(jìn)行運(yùn)算的機(jī)器。這是早期計(jì)算機(jī)的概念。現(xiàn)在,在常用的PC機(jī)中,有一個(gè)芯片來(lái)完成上面所說(shuō)的計(jì)算機(jī)的功能,這個(gè)芯片就是我們常說(shuō)的CPU(Central Processing Unit,中央處理器單元),CPU是一種微處理器。
以后我們提到的計(jì)算機(jī)是指由CPU和其他受CPU直接或間接控制的芯片、器件、設(shè)備組成的計(jì)算機(jī)系統(tǒng),比如我們最常見(jiàn)的PC機(jī)。
每一種微處理器,由于硬件設(shè)計(jì)和內(nèi)部結(jié)構(gòu)和不同,就需要用不同的電平脈沖來(lái)控制,使它工作。所以每一種微處理器都有自己的機(jī)器指令集,也就是機(jī)器語(yǔ)言。
早期的程序設(shè)計(jì)均使用機(jī)器語(yǔ)言。程序員們將用0、1數(shù)字編成的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過(guò)紙帶機(jī)或卡片機(jī)輸入計(jì)算機(jī),進(jìn)行運(yùn)算。
應(yīng)用8086CPU完成計(jì)算 s = 768 + 12288 - 1280,機(jī)器碼如下:
1011000000000000000000000000011
0000010100000000000000000110000
0010110100000000000000000000101
要書(shū)寫(xiě)和閱讀機(jī)器碼程序不是一件簡(jiǎn)單的工作,要記住所有抽象的二進(jìn)制碼。上面只是一個(gè)非常簡(jiǎn)單的小程序,就暴露了機(jī)器碼的晦澀難懂和不易查錯(cuò)。
匯編語(yǔ)言的產(chǎn)生
早期的程序員很快就發(fā)現(xiàn)了使用機(jī)器語(yǔ)言帶來(lái)的麻煩,它是如此難于辨別和記憶,給整個(gè)產(chǎn)業(yè)的發(fā)展帶來(lái)了障礙。于是匯編語(yǔ)言產(chǎn)生了。
匯編語(yǔ)言的主體是匯編指令。
匯編指令和機(jī)器指令的差別在于指令的表示方法上。
匯編指令是機(jī)器指令便于記憶的書(shū)寫(xiě)格式。
例如:機(jī)器指令 1000100111011000表示把寄存器BX的內(nèi)容送到AX中。匯編指令則寫(xiě)成mov ax, bx,這樣的寫(xiě)法與人類(lèi)語(yǔ)言接近,便于閱讀和記憶。
操作:寄存器BX的內(nèi)容送到AX中
機(jī)器指令:1000100111011000
匯編指令:mov ax, bx
(寄存器,簡(jiǎn)單地講是CPU中可以存儲(chǔ)數(shù)據(jù)的器件,一個(gè)CPU中有多個(gè)寄存器。AX是其中一個(gè)寄存器的代號(hào),BX是另一個(gè)寄存器的代號(hào)。)
此后,程序員們就用匯編指令編寫(xiě)源程序。可是,計(jì)算機(jī)能讀懂的只有機(jī)器指令,那么如何讓計(jì)算機(jī)執(zhí)行程序員用匯編指令編寫(xiě)的程序呢?這時(shí),就需要有一個(gè)能夠將匯編指令轉(zhuǎn)換成機(jī)器指令的翻譯程序,這樣的程序被稱(chēng)為編譯器。程序員用匯編語(yǔ)言寫(xiě)出源程序,再用匯編編譯器將其編譯為機(jī)器碼。由計(jì)算機(jī)最終執(zhí)行。
用匯編語(yǔ)言編寫(xiě)程序的工作過(guò)程:
(程序員)匯編指令 --> 編譯器 --> 機(jī)器碼 --> 計(jì)算機(jī)
匯編語(yǔ)言的組成
匯編語(yǔ)言發(fā)展至今,由以下3類(lèi)指令組成。
匯編指令:機(jī)器碼的助記符,有對(duì)應(yīng)的機(jī)器碼。
偽指令:沒(méi)有對(duì)應(yīng)的機(jī)器碼,由編譯器執(zhí)行,計(jì)算機(jī)并不執(zhí)行。
其他符號(hào):如:+、-、*、/等,由編譯器識(shí)別,沒(méi)有對(duì)應(yīng)的機(jī)器碼。
匯編語(yǔ)言的核心是匯編指令,它決定了匯編語(yǔ)言的特性。
存儲(chǔ)器
CPU是計(jì)算機(jī)的核心部件,它控制整個(gè)計(jì)算機(jī)的運(yùn)作并進(jìn)行運(yùn)算。
要想讓一個(gè)CPU工作,就必須向它提供指令和數(shù)據(jù)。
指令和數(shù)據(jù)在存儲(chǔ)器中存放,也就是平時(shí)所說(shuō)的內(nèi)存。
在一臺(tái)PC機(jī)中內(nèi)在的作用僅次于CPU。離開(kāi)了內(nèi)存,性能再好的CPU也無(wú)法工作。
這就像再聰明的大腦,沒(méi)有了記憶也無(wú)法進(jìn)行思考。
磁盤(pán)不同于內(nèi)存,磁盤(pán)上的數(shù)據(jù)或程序如果不讀到內(nèi)存中,就無(wú)法被CPU使用。
要靈活地利用匯編語(yǔ)言編程,首先要了解CPU是如何從內(nèi)存中讀取信息,以及向內(nèi)存中寫(xiě)入信息的。
指令和數(shù)據(jù)
指令和數(shù)據(jù)是應(yīng)用上的概念。在內(nèi)存或磁盤(pán)上,指令和數(shù)據(jù)沒(méi)有任何區(qū)別,都是二進(jìn)制信息。
CPU在工作的時(shí)候把有的信息看作指令,有的信息看作數(shù)據(jù),為同樣的信息賦予了不同的意義。
就像圍棋的棋子,在棋盒里的時(shí)候沒(méi)有任何區(qū)別,在對(duì)弈的時(shí)候就有了不同的意義。
例如,內(nèi)存中的二進(jìn)制信息 1000100111011000,計(jì)算機(jī)可以把它看作大小為89D8H的數(shù)據(jù)來(lái)處理,也可以將基看作指令mov ax, bx來(lái)執(zhí)行。
1000100111011000 --> 89D8H(數(shù)據(jù))
1000100111011000 --> mov ax, bx(指令)
存儲(chǔ)單元
存儲(chǔ)器被劃分成若干個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元從0開(kāi)始順序編號(hào),例如一個(gè)存儲(chǔ)器有128個(gè)存儲(chǔ)單元,編號(hào)從0~127。
電子計(jì)算機(jī)的最小信息單位是bit(音譯為比特),也就是一個(gè)二進(jìn)制位。
8個(gè)bit組成一個(gè)Byte,也就是通常講的一個(gè)字節(jié)。
微型機(jī)存儲(chǔ)器的存儲(chǔ)單元可以存儲(chǔ)一個(gè)字節(jié),即8個(gè)二進(jìn)制位。
一個(gè)存儲(chǔ)器有128個(gè)存儲(chǔ)單元,它可以存儲(chǔ)128個(gè)字節(jié)。
微機(jī)存儲(chǔ)器的容量是以字節(jié)為最小單位來(lái)計(jì)算的。
對(duì)于擁有128個(gè)存儲(chǔ)單元的存儲(chǔ)器,我們可以說(shuō),它的容量是128字節(jié)。
對(duì)于大容量的存儲(chǔ)器一般還用以下單位計(jì)量容量(以下B來(lái)代表Byte):
1KB = 1024B
1MB = 1024KB
1GB = 1024 MB
1TB = 1024 GB
磁盤(pán)的容量單位同內(nèi)存的一樣,以上單位是微機(jī)中常用的計(jì)量單位。
CPU對(duì)存儲(chǔ)器的讀寫(xiě)
存儲(chǔ)器被劃分成多個(gè)存儲(chǔ)單元,存儲(chǔ)單元從零開(kāi)始順序編號(hào)。這些編號(hào)可以看作存儲(chǔ)單元在存儲(chǔ)器中的地址。就像一條街,每個(gè)房子都有門(mén)牌號(hào)碼。
CPU要從內(nèi)在中讀數(shù)據(jù),首先要指定存儲(chǔ)單元的地址。
也就是說(shuō)它要先確定讀取哪一個(gè)存儲(chǔ)單元的數(shù)據(jù)。就像在一條街上找人,先要確定他住哪個(gè)房子里。
另外,在一臺(tái)微機(jī)中,不只有存儲(chǔ)器這一種器件。CPU在讀寫(xiě)數(shù)據(jù)時(shí)還要指明,它要對(duì)哪一個(gè)器件進(jìn)行操作,進(jìn)行哪種操作,是從中讀出數(shù)據(jù),還是向里面寫(xiě)入數(shù)據(jù)。
可見(jiàn),CPU要想進(jìn)行數(shù)據(jù)的讀寫(xiě),必須和外部器件(標(biāo)準(zhǔn)的說(shuō)法是芯片)進(jìn)行3類(lèi)信息的交互:
*存儲(chǔ)單元的地址(地址信息)
*器件的選擇,讀或?qū)懙拿睿刂菩畔ⅲ?br>*讀或?qū)懙臄?shù)據(jù)(數(shù)據(jù)信息)
那么CPU是通過(guò)什么將地址、數(shù)據(jù)和控制信息傳到存儲(chǔ)器芯片中的呢?
電子計(jì)算機(jī)能處理、傳輸?shù)男畔⒍际请娦盘?hào),電信號(hào)當(dāng)然要用導(dǎo)線傳送。在計(jì)算機(jī)中專(zhuān)門(mén)有連接CPU和其他芯片的導(dǎo)線,通常稱(chēng)為總線。
總線從物理上來(lái)講,就是一根根導(dǎo)線的集合。
根據(jù)傳送信息的不同,總線從邏輯上又分為3類(lèi),即地址總線、控制總線、和數(shù)據(jù)總線。
CPU從3號(hào)單元中讀取數(shù)據(jù)的過(guò)程如下:
CPU
|
|
內(nèi)存 |
|
地址線
|
12 [0] |
|
3-----> |
3B [1] |
|
|
9C [2] |
|
數(shù)據(jù)線 |
08 [3] |
|
8<----- |
31 [4] |
|
|
23 [5] |
|
控制線 |
15 [6] |
|
內(nèi)存讀寫(xiě)命令---> |
13 [7] |
|
|
18 [8] |
cpu從內(nèi)存中讀取數(shù)據(jù)的過(guò)程。
(1)CPU通過(guò)地址線將地址信息3發(fā)出。
(2)CPU通過(guò)控制線發(fā)出內(nèi)在讀命令,選中存儲(chǔ)器芯片,并通知它,將要從中讀取數(shù)據(jù)。
(3)存儲(chǔ)器將3號(hào)單元中的數(shù)據(jù)08通過(guò)數(shù)據(jù)線送入CPU。
寫(xiě)操作與讀操作的步驟相似。向3號(hào)單元寫(xiě)入數(shù)據(jù)26:
(1)CPU通過(guò)地址線將地址信息3發(fā)出。
(2)CPU通過(guò)控制線發(fā)出內(nèi)存寫(xiě)命令,選中存儲(chǔ)器芯片,并通知它,要向其中寫(xiě)入數(shù)據(jù)。
(3)CPU通過(guò)數(shù)據(jù)線將數(shù)據(jù)26送入內(nèi)存的3號(hào)單元中。
從上面的我們知道CPU是如何進(jìn)行數(shù)據(jù)讀寫(xiě)的??墒?,我們?nèi)绾蚊钣?jì)算機(jī)進(jìn)行數(shù)據(jù)的讀寫(xiě)呢?
要讓一個(gè)計(jì)算機(jī)或微處理器工作,應(yīng)向它輸入能夠驅(qū)動(dòng)它進(jìn)行工作的電平信息(機(jī)器碼)。
對(duì)于8086CPU,下面的機(jī)器碼能夠完成從3號(hào)單元讀數(shù)據(jù):
機(jī)器碼:101000000000001100000000
含義:從3號(hào)單元讀取數(shù)據(jù)送入寄存器AX
CPU接收這條機(jī)器碼后將完成上面所述的讀寫(xiě)工作。
機(jī)器碼難于記憶,用匯編指令來(lái)表示,情況如下:
機(jī)器碼:101000000000001100000000
對(duì)應(yīng)的匯編指令:MOV AX, [3]
含義:傳送3號(hào)單元的內(nèi)容到AX
地址總線CPU是通過(guò)地址總線來(lái)指定存儲(chǔ)器單元的。
地址總線上能傳送多少個(gè)不同的信息,CPU就可以對(duì)多少個(gè)存儲(chǔ)單元進(jìn)行尋址。
現(xiàn)假設(shè),一個(gè)CPU有10根地址線,讓我們來(lái)看一下它的尋址情況。
在電子計(jì)算機(jī)中,一根導(dǎo)線可以傳送的穩(wěn)定狀態(tài)只有兩種,高電平或低電平。
用二進(jìn)制表示就是1或0,10根導(dǎo)線可以傳送10位二進(jìn)制數(shù)據(jù)。
而10位二進(jìn)制數(shù)可以表示多個(gè)不同的數(shù)據(jù)呢?
2的10次方個(gè),最小數(shù)為0,最大數(shù)為1023。
一個(gè)CPU有N根地址線,則可以說(shuō)這個(gè)CPU的地址總線的寬度為N。
這樣的CPU最多可以尋找2的N次方個(gè)內(nèi)存單元。
數(shù)據(jù)總線
CPU與內(nèi)存或其他器件之間的
數(shù)據(jù)傳送是通過(guò)數(shù)據(jù)總線來(lái)進(jìn)行的。
數(shù)據(jù)總線的寬度決定了CPU和外界的數(shù)據(jù)傳送速度。
8根數(shù)據(jù)總線一次可傳送一個(gè)8位二進(jìn)制數(shù)據(jù)(即一個(gè)字節(jié))。
16根數(shù)據(jù)總線一次可傳送2個(gè)字節(jié)。
控制總線CPU對(duì)外部器件的控制是通過(guò)總線來(lái)進(jìn)行的。在這里控制總線是個(gè)總稱(chēng),控制總線是一些不同控制線的集合。
有多少根控制總線,就意味著這個(gè)CPU提供了對(duì)外部器件的多少種控制。
所以,控制總線的寬度決定了CPU對(duì)外部器件的控制能力。
內(nèi)存讀寫(xiě)命令是由幾根控制線綜合發(fā)出的,其中有一根名為讀信號(hào)輸出控制線負(fù)責(zé)由CPU向外傳送讀信號(hào),CPU向該控制線上輸出低電平表示將要讀取數(shù)據(jù);有一根名為寫(xiě)信號(hào)輸出的控制線則負(fù)責(zé)傳送寫(xiě)信號(hào)。
小結(jié)
1)匯編指令是機(jī)器指令的助記符,同機(jī)器指令一一對(duì)應(yīng)。
2)每一種CPU都有自己的匯編指令集。
3)CPU可以直接使用的信息在存儲(chǔ)器中存放。
4)在存儲(chǔ)器中指令和數(shù)據(jù)沒(méi)有任何區(qū)別,都是二進(jìn)制信息。
5)存儲(chǔ)單元從零開(kāi)始順序編號(hào)。
6)一個(gè)存儲(chǔ)單元可以存儲(chǔ)8個(gè)bit(用作單位寫(xiě)成"b"),即8位二進(jìn)制數(shù)。
7)1B=8b 1KB=1024B 1MB=1024KB 1GB=1024MB
8)每一個(gè)CPU芯片都有許多管腳,這些管腳和總線相連。也可以說(shuō),這些管腳引出總線。
一個(gè)CPU可以引出三種總線的寬度標(biāo)志了這個(gè)CPU的不同方面的性能:
地址總線的寬度決定了CPU的尋址能力;
數(shù)據(jù)總線的寬度決定了CPU與其他器件進(jìn)行數(shù)據(jù)傳送時(shí)的一次數(shù)據(jù)傳送數(shù);
控制總線的寬度決定了CPU對(duì)系統(tǒng)中其他器件的控制能力。
習(xí)題:
(1)1個(gè)CPU的尋址能力為8KB,那么它的地址總線的寬度為_(kāi)_______。
(2)1KB的存儲(chǔ)器有________個(gè)存儲(chǔ)單元?存儲(chǔ)單元的編號(hào)從__________到__________。
(3)1KB的存儲(chǔ)器可以存儲(chǔ)_________個(gè)bit,_________個(gè)byte。
(4)1GB,1MB,1KB分別是_____________________________byte。
(5)8080、8088、80286、80386的地址總線分別為16根、20根、24根、32根,則它們的尋址能力分別為:__________KB、________MB、__________MB、______________GB。
(6)8080、8088、8086、80286、80386的數(shù)據(jù)總線寬度分別為8根、8根、16根、16根、32根。則它們一次可以傳送的數(shù)據(jù)為:_______B、________B、________B、__________B、_______B。
(7)從內(nèi)存中讀取1024字節(jié)的數(shù)據(jù),8086至少要讀_______次,80386至少要讀__________次。
(8)在存儲(chǔ)器中,數(shù)據(jù)和程序以________形式存放。
答案:
(1)13
解析:微型機(jī)的存儲(chǔ)單元可以存儲(chǔ)一個(gè)字節(jié),即8個(gè)二進(jìn)制位。8KB即8K字節(jié),即2的13次方個(gè)存儲(chǔ)單元。一個(gè)CPU有N根地址線,則可以說(shuō)這個(gè)CPU的地址總線的寬度為N,這樣的CPU最多可以尋找2的N次方個(gè)存儲(chǔ)單元。
(2)1024,0,1023
解析:1KB,即1024字節(jié),一個(gè)存儲(chǔ)單元為一個(gè)字節(jié)。存儲(chǔ)單元從零開(kāi)始順序編號(hào)。
(3)8192,1024
解析:1B=8b 1KB=1024B
(4)2^30, 2^20, 2^10
(5)64, 1, 16, 4
解析:一個(gè)CPU有N根地址線,表示這個(gè)CPU地址總線寬度為N,可以尋址2的N次方個(gè)存儲(chǔ)單元。
(6)1,1,2,2,4
解析:一根數(shù)據(jù)線,只能傳送一位二進(jìn)制數(shù)(0或1,低電平或高電平)
(7)512, 256
解析:8086的數(shù)據(jù)總線寬度為16,一次可以傳送2個(gè)字節(jié),80386的數(shù)據(jù)總線寬度為32,一次可以傳送4個(gè)字節(jié)。
(8)二進(jìn)制(0或1)
內(nèi)存地址空間(概述)什么是內(nèi)存地址空間呢?
舉例來(lái)講,一個(gè)CPU的地址線寬度為10,那么可以尋址1024個(gè)內(nèi)存單元(存儲(chǔ)單元,一個(gè)存儲(chǔ)單元在微型機(jī)中表示一個(gè)字節(jié)),這1024個(gè)可尋到的內(nèi)存單元就構(gòu)成了這個(gè)CPU的內(nèi)存地址空間。
主板
在每一臺(tái)PC機(jī)中,都有一個(gè)主板,主板上有核心器件和一些主要器件,這些器件通過(guò)總線(地址總線、數(shù)據(jù)總線、控制總線)相連。
這些器件有:CPU、存儲(chǔ)器、外圍芯片組、擴(kuò)展插槽等。
擴(kuò)展插槽上一般插有RAM內(nèi)存條和各類(lèi)接口卡。
接口卡
計(jì)算機(jī)系統(tǒng)中,所有可用程序控制其工作的設(shè)備,必須受到CPU的控制。
CPU對(duì)外部設(shè)備都不能直接控制,如顯示器、音箱、打印機(jī)等。
直接控制這些設(shè)備進(jìn)行工作的是插在擴(kuò)展插槽上的接口卡。
擴(kuò)展插槽通過(guò)總線和CPU相連,所以接口卡也通過(guò)總線同CPU相連。
CPU可以直接控制這些接口卡,從而實(shí)現(xiàn)CPU對(duì)外設(shè)的間接控制。
簡(jiǎn)單地講,就是
CPU通過(guò)總線向接口卡發(fā)送命令,接口卡根據(jù)CPU的命令控制外設(shè)進(jìn)行工作。
各類(lèi)存儲(chǔ)器芯片
一臺(tái)PC機(jī)中,裝有多個(gè)存儲(chǔ)器芯片,這些存儲(chǔ)器芯片從物理連接上看是獨(dú)立的、不同的器件。
從讀寫(xiě)屬性上看分為兩類(lèi):隨機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)。
隨機(jī)存儲(chǔ)器可讀可寫(xiě),但必須帶電存儲(chǔ),關(guān)機(jī)后存儲(chǔ)的內(nèi)容丟失;
只讀存儲(chǔ)只能讀取不能寫(xiě)入,關(guān)機(jī)后其中的內(nèi)容不丟失。
這些存儲(chǔ)器從功能和連接上又可分為以下幾類(lèi):
隨機(jī)存儲(chǔ)器
用于存放供CPU使用的絕大部分程序和數(shù)據(jù),主隨機(jī)存儲(chǔ)器一般由兩個(gè)位置上的RAM組成,裝在主板上的RAM和插在擴(kuò)展插槽上的RAM。
裝有BIOS(Basic Input/Output System,基本輸入輸出系統(tǒng))的ROM
BIOS是由主板和各類(lèi)接口卡(如:顯卡、網(wǎng)卡等)廠商提供的軟件系統(tǒng),可能通過(guò)它利用該硬件設(shè)備進(jìn)行最基本的輸入輸出。
在主板和某些接口卡上插有存儲(chǔ)相應(yīng)BIOS的ROM,例如:主板上的ROM中存儲(chǔ)著主板的BIOS(通常稱(chēng)為系統(tǒng)BIOS);顯卡上的ROM中存儲(chǔ)顯卡的BIOS;如果網(wǎng)卡上裝有ROM,那其中就可以存儲(chǔ)網(wǎng)卡的BIOS。
接口卡上的RAM
某些接口卡需要對(duì)大批量輸入、輸出數(shù)據(jù)進(jìn)行暫時(shí)存儲(chǔ),在其上裝有RAM。最典型的是顯示卡上的RAM,一般稱(chēng)為顯存。顯示卡隨時(shí)將顯存中的數(shù)據(jù)向顯示器上輸出。換句話說(shuō),我們將需要顯示的內(nèi)容寫(xiě)入顯存,就會(huì)出現(xiàn)在顯示器上。
內(nèi)存地址空間
上述的各種存儲(chǔ)器,它們?cè)谖锢砩鲜仟?dú)立的器件,但是它們?cè)谝韵聝牲c(diǎn)上相同:
1)都和CPU的總線相連;
2)CPU對(duì)它們進(jìn)行讀或?qū)懙臅r(shí)候都通過(guò)控制線發(fā)現(xiàn)內(nèi)在讀寫(xiě)命令。
也就是說(shuō),CPU在操縱和控制它們的時(shí)候,把它們都當(dāng)作內(nèi)存來(lái)對(duì)待,把它們總的看作一個(gè)由若干存儲(chǔ)單元組成的存儲(chǔ)器。
這個(gè)邏輯存儲(chǔ)器就是我們所說(shuō)的內(nèi)在地址空間。所有的物理存儲(chǔ)器被看作是一個(gè)由若干存儲(chǔ)單元組成的邏輯存儲(chǔ)器,每個(gè)物理存儲(chǔ)器在這個(gè)邏輯存儲(chǔ)器中占有一個(gè)地址段,即一段地址空間。
CPU在這段地址空間中讀寫(xiě)數(shù)據(jù),實(shí)際上就是在相對(duì)應(yīng)的物理存儲(chǔ)器中讀寫(xiě)數(shù)據(jù)。
內(nèi)存地址空間的大小受CPU地址總線寬度的限制。
8086CPU的地址總線寬度為20,可以傳送2^20個(gè)不同的地址信息(大小從0至2^20-1)。即可以定位2^20個(gè)內(nèi)在單元,則8086PC的內(nèi)在地址空間大小為1MB。
同理,80386CPU的地址總線寬度為32,則內(nèi)存地址空間最大為4GB。
我們?cè)诨谝粋€(gè)計(jì)算機(jī)硬件系統(tǒng)編程的時(shí)候,必須得知道這個(gè)系統(tǒng)中的內(nèi)在地址空間分配情況。
因?yàn)楫?dāng)讀者想在某類(lèi)存儲(chǔ)器中讀寫(xiě)數(shù)據(jù)的時(shí)候,讀者必須知道它的第一個(gè)單元的地址和最后一個(gè)單元的地址,才能保證讀寫(xiě)操作是在預(yù)期的存儲(chǔ)器中進(jìn)行。
比如,讀者希望向顯示器輸出一段信息,那么讀者必須將這段信息寫(xiě)到顯存中,顯卡才能將它輸出到顯示器上。要向顯存中寫(xiě)入數(shù)據(jù),讀者必須知道顯存在內(nèi)存地址空間中的地址。
不同的計(jì)算機(jī)系統(tǒng)的內(nèi)存地址空間的分配情況是不同的。
內(nèi)存地址空間
最終運(yùn)行程序的是CPU,我們用匯編編程的時(shí)候,必須要從CPU角度考慮問(wèn)題。
對(duì)CPU來(lái)講,系統(tǒng)中的所有存儲(chǔ)器中的存儲(chǔ)單元都處于一個(gè)統(tǒng)一的邏輯存儲(chǔ)器中,它的容量受CPU尋址能力的限制。
這個(gè)邏輯存儲(chǔ)器即是我們所說(shuō)的內(nèi)存地址空間。