為了更好的使用c/c++進行開發工作,我需要了解一些組合語言的知識,所以就從《組合語言》這本書開始吧。
這系列可能並不詳細,主要用於自己做筆記和加深印象。
關鍵字:機器語言、組合語言、儲存器、指令、資料、儲存單元、cpu對儲存器的讀寫、位址匯流排、資料匯流排、控制匯流排、記憶體位址空間、主機板、介面卡、儲存器晶元、記憶體位址空間
-1、機器語言:
機器指令的集合,一列二進位制數字,可以由機器執行。
-2、組合語言:
彙編指令->編譯器->機器碼->計算機執行
分為:
彙編指令(核心):有機器碼的助記符,有對應的機器碼;
偽指令:沒有對應的機器碼,由編譯器執行,計算機並不執行;
其他符號:由編譯器識別,沒有對應的機器碼;
-3、儲存器:指令和資料存放的地方;
-4、指令和資料:在記憶體或磁碟上,都是二進位制的資訊;
-5、儲存單元:位元組;
-6、cpu對儲存器的讀寫:根據位址資訊,控制資訊,資料資訊來進行資料讀寫;
-7、位址匯流排:cpu通過位址匯流排指定儲存器單元,位址匯流排能傳送多少個不同資訊,cpu就可以對多少個儲存單元進行定址。
-8、資料匯流排:cpu與記憶體或其他器件之間的資料傳送媒介,資料匯流排的寬度決定了cpu和外界的資料傳送速度,多少位一次傳送n/8位元組。
-9、控制匯流排:cpu對外部器件的控制通過控制匯流排進行,是一些不同控制線的集合,有多少根控制匯流排,意味著cpu提供了對外部器件的多少種控制。控制匯流排的寬度決定了cpu對外部器件的控制能力。
-10、記憶體位址空間:位址匯流排最大的定址數量。
-11、主機板:通過匯流排連線計算機的各個器件和介面。
-12、介面卡:介面**過匯流排與cpu相連,cpu通過介面卡控制外部裝置。
-13、儲存器晶元:隨機儲存器(ram),唯讀儲存器(rom)。
-14、記憶體位址空間:所有的物理儲存器被看做乙個由若干儲存單元組成的邏輯儲存器,每個物理儲存器在這個邏輯儲存器中占有乙個位址段,cpu通過對這段位址空間的讀寫操作對應的物理儲存器。
cpu中進行資訊儲存的主要部件,我們通過改變各種暫存器中的內容來實現對cpu的控制。
有:ax、bx、cx、dx、si、di、sp、bp、ip、cs、ss、ds、es、psw暫存器
1、通用暫存器
通常用來存放一般性的資料:ax、bx、cx、dx。
這四個暫存器又可以分為:ah,al,bh,bl,,,分別代表高位和低位暫存器。
2、幾條彙編指令
彙編指令
操作內容
mov ax,18
將18送入暫存器ax
add ax,8
將暫存器ax中的數值加上8
mov ax,bx
將暫存器bx中的資料送入ax
add ax,bx
將ax和bx中的數值相加,結果存入ax
3、實體地址
cpu訪問記憶體時,要給出記憶體單元的位址。所有的記憶體單元構成的儲存空間是乙個一維線性空間,每乙個記憶體單元在這個空間中都有唯一的位址,這個唯一的位址成為實體地址。
4、16位結構cpu
運算器一次最多可以處理16位的資料;暫存器的最大寬度為16位;暫存器和運算器之間的通路為16位。
5、8086給出實體地址的方法
-1、cpu中的相關部件提供兩個16位的位址,乙個稱為段位址,乙個稱為偏移位址;
-2、通過內部匯流排送入乙個稱為位址加法器的部件;
-3、位址加法器將兩個16位位址合成為乙個20位的實體地址;
-4、位址加法器通過內部匯流排將20位實體地址送入輸入輸出控制電路;
-5、輸入輸出控制電路將20位實體地址送上位址匯流排;
-6、20位實體地址被位址匯流排傳送到儲存器。
6、實體地址=段位址*16+偏移位址
因為傳送位數限制,所以使用段位址+偏移位址的方式計算。
7、段的概念
因為使用段位址+偏移位址的方式給出實體地址,使得我們可以用分段的方式管理記憶體。
8、段暫存器
8086cpu有4個段暫存器:cs、ds、ss、es
9、cs和ip
cs是**段暫存器,ip為指令指標暫存器。
在8086pc機中,任意時刻,設cs中的內容為m,ip中的內容為n,8086cpu將從記憶體m*16+n單元開始,讀取一條指令並執行。
8086cpu的工作過程:
-1、從cs:ip指向的記憶體單元讀取指令,讀取的指令進入指令緩衝區;
-2、ip = ip + 所讀取指令的長度,從而指向下一條指令;
-3、執行指令;
-4、從1開始,重複這個過程。
在8086cpu加點啟動或復位後,cs被設定為ffff,ip為0000,所以在機器啟動時,cpu從記憶體fff0讀取指令並執行。
10、修改cs、ip的指令
11、**段
我們可以將長度為n的一組**,存在一組位址連續,起始位址為16的倍數的記憶體單元中,我們可以認為,這段記憶體是用來存放**的,從而定義了乙個**段。**段僅僅是我們自己的安排,使用cs:ip指向其中第一條指令的首位址來執行它。
《組合語言》學習(一)基礎知識
最近看了謝恩銘同學的部落格 學習彙編對程式設計有什麼幫助 感覺很有必要系統地學習一下組合語言,於是把書架上的 組合語言 第三版,王爽著 拿了出來,加入了最近的學習計畫中。本系列文章主要分享我在學習過程中的心得和知識點總結,以及課後習題的答案。除謝恩銘分享的答案外,我還在網上搜到如下答案文件 此外,也...
組合語言筆記 基礎知識
以下內容輸入筆記,並非總結 共有機器語言,高階語言,組合語言 把控制計算機的命令和各種資料直接用二進位制數碼表示的一種程式語言。優點 最直接的表示了計算機內部的基本操作。換言之,用機器語言編寫的程式在計算機中的執行效率是最高,執行速度最快,程式長度最短 缺點 用二進位制數表示的內容不便於記憶與閱讀 ...
組合語言 a 基礎知識
本專題是學習王爽的 組合語言 第三版 的學習筆記。這本書按照作者的意思是要教會讀者怎樣去循序漸進地學習組合語言。首先,什麼是組合語言呢?組合語言是人和計算機溝通的最直接方式,它描述了機器最終所要執行的指令序列。作為一門底層的語言,其可以直接與計算機進行互動。注意此書中如果沒有能夠完成檢測點的內容,則...