電腦系統概論
電腦是一種用來處理資訊的機器。我們可以用如圖一的
”輸入—處理—輸出”的模型來描述電腦系統工作的方式。這個”輸入—處理—輸出”的模型是由電腦硬體、軟體和資料等三個元件所組成。電腦硬體是作為輸出入資料和處理資料的實體媒介。系統軟體和應用軟體則提供了電腦硬體執行指令的確實順序。資料是我們用來表達資訊的媒介,他們以用各種不同的格式存在,並可被電腦系統處理。電腦硬體和系統軟體組成了電腦系統的架構(Computer System Architecture),以提供使用者在其上執行應用程式和處理資料。圖一
電腦系統處理程序
圖二
電腦系統架構
硬體元件
一個簡化的典型的電腦系統架構可由圖二來表示。電腦的運算是由中央處理單元
(Central Processing Unit, CPU)來執行。他包含了控制單元(Control Unit, CU)和算術邏輯單元(Arithmetic and Logic Unit, ALU)兩大部份。控制單元用來解釋電腦指令,搬移CPU內部資料,以指揮協調CPU各部份的運作。ALU是電腦指令主要的執行部份,他又可細分成加法器、乘法器、及多個暫存器(Register)等部份。暫存器是CPU內部用來儲存資料的地方。記憶體是用來儲存程式和資料的地方。一般又稱為
RAM(Random Access Memory)。我們可將記憶體視為由一個個小格子所組成的陣列,每個格子內都儲存著一個二進位數字以代表程式指令或資料。我們給每一個格子一個特有的編號,稱為地址(Address),就像我們的門牌號碼一樣,可供CPU定址某一塊記憶體。輸入
/輸出(Input / Output, I/O)裝置是我們最常見的硬體元件。常見的輸入元件有鍵盤、滑鼠、搖桿、CDROM等。常見的輸出元件有螢幕、印表機、喇叭等。可同時做輸入輸出的元件有磁碟機、磁帶機等儲存媒介及網路卡等。CPU、RAM和I/O之間是由匯流排(Bus)連接起來。Bus係作為連接其上各硬體元件交換電子資料的路徑。
軟體元件
軟體元件是由許多的程式
(Program)所組成。這些程式是用來指揮電腦硬體的運作,以達我們的工作。我們一般將軟體分為系統軟體和應用軟體兩大類。系統軟體幫我們管理檔案、分配電腦的各種資源、執行程式以及從鍵盤接收我們的命令。其中和管理電腦相關的一些程式我們稱為作業系統(Operating System),如Window NT和UNIX都是一種作業系統。而應用軟體則幫助我們完成特定的工作,如Word可用來編輯文書,Excel可用來作分析計算等。作業系統是電腦系統不可或缺的一部份,當電腦啟動時,首先會執行儲存在唯讀是記憶體(Read Only Memory, ROM)內的程式,此程式會從本地磁碟機或透過網路從伺服器的磁碟機上將作業系統載入記憶體(Random Access Memory, RAM)內執行,然後我們就可以透過輸入裝置下達命令,以執行應用程式來處理我們的資料。
數字系統
數字表示法
在十進位系統中
43 = 4*10 + 3, 527 = 5*102 + 2*10 + 7。目前的電腦大多使用二進位系統,我們稱一個二進位數字為一個位元(Bit)。下圖是二進位系統的計數方式:
二進位 |
等於 |
十進位 |
0 |
0*20 |
0 |
1 |
1*20 |
1 |
10 |
1*21 + 0*20 |
2 |
11 |
1*21 + 1*20 |
3 |
100 |
1*22 + 0*21 + 0*20 |
4 |
101 |
1*22 + 0*21 + 1*20 |
5 |
110 |
1*22 + 1*21 + 0*20 |
6 |
111 |
1*22 + 1*21 + 1*20 |
7 |
1000 |
1*23 + 0*22 + 0*21 + 0*20 |
8 |
1001 |
1*23 + 0*22 + 0*21 + 1*20 |
9 |
1010 |
1*23 + 0*22 + 1*21 + 0*20 |
10 |
一般而言,以
B為底的K個數字所能表達的範圍為R = BK。以二進位為例,不同的位元數所能表達的數字如下表:
位元數 |
表達範圍 |
1 |
2 |
4 |
16 |
8 |
256 |
10 |
1,024 |
16 |
65,536 |
20 |
1,048,576 |
32 |
4,294,967,296 |
64 |
約等於 1.6*1019 |
128 |
約等於 2.6*1038 |
不同數字系統的數值運算
十進位加法表
+ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
2 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
3 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
4 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
二進位加法表
+ |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
10 |
八進位加法表
+ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
2 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
3 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
4 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
5 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
6 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
7 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
乘法表類推
不同數字系統間的轉換
十進位與其他數字系統的轉換
137548= ????10
(84) |
(83) |
(82) |
(81) |
(80) |
|
4096 |
512 |
64 |
8 |
1 |
|
X |
1 |
3 |
7 |
5 |
4 |
4096 + 1536 + 448 + 40 + 4 = |
|||||
612410 |
612410 = ??????5
5 ) 6124 ( 4
5 ) 1224 ( 4
5 ) 244 ( 4
5 ) 48 ( 3
5 ) 9 ( 4
5 ) 1 ( 1
0
因此
612410 = 1434445
其他數字系統間的轉換:先轉成十進位在轉成另一個數字系統。
十六進位數字與運算
在電腦系統中我們通常以八個
Bit為一個單位稱為位元組(Byte)。因為24 = 16,我們通常以兩個十六進位數字來表示一個位元組,因此十六進位系統是除了二進位系統外另一個常用的數字系統。在十六進位系統中我們以ABCDEF來表示10到15的數字。其加法表和乘法表請自行畫出。二進位和十六進位間很容易轉換。如11010111011000這個二進位數字我們可以把他分為0011 0101 1101 1000四組,以十六進位來表示則成為35D816。若要轉成8進位,則分為三個一組011 010 111 011 000 = 327308。
小數點的處理
試問
0.122013 = 0.???10==> 0.122013 = 1/3 + 2/9 + 2/27 + 0/81 + 1/243 = 0.33333+0.22222+0.07407 + 0.00412 = 0.6337410
或
(81+2*27+2*9+1)/243 = 0.63374
試問
0.82812510 = 0.???2
0.828125 * 2 |
==>1.656250 * 2 (-1後乘2) |
==>1.3125 * 2 (-1 後乘2) |
==>0.625 * 2 |
==>1.25 * 2 (-1 後乘2) |
==>0.5 *2 |
==>1 |
所以
0.82812510 = 0.1101012
資料格式
人類可讀的格式
”abcd345” --> 輸入裝置 --> 11010001000100100...(於電腦內部)程式可以用任意的格式來儲存和處理資料,這樣的格式我們稱為專屬格式。但為了便於在不同的硬體和軟體平台間交換資料,我們必須用標準的格式來表示資料。標準格式通常是由國際標準組織訂定,或因某類軟體廣為流行而後成為標準。常見的資料型態和標準如下表:
資料型態 |
標準 |
字元 (character) |
ASCII, EBCDIC, Unicode |
影像 (位元應對bit map) |
GIF, JPEG, TIFF, Windows Butmap |
影像 (物件) |
PICT, PostScript |
向量圖形與字型 |
PostScript, TrueType |
聲音 |
Sound Blaster, WAV |
視訊 |
MPEG, QuickTime |
ANSI(American National Standards Institute)所制訂的ASCII(American Standard Code for Information Interchange)及IBM所定義的EBCDIC(Extended Binary Coded Decimal Interchange Code)是兩種常用的英文文數字元編碼方式。EBCDIC是8bits的編碼方式,目前僅限於IBM的大型主機和終端機使用。ASCII則是7bits的編碼,目前廣泛使用於各種電腦和終端機。近年來ISO(International Standards Organization)在ASCII的基礎上為不同的語言訂定了不同的8bits編碼。不過8bits僅能表示256個字元,對象形字語言是不夠的。因此IOS提出了16bits的Unicode以取代舊有的7bits和8bits字元。Unicode試圖將世界上的主要語言全部納入,在一個編碼空間下表達所有的語言文字。目前Java語言是採用Unicode作為其編碼的方式。Windows NT也有Unicode的版本。
常見的字元輸入裝置:鍵盤(keyboard)、光學辨識機(Optical Character Recognition, OCR)、條碼機(bar code reader)、語音輸入、中文手寫辨識、打孔機(punched card)。
不管資料的格式為何,電腦內部都是以不同大小的二進位數字來代表。這些二進位數字的解釋方法是由兩個因素來決定:
如何表示整數資料
無號二進位與二元編碼十進位數字
(Binary-Coded Decimal, BCD)表示法如何在電腦內表達
32位元的資料?
BCD:以4個bits來代表一個十進位數字
BCD的優缺點?一是浪費記憶體,因為4個bits最多可表示16個數字,但我們只用了10個數字而已。其二是不好用二進位的方式來運算,必須以模擬十進位的方式在電腦內運算,造成邏輯線路複雜,速度緩慢。優點是位數無限制,容易轉成字元型態。
BCD表示法的範圍?
有號整數
BCD:
符號與大小表示法:第一個bit作為正負號,其他的bits為大小。缺點?不好運算,因為加法的運算方法和運算元的正負號有關。當兩個運算子同號時,只要將數字大小的部份相加,正負號與運算元相同即可,但當兩個運算子的符號不同時,則要以減法來處理大小的部份,正負號則視相減的結果而定。這種表示法也會造成電腦邏輯線路設計上的困擾。
有沒有一種表示法可以讓加減法有相同的運算方法,而且讓邏輯線路設計簡單,跑起來又快的?有的,那就是補數系統。
9補數:
500 …999 | 0…499
-499…-000 | 0…499
10:補數
500 …999 | 0…499
-500…-001 | 0…499
9補數加法:
420-170
=>420+829
=1249 => 249 + 1
100 - 350
=> 100 + 649
= 749
-100-200
=>899+799
=1698 => 698 + 1
(Y-1)
補數定義底數
base為Y進位數字系統所能表示的最大數字,則稱base-x為x的(Y-1)補數。以10進位系統為例,其三位數字467的9補數 = 999 - 467 = 532,其四位數字0467的9補數 = 9999 - 0467 = 9532。仔細觀察的話,你可以發覺x的補數的補數=base - (base-x) = x。我們將底數base訂為該數字系統所能表示的最大數字,因此base+1會因為進位而變成零。我們可將x的補數視為-x,並以加法及補數運算來代替減法?定義Aè B表A在補數系統內的表示法為B。假設我們有兩個正整數字x, y則綜合上述三點所述,我們可以歸納出(Y-1)補數在作運算時若有進位須將結果再加一。而當x,y為同號運算結果不同號時,則產生溢位(overflow)發生條件。Y-1補數的0有兩個表示法。
Y
補數(Y-1)補數的問題是有兩個0的表示法,因此運算完後要將-0轉成0,且做完運算後須注意是否有進位。定義Y進位數字系統的Y補數是將其(Y-1)補數加一。則在Y補數系統中:
Y補數的0只有一個表示法,且做玩運算後不需考慮進位,但求補數較麻煩(因為多了一個加一的運算)。2補數是電腦內部最常見的數字表示法。
浮點數表示法
一個
IEEE 32位元的浮點數以下面的格式來表示:SEM
其中
S1bit為正負號,E8bits為指數部份,M23bits為小數部份。其中指數部份採用excess-127表示法,即範圍為-127~128,但0和255有特殊意義,所以實際範圍為-126 ~ +127
指數部份 |
小數部份 |
所代表的值 |
0 |
+-0 |
0 |
0 |
非 0 |
+-2-126*0.M |
1 ~ 254 |
任何值 |
+-2E-127*1.M |
255 |
+-0 |
+-ì |
255 |
非 0 |
特殊狀況 |
IEEE 64位元浮點數表示法
SEM
其中
S1bit為正負號,E11bits為指數部份,M52bits為小數部份。其中指數部份採用excess-127 表示範圍?