電腦系統概論

電腦是一種用來處理資訊的機器。我們可以用如圖一的輸入處理輸出的模型來描述電腦系統工作的方式。這個輸入處理輸出的模型是由電腦硬體、軟體和資料等三個元件所組成。電腦硬體是作為輸出入資料和處理資料的實體媒介。系統軟體和應用軟體則提供了電腦硬體執行指令的確實順序。資料是我們用來表達資訊的媒介,他們以用各種不同的格式存在,並可被電腦系統處理。電腦硬體和系統軟體組成了電腦系統的架構(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等。常見的輸出元件有螢幕、印表機、喇叭等。可同時做輸入輸出的元件有磁碟機、磁帶機等儲存媒介及網路卡等。

CPURAMI/O之間是由匯流排(Bus)連接起來。Bus係作為連接其上各硬體元件交換電子資料的路徑。

 

軟體元件

軟體元件是由許多的程式(Program)所組成。這些程式是用來指揮電腦硬體的運作,以達我們的工作。我們一般將軟體分為系統軟體和應用軟體兩大類。系統軟體幫我們管理檔案、分配電腦的各種資源、執行程式以及從鍵盤接收我們的命令。其中和管理電腦相關的一些程式我們稱為作業系統(Operating System),如Window NTUNIX都是一種作業系統。而應用軟體則幫助我們完成特定的工作,如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來表示1015的數字。其加法表和乘法表請自行畫出。二進位和十六進位間很容易轉換。如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)是兩種常用的英文文數字元編碼方式。EBCDIC8bits的編碼方式,目前僅限於IBM的大型主機和終端機使用。ASCII則是7bits的編碼,目前廣泛使用於各種電腦和終端機。近年來ISO(International Standards Organization)ASCII的基礎上為不同的語言訂定了不同的8bits編碼。不過8bits僅能表示256個字元,對象形字語言是不夠的。因此IOS提出了16bitsUnicode以取代舊有的7bits8bits字元。Unicode試圖將世界上的主要語言全部納入,在一個編碼空間下表達所有的語言文字。目前Java語言是採用Unicode作為其編碼的方式。Windows NT也有Unicode的版本。

常見的字元輸入裝置:鍵盤(keyboard)、光學辨識機(Optical Character Recognition, OCR)、條碼機(bar code reader)、語音輸入、中文手寫辨識、打孔機(punched card)

不管資料的格式為何,電腦內部都是以不同大小的二進位數字來代表。這些二進位數字的解釋方法是由兩個因素來決定:

  1. CPU所能處理的運算。
  2. 用來產生應用程式的程式語言所能提供的資料型態。

 

如何表示整數資料

 

無號二進位與二元編碼十進位數字(Binary-Coded Decimal, BCD)表示法

如何在電腦內表達32位元的資料?

  1. Big-ending表示法
  2. Little-ending表示法

 

BCD:以4bits來代表一個十進位數字

BCD的優缺點?一是浪費記憶體,因為4bits最多可表示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)補數

定義底數baseY進位數字系統所能表示的最大數字,則稱base-xx(Y-1)補數。以10進位系統為例,其三位數字4679補數 = 999 - 467 = 532,其四位數字04679補數 = 9999 - 0467 = 9532。仔細觀察的話,你可以發覺x的補數的補數=base - (base-x) = x。我們將底數base訂為該數字系統所能表示的最大數字,因此base+1會因為進位而變成零。我們可將x的補數視為-x,並以加法及補數運算來代替減法?定義Aè BA在補數系統內的表示法為B。假設我們有兩個正整數字x, y

  1. if y>=x, then x-y = x+(-y) è x+base-y = base-(y-x)ç x-y
  2. if y<=x, then x-y = x+(-y) è x+base-y = base+1+x-y-1 = x-y-1 ç x-y-1, 因此我們必須將結果再加一,才能得到正確的(Y-1)補數表示法
  3. (-x)+(-y) è base-x+base-y = base+1+base-(x+y)-1 = base-(x+y)-1 ç -(x+y)-1, 因此我們必須將結果再加一,才能得到正確的(Y-1)補數表示法。

綜合上述三點所述,我們可以歸納出(Y-1)補數在作運算時若有進位須將結果再加一。而當x,y為同號運算結果不同號時,則產生溢位(overflow)發生條件。Y-1補數的0有兩個表示法。

 

Y補數

(Y-1)補數的問題是有兩個0的表示法,因此運算完後要將-0轉成0,且做完運算後須注意是否有進位。定義Y進位數字系統的Y補數是將其(Y-1)補數加一。則在Y補數系統中:

  1. if y>=x, then x-y = x+(-y) è x+base-y+1 = base-(y-x)+1 ç x-y
  2. if y<=x, then x-y = x+(-y) è x+base-y+1 = x-y ç x-y,此即x-yY補數中的表示法。
  3. (-x)+(-y) è base-x+1+base-y+1=base+1+base-(x+y)+1=base-(x+y)+1 ç -(x+y)

Y補數的0只有一個表示法,且做玩運算後不需考慮進位,但求補數較麻煩(因為多了一個加一的運算)2補數是電腦內部最常見的數字表示法。

 

浮點數表示法

一個IEEE 32位元的浮點數以下面的格式來表示:

SEM

其中S1bit為正負號,E8bits為指數部份,M23bits為小數部份。其中指數部份採用excess-127表示法,即範圍為-127~128,但0255有特殊意義,所以實際範圍為-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 表示範圍?