基礎知識
機器語言
機器語言是機器指令的集合湘换,機器指令是一臺計算機可以正確執(zhí)行的命令窍箍,是一列二進制數字。計算機將其轉變成對應的一列高低電平温亲,以驅動計算機的電子器件手报,進行CPU的主要工作——運算乒验。
每一種微處理器的硬件設計和內部架構都不同挥转,故需要用不同的電平脈沖來控制其工作兜看,所以每一種微處理器都有其自己的機器指令集骨坑,也就是機器語言撼嗓。
若使用8086CPU完成運算 s = 768 + 1288 - 1280, 機器碼如下:
101110000000000000000011
000001010000000000110000
001011010000000000000101
程序員們將這些機器碼打在紙帶或卡片上欢唾,1打孔且警,0不打孔,再將程序通過過紙帶機或者卡片機輸入計算機礁遣,進行運算斑芜。
匯編語言的產生
顯然,機器碼很麻煩祟霍,所以產生了匯編語言杏头。
操作:寄存器BX的內容送到AX中
機器指令:1000100111011000
匯編指令:mov ax, bx
寄存器是CPU中的儲存數據的器件,一個CPU中有多個寄存器沸呐。
匯編語言通過編譯器來編譯成機器碼醇王,再由計算機最終執(zhí)行。(編譯器的編譯工作自然也是由計算機執(zhí)行)
匯編語言的組成
匯編語言又三類指令組成
匯編指令崭添,機器碼的助記符寓娩,有對應的機器碼
偽指令,沒有對應的機器碼滥朱,由編譯器執(zhí)行根暑,計算機不執(zhí)行
其他符號,如 + - * / 等徙邻,又編譯器識別,沒有對應的機器碼
匯編指令決定了匯編語言的特性畸裳。
儲存器
CPU要運算的數據的儲存位置缰犁,指令和數據都在儲存器中存放,就是內存(RAM)怖糊。
指令和數據
在內存或磁盤中帅容,指令和數據沒有任何區(qū)別,都是二進制信息伍伤。
儲存單元
儲存器被劃分成多個儲存單元并徘,每個儲存單元從0開始順序編號,如一個有128個儲存單元的儲存器扰魂,編號從0
~ 127.
微型機儲存器的一個儲存單元可以存儲一個Byte麦乞,即8個二進制位蕴茴,即8個bit,bit(比特)是電子計算機的最小信息單位
CPU對存儲器的讀寫
CPU想要從內存中讀取數據姐直,首先要制定存儲單元的地址倦淀,就像數據居住在一個小區(qū)的一個房子里,我們要找數據就要先確定他住在哪個房子里声畏,而每個房子都有自己的門牌號碼撞叽,這號碼就可以看成儲存器的編號。
在CPU讀寫數據時還要指明其要對哪一個器件進行操作插龄,因為CPU中不知有儲存器這一種器件愿棋。
CPU要進行數據的讀寫,必須和外部器件(芯片)進行下面3類信息的交互
存儲器單元的地址(地址信息)
器件的選擇均牢,讀或寫的命令(控制信息)
-
讀或寫的數據(數據信息)
在計算機中有專門連接CPU和其他芯片的導線(電子計算機處理初斑、傳輸的信息都是電信號,電信號當然要用導線傳送)稱為總線膨处,總線從邏輯上又分為3類:地址總線见秤、控制總線和數據總線。
-
讀3號位置的數據操作:
CPU通過地址線對內存發(fā)出信息3
CPU通過控制線發(fā)出內存讀命令真椿,選中存儲器芯片鹃答,并通知其要從中讀取數據
存儲器將3號位置的數據通過數據線發(fā)到CPU
機器碼: 10100001 00000011 00000000
匯編指令:mov ax, [3]
含義: 傳送3號單元的內容送入ax
地址總線
不同CPU的地址總線不同且有限,假設一個CPU有N根地址總線突硝,那么它最多可以尋找2的N次方個內存單元(Byte)
數據總線
數據總線的寬度決定了CPU和外界的數據傳送速度测摔,比如8根數據總線一次可以傳送一個8位二進制數據(即一個字節(jié),一個Byte解恰,一個存儲單元)
- 當CPU的數據總線寬度為8锋八,那么它向內存中寫入數據89D8H時,就要分成兩次傳送护盈,第一次傳送D8挟纱,第二次傳送89,
第一次:
10010001 (89)
第二次:
00011011 (D8)
- 當CPU的數據總線寬度為16腐宋,那么他可以一次傳送89D8H
第一次:
00011011 - 10010001 (89D8)
控制總線
控制總線的寬度決定了CPU對外部器件的控制能力紊服,前面講的內存讀寫命令是又幾根控制線綜合發(fā)出的,其中一根稱為“讀信號輸出”的控制線負責由CPU向外部傳送讀信號胸竞,CPU向該控制線輸出低電平表示將要讀取數據欺嗤;同理,有一根稱為“寫信號輸出”的控制線負責傳送寫信號卫枝。
內存地址空間概述
一個CPU的地址總線寬度為10煎饼,那么可以尋址2的10次方即1024個內存單元,這1024個可尋到的內存單元就構成這個CPU的內存地址空間校赤。
主板
就是PC機中的各個核心器件和主要器件都通過總線(地址總線吆玖、數據總線筒溃、控制總線)相連。這些器件有CPU衰伯、存儲器铡羡、外圍芯片組、擴展插槽等意鲸。擴展插槽根據接口和協議的不同烦周,一般插有RAM內存條和各類接口卡。
接口卡
所有可用程序控制其工作的設備怎顾,都要由CPU進行控制读慎。
但CPU不能對外部設備直接控制,如顯示器槐雾、音響夭委、打印機等。所以CPU通過總線向接口卡發(fā)送命令募强,接口卡根據CPU的命令控制外設進行工作株灸。
各類存儲器芯片
- RAM 隨機存儲器
用于存放CPU使用的絕大部分程序和數據
- 裝有BIOS的ROM 只讀存儲器
BIOS是由各種接口卡廠商提供的軟件系統,可以通過它利用該硬件設備進行最基本的輸入輸出(Basic
Input/Outp System)
- 接口卡上的RAM
如顯存擎值,應付大批量輸入輸出數據的暫時存儲情況慌烧,我們將需要顯示的內容寫入顯存,就會顯示在顯示器上鸠儿。
內存地址空間
上面說的各類存儲器屹蚊,在物理上是獨立的器件,但有以下兩點相同:
都和CPU的總線相連(直接:RAM等进每, 間接: 接口卡)
CPU對它們進行讀或寫的時候都通過控制線發(fā)出內存讀寫命令汹粤。
也就是說,CPU把他們總的當作一個由若干存儲單元組成的邏輯存儲器田晚,這個邏輯存儲器就是我們所說的內存地址空間嘱兼,匯編語言面對的就是這個內存地址空間。
這個總的邏輯存儲器通過不同的器件的空間分成了一個個地址段肉瓦,CPU通過訪問不同的地址段以達到控制不同的器件的目的遭京,在一段地址空間中讀寫數據,實際上就是在相對應的物理存儲器中讀寫數據泞莉。
假設內存地址空間的地址段分配如下:
- 地址0~7FFFH的 32KB空間為 主隨機存儲器的地址空間;
- 地址8000H~9FFFH的 8KB空間 為 顯存地址空間船殉;
- 地址A000H~FFFFH的 24KB為 各個ROM的地址空間鲫趁;
這樣,當CPU向內存地址為1000H的內存單元中寫入數據利虫,這個數據就會被寫入到隨機存儲器中挨厚,以此類推堡僻。
- 而CPU向內存地址為C000H的內存單元中寫入數據的操作是沒有結果的,因為C000H單元的內容是ROM存儲器中的一個單元疫剃,它是只讀的钉疫。
內存地址空間受CPU地址總線寬度的限制。
8086CPU的地址總線寬度為20巢价,所以可以傳送2的20次方個不同的地址信息(0 ~ 2的20次方-1)牲阁,即可以定位2的20次方個內存單元,則8086PC的內存地址空間大小為1MB(1024KB壤躲、2的20次方Byte)城菊。
同理,80386CPU的地址總線寬度為32碉克,則內存地址空間最大為4GB凌唬。
在使用基于一個計算機硬件系統進行編程的時候,必須知道這個系統的內存地址空間分配情況漏麦。