20192422李俊潔 組合語言程式設計1~4章學習筆記
第一章 基礎知識
1.1組合語言的一般概念
計算機程式設計語言分為三類:
a.機器語言:以二進位制數碼表示
優點:執行速度快,程式長度最短。
缺點:不便於記憶和閱讀。
b.高階語言:類似自然語言的語句來編制程式
優點:程式設計簡單。
缺點:程式效率較機器語言低。
c.組合語言
(1)定義
使用字母和符號來表示機器語言的命令,用十進位制數或十六進位制
數來表示資料,這樣的計算機程式設計語言就稱為組合語言。
(2)組合語言程式與機器語言程式的關係
一條組合語言的語句與一條機器語言指令對應(一對一),組合語言程式與機器語言程式效率相同。
(3)不同型別計算機有不同的機器指令系統和組合語言描述
需要熟悉計算機的內部組成結構,但只需要掌握用匯編語言編制程式時所涉及到的那些硬體的結構和功能
1.2 學習和使用匯編語言的目的
1.學習和使用匯編語言可以從根本上認識、理解計算機的工作過程。
即更充分地利用機器硬體的全部功能,發揮機器的長處。
3. 組合語言程式的效率高於高階語言程式
“效率”的含義:
程式的目的碼長度
程式執行的速度
1.3 進位計數制及其相互轉換
一. 進位計數制
使用一定個數的數碼的組合來表示數字。
一些基本含義
位權:各個位置上所表示的基本數值稱為位權, 簡稱權。
基數:每個數位上能使用不同數碼的個數稱為基數。
二. 各種數制間的相互轉換
1. 十進位制整數轉換為二進位制數
(1)減權定位法
(2)除基取餘法
2.十進位制小數轉換為二進位制數
(1)減權定位法
(2)乘基取整法
3. 二進位制整數轉換為十進位制數
(1)按權相加法
(2)逐次乘基相加法
4. 二進位制小數轉換為十進位制數
(1)按權相加法
(2)逐次除基相加法
5. 二進位制與八進位制和十六進位制間的轉換
對應關係:
三位二進位制數對應一位八進位制數,四位二進位制數對應一位十六進位制數。
1.4 帶符號數的表示
在一般算術表示中使用“+”和“-”來表示正數與負數,而在計算機中使用“0”和“1”來表示正數和負數。用“+”或“-”表示正負的數叫真值
一、原碼錶示
二進位制數的最高位表示符號,0表示正,1表示負。數值部分用二進位制數絕對值表示。
二、補碼的表示
1.補碼的定義
帶符號數X的補碼錶示[X]補定義為:
[X]補=M+X (Mod M)
2.由真值、原碼變換為補碼
負數的真值變換為補碼的方法:將各位變反(0變1,1變0)然後在最低位加1.
負數的原碼變換為補碼:保持符號位不變,其餘各位變反,最低位加1
3.補碼數的表示範圍
當位數為8時:
最大補碼為01111111=[+127]補
最小補碼為10000000=[-128]補
4. 補碼的加減運算
規則:
[X+Y]補=[X]補+[Y]補
[X-Y]補=[X]補-[Y]補=[X]補+[-Y]補
注:[-Y]補是對[Y]補執行一次求補運算
1.5 字元的表示
在計算機內部目前最廣泛採用的是ASCII碼
標準ASCII碼為一位元組,其中用低七位表示字元編碼,用最高位表示奇偶數驗位。
1.6 基本邏輯運算
由於狀態“0”和“1”正好與邏輯運算中的邏輯“真”和“假”對應,因此可以用“0”和“1”來表示邏輯變數的取值
1. “與”運算(AND)
“與”運算是指:僅當邏輯變數A與B都是1時,運算結果F才為1。其它情況F為0,即:0 ∧ 0 =0,0 ∧ 1 = 0,1 ∧ 0 = 0,1 ∧ 1 =1
2. “或”運算(OR)
“或”運算是指當邏輯變數A與B中,至少有一個為1時,結果F為1,其他情況F為0。即:0 ∨0=0 ,0 ∨1=1 ,1 ∨0=1 ,1 ∨1=1
3.“非”運算
“非”運算是指對邏輯變數取相反的一個邏輯值,即:1 = 0 ,0 = 1
4. “異或”運算(XOR)
“異或”運算是指:當A和B相同時(同時為1或同時為0),運算結果F為0,而不同時,F為1。即:1 ⊕ 1=0 ,1 ⊕ 0=1 0, ⊕ 1=1 0⊕, 0=0
第二章 IBM-PC微機的功能結構
2.1 IBM-PC微機基本結構
一. 微機的一般構成
五大部件:運算器、控制器、儲存器、輸入裝置和輸出裝置。
1、中央處理器CPU
概念:將運算器和控制器兩大部件整合在一個積體電路晶片上,稱為中央處理器 ,簡稱CPU,也叫微處理器
功能:分析從主儲存器取來的各條指令的功能,控制計算機各部件完成指定功能的各項操作
2、主儲存器
概念:主儲存器是用來存放程式和資料的部件。它由若干個儲存單元構成。
儲存單元:儲存單元的多少表示儲存器的容量。每個儲存單元使用一個唯一的編號來標識,稱為儲存單元的地址。
訪問規則:對每個儲存單元內容的存和取是按照地址進行訪問的。
注:
習慣上將CPU與主儲存器合稱為主機。
在計算機中,除了主儲存器之外,一般還配置有輔助儲存器,簡稱輔存。由於它的位置是在主機之外,因此也叫做外存。
3、輸入輸出裝置及介面
輸入裝置:
將外部資訊(程式、資料和命令)送入計算機。包括鍵盤、滑鼠等。
輸出裝置:
將計算機處理後的結果轉換為人或其它系統能識別的資訊形式向外輸出。如顯示器、印表機等。
有的裝置既具有輸入功能又具有輸出功能:
磁碟、磁帶、觸控顯示屏等。
I/O介面:主機與I/O裝置之間設定的邏輯控制部件。通過它實現主機與I/O裝置間的資訊傳送。
4、系統匯流排
包括地址匯流排、資料匯流排和控制匯流排三組。它們分別用於傳送不同的資訊。
二、 Intel 8086/8088 CPU的功能結構
組合語言程式是由一系列的指令(指令序列)構成,指令是構成組合語言程式的最基本單位。
CPU執行指令序列就是重複執行以下兩個步驟:
從儲存器中取指令
執行指令規定的操作
1. 序列方式
缺點:採用序列工作方式的計算機其執行速度較慢
2.指令流水線方式
優點:採用指令流水線工作方式的計算機具有較高的工作效率。
(1)執行單元EU
分析與執行指令
(2)匯流排介面單元BIU
負責CPU與儲存器、I/O的資訊傳送
2.2 Intel 8086/8088CPU暫存器結構及其用途
一、通用暫存器
Intel 8086/8088有8個16位通用暫存器
1. 資料暫存器
它包括AX、BX、CX和DX四個暫存器,每一個既可以是16位暫存器,也可以分成兩個8位暫存器使用。
2. 指標暫存器
堆疊指標SP和基址指標BP,一般被用來存放16位地址,在形成20位的實體地址時常被作為偏移量使用。
SP指標:在進行堆疊操作時,被隱含使用,被用來指向
堆疊頂部單元.
BP指標:被用來指向堆疊段內某一儲存單元。
3. 變址暫存器
有兩個16位的變址暫存器SI和DI,一般被用來作地址指標.
SI:源變址暫存器
DI:目的變址暫存器
二、段暫存器
段基址:每個儲存段用一個段暫存器來指明該段的起始位置。
注:CPU在訪問儲存器時必須指明兩個內容
(1)所訪問的儲存單元屬於哪個段,即指明使用的段暫存器。
(2)該儲存單元與段起始地址(段基址)的相距多少,即偏移量。
三、指令指標IP
概念:當CPU從記憶體中取出一條指令後,IP內容自動修改為指向下一條指令。
四、標誌暫存器
概念:用來反映CPU在程式執行時的某些狀態,如是否有進位、奇偶性、結果的符號、結果是否為零等等。
注:8086/8088CPU中標誌暫存器的長度為16位,但只定義了其中的9位。
1. 進位標誌位CF
2. 奇偶標誌位PF
3. 輔助進位標誌位AF
4. 零值標誌位ZF
5. 符號標誌位SF
6. 溢位標誌位OF
7. 單步標誌位TF(Trace Flag)
8. 中斷允許標誌位IF
9. 方向標誌位DF
2.3 儲存器組織結構
1. 儲存器是由若干個儲存單元構成
2. 每個儲存單元存放相同長度的二進位制數。
3. 每個儲存單元有一個唯一的地址編號——地址
4. 任何兩個相鄰位元組單元就構成一個字單元.
5、在定義一個地址時必須指出是位元組或字型別屬性
二、儲存器的段結構
1.每個段最大長度為64K(65536)個位元組單元組成。
2. 每個段的基址(段基址)必須是一個小節的首址。(注:段基址為一個段的起始地址)
3. 邏輯段在物理儲存器中可以是鄰接的、間隔的、部分重疊的和完全重疊的等4種情況。
4. 在任一時刻,一個程式只能訪問4個當前段中的內容。
4個段分別是程式碼段、資料段、堆疊段和附加段,稱為當前段。
三、 邏輯地址與實體地址及對應關係
1. 實體地址
在1MB的儲存空間中,每個儲存單元的實體地址是唯一的,它就是該儲存單元的20位地址。
注:CPU與儲存器之間的任何資訊交換都使用實體地址。
2. 邏輯地址
一個邏輯地址包括兩個部分:段基值和偏移量
段基值:存放在某一個段暫存器中,是一個邏輯段的起始單元地址(段基址)的高16位。
偏移量:表示某個儲存單元與它所在段的段基址之間的位元組距離。
邏輯地址的表示方法:
段基值:偏移量
3.邏輯地址轉換為實體地址
轉換方法:將邏輯地址的段基值左移4位,形成20位的段基址(低位為0)然後與16位的偏移量相加,結果即為20位的實體地址。
4.邏輯地址的來源
(1)允許替代來源也叫做段超越,它表示了段基值除使用隱含的段暫存器外是否可以指定其它段暫存器來提供。
(2)有效地址EA,它表示根據指令所採用的定址方式(下一章介紹)計算出來的段內偏移量。
2.4 堆疊及其操作方法
堆疊的用途:主要用於暫存資料以及在過程呼叫或處理中斷時儲存斷點資訊
一、堆疊的構造
專用堆疊儲存器:按堆疊的工作方式專門設計的儲存器
軟體堆疊:由程式設計人員用軟體在記憶體中劃出的一塊儲存區作為堆疊來使用。
注:堆疊的一端是固定的,稱為棧底。棧底是堆疊儲存區的最大地址單元。另一端是浮動的,稱為棧頂。
指標sp:SP的內容始終指向棧頂單元,堆疊中資料進出都由SP來控制。
堆疊存取資料規則:“先進後出FILO”。
二、8086/8088堆疊的組織
頂由堆疊指標SP指示。SP中內容始終表示堆疊段基址與棧頂之間的距離(位元組數)。當SP內容為最大(初始)值時,表示堆疊為空。而當(SP)=0時,表示堆疊全滿.
當SP被初始化時,指向棧底+2單元,其值就是堆疊的長度。
三、堆疊操作
1.設定堆疊:主要是對堆疊段暫存器SS和堆疊指標SP賦值
2.進棧PUSH:是把資料存入堆疊。由指令PUSH或者由機器自動實現,可以將通用暫存器、段暫存器或字儲存單元的內容壓入堆疊頂部。
進棧的執行過程:
(1)首先將堆疊指標SP減2,即指向一個空的堆疊字單元 SP<=(SP)-2
(2)將要儲存的內容(暫存器或儲存單元的內容)送入SP指向的字單元中。(SP)<=資料
3.出棧POP:出棧操作由POP指令或機器自動實現,它從堆疊頂部彈出一個字到通用暫存器、段暫存器或字儲存單元
出棧的操作過程:
(1)將SP指向的字單元(即棧頂字單元)內容送往指定的暫存器或儲存器。即:暫存器/儲存器<=((SP))
(2)堆疊指標SP內容加2,即:SP<=(SP)+2
第三章 定址方式與指令系統
3.1 定址方式
一條指令通常由兩大部分構成:
操作碼:表示該指令應完成的具體操作,如加法、減法、乘法、移位等等。
運算元: 表示該指令的操作物件。如移位操作的被移位數,加法操作的加數等等。
定址方式:尋找指令中所需運算元的各種方法,也就是提供指令中運算元的存放資訊的方式。
(1)立即數運算元——運算元在指令程式碼中提供
(2)暫存器運算元——運算元在CPU的通用暫存器或段暫存器中
(3)儲存器運算元——運算元在記憶體的儲存單元中
(4)I/O埠運算元——運算元在輸入/輸出介面的暫存器中
1.立即數定址:立即數定址方式的指令中,所需運算元直接包含在指令程式碼中,這種運算元稱為立即數。
注:立即數只能作為源運算元,而不能作為目的運算元。
2.暫存器定址:暫存器定址方式是指指令中所需的運算元在CPU的某個暫存器中。暫存器可以是8位或16位通用暫存器,或者是段暫存器。
注:由於存取暫存器運算元完全在CPU內部進行,不需要匯流排週期,所以執行速度很快
一個儲存單元邏輯地址表示形式:
段基值:偏移量
段基值:由某個段暫存器提供.
偏移量:表示了該儲存單元與段起始地址之間的距離,也叫做有效地址EA。