第一章 計算機基礎知識
第1節 計算機中數制基本概念
1.1.1 機器語言
一、定義
- 就是用機器指令編寫的程序。
二、相關概念
-
機器指令:就是用二進制代碼組成的指令,一條機器指令控制計算機完成一個基本操作。
-
二進制代碼:由二進制數0和1組成的代碼。二進制代碼是計算機能夠直接識別的。
-
目標程序:用機器語言編寫的程序是計算機唯一能夠直接識別並執行的程序,而用其他語言編寫的程序必須經過翻譯才能變換成機器語言程序,所以,機器語言程序被稱爲目標程序。
三、特點
- 機器語言與機器硬件密切相關;
- 用機器語言設計程序非常困難;
- 用機器語言設計程序能得到時間和空間上的最優代碼。
1.1.2 彙編語言
一、定義彙編
- 是一種用符號書寫的、基本操作與機器指令相對應的、並遵循一定語法規則的計算機語言。
二、引入彙編語言的目的
- 爲了克服機器語言的缺點,人們採用助記符表示機器指令的操作碼,用變量代替操作數的存放地址等,這樣就形成了彙編語言。
三、彙編語言的有個概念
- 彙編源程序:用彙編語言所提供的指令(僞指令)編寫的程序。
- 彙編:彙編語言是一種符號語言,比機器語言容易理解和掌握,也容易調試和維護。但是,彙編語言源程序要翻譯成機器語言程序纔可以由計算機執行。這個翻譯的過程稱爲彙編。
- 彙編程序:這種把彙編源程序翻譯成目標程序的語言加工程序。
- 彙編指令:用便於記憶、並能描述指令功能的符號表示機器指令→彙編指令(符號指令)。
- 助記符:表示指令操作碼的符號,一般用英語單詞或縮寫。指令的操作數也用符號表示。
四、彙編語言的特點
- 彙編指令與機器指令一一對應,但相對機器語言易於理解、掌握,當我們用低級語言編寫程序時使用彙編語言而不用機器語言。
1.1.3 高級語言
一、定義
- 機器語言和彙編語言以外的程序設計語言統稱高級語言。
二、特點
- 更加接近自然語言和慣用的數學表達形式。
- 與計算機硬件結構無關。
- 便於使用,便於交流和推廣。
- 高級語言編程效率高,但運行效率低。
三、分類
- 高級語言可分成編譯型和解釋型高級語言,分別使用編譯程序和解釋程序將源程序翻譯成機器語言程序,然後交計算機執行。
1.1.4 彙編語言程序設計的意義
1.1.5 彙編語言的主要應用場合
第2節 常用進位計數制
1.2.1 有關概念
一、數制
- 定義:用一組數字與統一的規則來表示數的方法。
- 常見的幾種數制:
- 十進制—十進制的數符集中有10個符號:0,1,2,3,4,5,6, 7,8,9,符合人們的習慣。
- 二進制—0和1。二進制數是計算機內部採用的,並唯一能夠直接被計算機識別的數。便於物理實現,便於運算。
- 十六進制—16個符號:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F便於識別、書寫。引入十六進制數的目的是爲了描述二進制數。
- 八進制—8個符號:0,1,2,3,4,5,6,7。
二、基數和權
- 基數:指這個計數系統中採用多少個數字符號。
- 權:不同的數位所代表的數值。
- 說明:如果把用k進制書寫的一個整數從右往左依次記作第0位、第1位、…、第n位,則第i位上的數符所代表的含義是。在此,我們把k稱爲一個數制的基數,而把稱爲k進制數第i位的權。
三、計數規則
- 對於k進制數,簡單地說,就是“逢k進1,借1當k”。
1.2.2 各種進制數及它們的書寫方法
一、二進制數
- 二進制數是最簡單的進位計數制,它只有0、1二個數碼,計數方法是“逢二進一”。在書寫二進制時,爲了區別,在數據後面緊跟一個字母B。
- 例如:
二、十進制數
- 尾部加D(d),但通常可以省略。
- 例如:
三、十六進制數
-
十六進制數是由0 ~ 9和A、B、C、D、E、F(英語大寫字母分別代表10~15)這十六個數碼組成的,它的進位方式是“逢16進一”,十六進制在程序中的使用頻率很高。
-
強調:
- 數據若以記數符號A、B、C、D、E、F(不區分大小寫)打頭,在彙編源程序中頭部應加0;
- 書寫時,爲了區別,在數據後面緊跟字母H;
-
例如:$(2E)16= 2EH、 0A8F5H $
1.2.3 常用幾種進制數之間的關係
十進制 | 二進制 | 八進制 | 十六進制 |
---|---|---|---|
0 | 0000 | 0 | 0 |
1 | 0001 | 1 | 1 |
2 | 0010 | 2 | 2 |
3 | 0011 | 3 | 3 |
4 | 0100 | 4 | 4 |
5 | 0101 | 5 | 5 |
6 | 0110 | 6 | 6 |
7 | 0111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
1.2.4 數制間轉換
一、十進制數和二進制數間的相互轉換
-
十進制轉換成二進制
- 整數部分:
- 將整數部分不斷除以2,記下每次得到的餘數,直到商爲零(除2取餘);
- 餘數倒排,即最後得到的餘數排在最高位,第一個餘數排在最低位。
- 小數部分:
- 乘2取整,順序排列得到的整數。
- 整數部分:
-
二進制轉換成十進制
- 各位二進制數碼乘以與其對應的權之和即爲該二進制數相對應的十進制數。
-
十進制數和十六進制數間的相互轉換
- 十進制數轉換成十六進制數,方法同十進制數轉換成二進制數,只不過“除2取餘”變爲“除16取餘”,“乘2取整” 變爲“乘16取整”。
-
二進制數和十六進制數間的相互轉換
- 因爲24=16,所以二進制數轉換成十六進制數只需將二進制數從小數點開始每4位轉成一位十六進制數(整數由右向左,小數相反)。
第3節 計算機中數和字符的表示
1.3.1 編碼
一、編碼的目的:
- 除了數值數據外,計算機還可處理人們常用的符號,如字母、標點符號、漢字等。例如從鍵盤輸入的信息或打印輸出的信息都是字符方式輸入輸出的。因此,計算機必須能表示字符。字符在機器裏必須用二進制數來表示。將字母、符號等字符也只能採用二進制代碼(0、1)的排列組合表示(編碼)。(PC機常用的有兩種編碼:ASCII碼和BCD碼)
二、BCD編碼(主要介紹8421碼)
-
引入BCD編碼的目的:
雖然二進制數實現容易,但書寫閱讀不方便,不符合人們的使用習慣,所以在計算機輸入、輸出時通常還是採用十進制來表示數,這就需要實現十進制與二進制間的轉換。
-
定義:
採用二進制編碼來表示十進制數,這種編碼方式稱爲二—十進制編碼,簡稱爲BCD。
-
表示方法:
BCD碼規定用4位二進制數表示1位十進制數。對多位十進制數,只要把每一位十進制數分別表示爲四位二進制數即可。
-
壓縮BCD碼與非壓縮BCD碼
-
壓縮BCD碼是用四位二進制數表示一位BCD碼,用一個字節表示的兩位BCD碼,即一個字節存放兩個十進制數位,想到壓縮BCD碼更節省存儲空間。
-
非壓縮型BCD碼一個字節可存放一個一位十進制數,其中高4位的內容不做規定(也有部分書籍要求爲0,二者均可),低4位二進制表示該位十進制數。
-
-
BCD碼對應表
十進制 BCD碼 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 -
其他BCD碼
BCD碼有很多種,常見的有8421碼,2421碼,5421碼,餘3碼,格雷碼等。
三、ASCII碼
-
ASCII碼背景:
- 解決字母、符號在計算機內部如何表示,PC機採用目前最常用的美國信息交換標準代碼ASCII碼。
-
ASCII碼的組成:
- 標準ASCII碼用8位二進制數編碼,共有128個。(解釋:第8位恆爲0,因此有 種)
- 分類:
- 控制字符(不可顯示字符):前32個和最後一個,即0 ~ 31和127(共33個)。
- 打印字符(可顯示字符):32 ~ 126(共95個)是字符(32爲空格)。
- 48 ~ 57爲0到9的十個阿拉伯數字。
- 65~90爲26個大寫英文字母。
- 97~122號爲26個小寫英文字母。
- 其餘爲一些標點符號、運算符號等。
-
書寫:
一般用兩位十六進制數書寫。 -
ASCII碼錶
1.3.2 有符號數和無符號數的表示
一、 機器字長
- 指參與運算的數的基本位數,標誌着計算精度,一般是字節的整數倍(字節:8位、字:16位、雙字:32位等)
二、小數- 定點表示法
- 浮點表示法
三、機器數與真值
- 機器數:指把一個數連同其符號在內數值化表示的數。
- 真值:最高位爲符號位( 0表示正數, 1表示負數),數值部分稱爲機器數的真值。
四、有符號數和無符號數
-
無符號數最高位表示數值,在計算機中最常用的無符號數是表示地址的數。
-
有符號數最高位表示符號。有符號數有不同的編碼方式,常用的是補碼。
1.3.3 原碼、反碼和補碼
一、原碼:
- 正數原碼:符號位爲0,數值位照抄。
- 負數原碼:符號位爲1,數值位照抄。
二、反碼
- 正數的反碼與其原碼相同;
- 負數的反碼是對正數逐位取反,符號位保持爲1
三、補碼
- 正數補碼:符號位爲0,數值位照抄。
- 負數補碼:符號位爲1,數值位各位取反後末尾加1。
四、原碼與補碼的總結
- 正數的原碼、補碼相同。
- 負數的原碼、補碼不相同,但符號位都是1。
- 字長爲8位,原碼的表示數範圍爲-127 ~ +127,補碼的表數範圍爲-128 ~ +127。
五、注意:
- 在原碼中有-0和+0,他們的補碼都是00000000,但是在補碼中,0只有只有一種表示,那就是+0。
- 補碼10000000唯一的表示-128是一個規定,不需要推算,理由如下:
- 在原碼中10000000表示-0,但是在補碼中沒有-0,所以爲了不讓它空缺,規定-128表示。
五、求補運算
- 定義:對一個二進制數,按各位求反後在末位加1的運算。
- 特性:
六、補碼的加法和減法
- 補碼的加法規則
- 補碼的減法規則
- 由於用補碼錶示數,使計算機中的加減運算十分簡便,它不必判斷數的正負,只要符號位參加運算,便能自動地得到正確的結果。因此,CPU當中只有加法器。
1.3.4 符號擴展
一、擴展
- 是指一個數從位數較少擴展到位數較多,如有時需要把8位二進制數擴展成16位二進制數,或從16位二進制數擴展成32位二進制數,或從16位二進制數擴展成64位二進制數。
二、符號擴展
- 將原符號位填入擴展的每一位,以保持其作爲有符號數的值不變。
- 注意:
- 要擴展的數是補碼形式的有符號數, 符號擴展後,其結果仍是該數的補碼。
- 對於補碼錶示的數,其正數的符號擴展是將其符號位0向左擴展(補“0”)。
- 其負數的符號擴展是將其符號位1向左擴展(補“1”)。
第4節 算術運算和邏輯運算
1.4.1 算術運算
一、二進制運算
- 與十進制運算相同,只不過是逢2進1,借1當2。
加法 減法 乘法
0+0=0 0‐0=0 0×0=0
0+1=1 0‐1=1 0×1=0
1+0=1 1‐0=1 1×0=0
1+1=10 1‐1=0 1×1=1
二、其他進制運算
- 如十六進制算術運算:與十進制運算相同。
1.4.2 邏輯運算
一、與運算(AND;∧):
二、或運算(OR;∨):
三、非運算(NOT;~ 或 — ):
四、異或運算(XOR;⊕)
$ 1⊕0=1$ $ 1⊕1=0$ $ 0⊕0=0$ $ 0⊕1=1$
二、其他進制運算
- 如十六進制算術運算:與十進制運算相同。
1.4.2 邏輯運算
一、與運算(AND;∧):
二、或運算(OR;∨):
三、非運算(NOT;~ 或 — ):
四、異或運算(XOR;⊕)
$ 1⊕0=1$ $ 1⊕1=0$ $ 0⊕0=0$ $ 0⊕1=1$
注意:邏輯運算是按位運算。