
彙編 - 簡介
什麼是組合語言?
每臺個人電腦都有一顆微處理器,它管理著計算機的算術、邏輯和控制活動。
每個處理器系列都有自己的一套指令,用於處理各種操作,例如從鍵盤獲取輸入、在螢幕上顯示資訊以及執行各種其他工作。這些指令集被稱為“機器語言指令”。
處理器僅理解機器語言指令,機器語言指令是一串 1 和 0。但是,機器語言對於軟體開發來說過於晦澀和複雜。因此,針對特定處理器系列設計了低階的組合語言,它以符號程式碼和更易理解的形式表示各種指令。
組合語言的優點
瞭解組合語言可以讓一個人瞭解 -
- 程式如何與作業系統、處理器和 BIOS 互動;
- 資料如何在記憶體和其他外部裝置中表示;
- 處理器如何訪問和執行指令;
- 指令如何訪問和處理資料;
- 程式如何訪問外部裝置。
使用匯編語言的其他優點包括 -
它需要更少的記憶體和執行時間;
它允許以更簡單的方式執行硬體特定的複雜工作;
它適用於時間關鍵型任務;
它最適合編寫中斷服務程式和其他記憶體駐留程式。
PC 硬體的基本特徵
PC 的主要內部硬體包括處理器、記憶體和暫存器。暫存器是處理器元件,用於儲存資料和地址。要執行程式,系統會將其從外部裝置複製到內部記憶體。處理器執行程式指令。
計算機儲存的基本單位是位元;它可以是開 (1) 或關 (0),並且在大多數現代計算機上,8 個相關的位元構成一個位元組。
因此,奇偶校驗位用於使位元組中的位元數為奇數。如果奇偶校驗為偶數,則系統假定發生了奇偶校驗錯誤(儘管很少見),這可能是由於硬體故障或電氣干擾引起的。
處理器支援以下資料大小 -
- 字:2 位元組資料項
- 雙字:4 位元組(32 位)資料項
- 四字:8 位元組(64 位)資料項
- 段:16 位元組(128 位)區域
- 千位元組:1024 位元組
- 兆位元組:1,048,576 位元組
二進位制數系統
每個數制都使用位置表示法,即寫入數字的每個位置都有不同的位置值。每個位置都是基數的冪,對於二進位制數系統,基數為 2,這些冪從 0 開始,每次增加 1。
下表顯示了 8 位二進位制數的位置值,其中所有位都設定為 ON。
位值 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
以 2 為底的位置值 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
位號 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
二進位制數的值基於 1 位的存在及其位置值。因此,給定二進位制數的值為 -
1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255
這與 28 - 1 相同。
十六進位制數系統
十六進位制數系統使用基數 16。此係統中的數字範圍為 0 到 15。按照慣例,字母 A 到 F 用於表示對應於十進位制值 10 到 15 的十六進位制數字。
計算中的十六進位制數用於縮寫冗長的二進位制表示。基本上,十六進位制數系統透過將每個位元組分成兩半並表達每半位元組的值來表示二進位制資料。下表提供了十進位制、二進位制和十六進位制等效項 -
十進位制數 | 二進位制表示 | 十六進位制表示 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
要將二進位制數轉換為其十六進位制等效項,請將其分成 4 個連續組,從右開始,並將這些組寫在十六進位制數的相應數字上。
示例 - 二進位制數 1000 1100 1101 0001 等於十六進位制 - 8CD1
要將十六進位制數轉換為二進位制數,只需將每個十六進位制數字寫入其 4 位二進位制等效項即可。
示例 - 十六進位制數 FAD8 等於二進位制 - 1111 1010 1101 1000
二進位制算術
下表說明了二進位制加法的四個簡單規則 -
(i) | (ii) | (iii) | (iv) |
---|---|---|---|
1 | |||
0 | 1 | 1 | 1 |
+0 | +0 | +1 | +1 |
=0 | =1 | =10 | =11 |
規則 (iii) 和 (iv) 顯示將 1 位進位到下一個左側位置。
示例
十進位制 | 二進位制 |
---|---|
60 | 00111100 |
+42 | 00101010 |
102 | 01100110 |
負二進位制值以二進位制補碼錶示法表示。根據此規則,要將二進位制數轉換為其負值,需要反轉其位值並加 1。
示例
數字 53 | 00110101 |
反轉位 | 11001010 |
加 1 | 00000001 |
數字 -53 | 11001011 |
要從另一個值中減去一個值,將被減數轉換為二進位制補碼格式並相加。
示例
從 53 中減去 42
數字 53 | 00110101 |
數字 42 | 00101010 |
反轉 42 的位 | 11010101 |
加 1 | 00000001 |
數字 -42 | 11010110 |
53 - 42 = 11 | 00001011 |
最後一個 1 位的溢位丟失。
記憶體中資料的定址
處理器控制指令執行的過程稱為取指令-譯碼-執行週期或執行週期。它包括三個連續的步驟 -
- 從記憶體中取指令
- 解碼或識別指令
- 執行指令
處理器可以一次訪問一個或多個記憶體位元組。讓我們考慮一個十六進位制數 0725H。此數字需要兩個記憶體位元組。高位位元組或最高有效位元組為 07,低位位元組為 25。
處理器以反位元組順序儲存資料,即低位位元組儲存在低記憶體地址中,高位位元組儲存在高記憶體地址中。因此,如果處理器將值 0725H 從暫存器帶到記憶體,它將首先將 25 傳輸到較低的記憶體地址,並將 07 傳輸到下一個記憶體地址。

x:記憶體地址
當處理器從記憶體獲取數值資料到暫存器時,它會再次反轉位元組。記憶體地址有兩種 -
絕對地址 - 對特定位置的直接引用。
段地址(或偏移量) - 記憶體段的起始地址及其偏移量值。