1. 程式人生 > 其它 >組合語言 第一章 筆記

組合語言 第一章 筆記

彙編基礎知識

組合語言的組成

彙編指令
偽指令
一些符號

儲存器

概念:
	也就是我們平常所說的執行記憶體;指令和資料在內部儲存器中存放;磁碟上的資料不讀取到記憶體中,無法被CPU使用。
目的:
	想要編寫出優秀的彙編程式,首先我們要了解CPU從記憶體中如何讀取與寫入資料。所以記憶體是彙編重點關注的部分。
必要擴充套件:
一類是內部儲存器,一斷電就會把記住的東西丟失;一類是外部儲存器,斷了電也能存住。

內部儲存器:也就是記憶體,儲存資訊速度快,斷電後儲存內容全部丟失。
外部儲存器:主要是磁碟,它所儲存的資訊不受斷電的影響,但是它的速度相對於記憶體就慢得多了。磁碟的儲存資訊不受斷電的影響,存取速度相對於記憶體慢得多了。

	磁碟又分為兩類:
		一類是硬碟,一類是軟盤。

指令和資料

概念:
	在記憶體或者磁碟上,指令和資料都是二進位制資訊,沒有任何區別;區分稱呼為指令和資料是為了安全和邏輯結構清晰;
必要擴充套件:
	二進位制和彙編指令是一一對應關係,也就是說,一條二進位制資訊對應唯一一條彙編指令。
	
疑問:
	指令和資料都是應用上的概念。組合語言,通過編譯器編譯,最後送給CPU的都是二進位制數,那麼CPU在一堆紛繁複雜的二進位制,0110000110001中如何區分指令和資料呢?

	每臺機器的指令,其格式和程式碼所代表的含義都是硬性規定的,故稱之為面向機器的語言,也稱為機器語言。二進位制,作為一種機器碼,計算機可以直接識別,不需要進行任何翻譯。
	
	計算機硬體主要通過不同的時間段來區分指令和資料,即:取指週期(或取指微程式)取出的既為指令,執行週期計算機載入的第一條肯定是指令,然後根據這條指令去取二進位制數,如果這條指令要取運算元,那麼取出來的就是運算元;如果這條指令要取下一條指令,那麼取出來得就是指令。

	把指令和資料分開放是為了安全和邏輯結構清晰。

	雖然指令和資料存放的格式一樣,但是訪問他們的時機不同。在取指令時期,cpu通過指令流取指令,存放在指令暫存器, 然後解釋並執行指令;在執行指令時期,cpu通過資料流取資料, 存放在資料暫存器。 所以指令流取的是指令,資料流取的是資料。

儲存單元

概念:
	一個儲存單元 = 一個位元組(Byte)
	一個位元組 = 8個 位元(b)
	一個位元 =  一個二進位制位
	
	位元組是微機的最小儲存單位。

CPU對儲存器的讀寫

概念:
	cpu與外部器件的互動需要知道,要互動哪個器件,資料地址在哪,操作的物件(資料),是讀是寫。傳輸介質是導線。
匯流排
概念:
	CPU與器件(晶片)通過電訊號在導線上傳輸資訊。這些導線的集合就稱呼為匯流排。
地址匯流排
傳輸地址資訊的導線。
控制匯流排
其中包含器件選擇、命令控制資訊 。一臺微機中,不只有記憶體這一種器件,CPU在發出控制指令時還需指明目標器件。
資料匯流排
資料的互動導線。如果是讀,則是元器件通過導線把資料送入CPU;如果是寫,則是CPU把資料送入到器件。
互動步驟
儲存單元的地址(地址資訊);
器件的選擇,讀或寫的命令(控制資訊);
讀或寫資料的傳輸(資料資訊);

eg:
CUP 通過 地址匯流排 向記憶體傳送代表3號地址的地址資訊;
CPU 通過 控制匯流排 向記憶體傳送讀取命令資訊,選中儲存器晶片,並通知它開啟該儲存單元的閘電路;
記憶體 發出地址對應的資料資訊 通過資料匯流排 送入CPU ;

地址匯流排

概念:
	CPU是通過地址匯流排來指定儲存單元的,也就是說,地址匯流排能傳達多少個不同的資訊,CPU就能對多少個儲存單元進行定址。
總結:
	記憶體的地址編號是從0開始,由高往低按小到大編號,而讀的時候,是從低往高讀。

資料匯流排

概念:
	CPU 和器件的資料匯流排數量決定著傳輸速度。
	8088資料匯流排寬度是8位,也就是一次可以傳輸一個位元組;8086是16位,也就是一次可以傳輸2個位元組。
擴充套件:
	為什麼32位系統是X86,不是32呢,而64位又是x64呢?
	intel的8086,80286,386~586而得名(命名規則), amd開發的大部分cpu也是基於x86架構的,x86架構的特點是cpu的暫存器是32位的。
	它的64位體系結構最早由AMD推出,被稱為“AMD64”。後來,它也被英特爾採用,被稱為“英特爾64”。也稱為“x86-64”、“x64”。

控制匯流排

概念:
	控制匯流排和上面兩種線不同,不再是所有線一起作用。控制匯流排是一些不同控制線的集合。有多少根控制線,就以為CPU對外部器件多少種控制。比如對某個器件只提供讀的控制線。所以控制匯流排的寬度體現對外部器件的控制能力。
	控制線更多的是以器件劃分圈子。

1.1-1.10 小結

  • 彙編指令是二進位制指令的助記符,他們之間是一一對應的關係。

  • 每一種CPU都有自己的彙編指令集

  • CPU可以直接使用的資料在儲存器(也就是記憶體)中

  • 在記憶體或者CPU中,指令和資料沒有區別,本質都是二進位制。之所有有不同的稱呼,是從功能的角度區分的。而區分的準繩,就是CPU訪問他們時所處的時間段。取指週期時,取的是指令;執行週期時,取的是資料。

  • 儲存單元從0開始編號,一個儲存單元就是一個位元組。

  • CPU的匯流排從功能的角度可以如下分類:

    • 地址匯流排 :其寬度決定了CPU的定址能力。比如8088的8位,8086的16位,就是說8根地址匯流排的定址能力是0-255 。

    • 控制匯流排 :其寬度決定了CPU對器件(晶片)的控制能力,比如有的器件只有1根代表讀的控制線。

    • 資料匯流排 :其寬度決定了CPU與器件的一次資料傳送能力,比如8根線,代表一次可傳輸一個位元組。

檢測

  1. 首先明確8KB的定址能力是什麼意思。1根導線分為高電平和低電平,可以表示2個儲存單元的地址,也就是2B的定址能力,以此類推,3根導線可以表示8個地址,10根導線,可以表示1024個儲存單元地址。那8KB=1024X8 B就需要 13根導線。主要是得明白定址能力的單位是B,表示一個儲存單位。

    用原文的話說:一個CPU有N根地址線,則可以說這個CPU的地址匯流排寬度位N。這樣的CPU最多可以尋找2的N次方個儲存單元。也就是說,地址是儲存單元的地址。還是得理解透徹概念。

  2. 1024 ; 0-1023

  3. 1024x8 bit ; 1024 Byte

  4. 1GB = 1024MB ; 1MB= 1024KB ; 1KB=1024Byte ;1B = 8bit

  5. 64KB 、1M 、16M 、4GB 定址能力

  6. 1 、1 、2、2、 4 傳送資料能力。8根線一次能傳1個位元組。分批傳輸的時候,注意傳輸順序和在記憶體當中的放置。主要是地址編號和讀的問題。

  7. 512 、256 、

  8. 二進位制

記憶體地址空間

概念:
	一個CPU的地址匯流排寬度位10 ,那麼可定址到1024個儲存單元,這1024個單元就構成了記憶體地址空間。	

主機板

概念:
	主機板上有核心器件與主要器件,他們溝通匯流排(地址匯流排、控制匯流排、資料匯流排)相連。

介面卡

概念:
	主要是連線外部裝置,顯示器、音響、印表機。CPU對外部裝置不能直接控制,而是通過介面卡來控制。

各類儲存器晶片

概念:
	從讀寫屬性上分類,分為RAM 隨機儲存器 和 ROM 只讀儲存器 。
  • 隨機儲存器:主隨機儲存器主要有主機板上的記憶體條和插槽處的記憶體條組成

  • 只讀儲存器: 裝有BIOS的ROM器件。比如,主機板上有bios ,介面卡上的某些外接裝置上也有bios的ROM。

  • 介面卡上的RAM : 大資料量的傳輸 ,比如顯示卡,有大容量的視訊記憶體 。

記憶體地址空間

概念:
	器件和CPU匯流排相連,並且CPU對他們的讀寫都是通過控制匯流排發出命令。這些器件的儲存單元在邏輯上組成了CPU的邏輯儲存器。這個邏輯儲存器就是記憶體地址空間。

記憶體地址空間的大小,取決於CPU地址匯流排寬度,最基本單位是B(位元組)。