淺談電腦和「大蟒蛇」 ~~ 003
2012/02/12 23:51
瀏覽139
迴響0
推薦2
引用0
淺談電腦和「大蟒蛇」 ~~ 003
~~ 數字系統和電腦指令
我們知道電腦只能了解二進位數字系統(Binary Number System)。什麼是二進
位系統呢?為什麼電腦要使用這個系統呢?除了二進位數字系統之外﹐我們平日使
用的是十進位系統﹐除此之外﹐是否還有其他數字系統呢?讓我們在此一一道來。
所謂的二進位的數字系統﹐就是每一個單位(digit)只有兩種可能﹐不是零(0)
就是一(1)。電腦的設計是只能了解這種二進位的數字系統。為什麼不將電腦設計
成可以接受十進位的數字系統呢?理由很簡單﹐因為使用二進位的數字系統﹐使電
腦硬體的設計要比使用其他數字系統(例如十進位的數字系統)簡單易行得太多了。
想想看﹐二進位的數系統﹐每一個單位只有兩種可能﹐這就很容易使用不同的媒介
來代表和區分。例如電流通過或是沒有通過﹐亮燈或是熄燈﹐一張卡片的上面打了
孔或是沒有打孔﹐都可以用來代表零與一。倘若要用電流的通過與否﹐燈熄了或是
亮了﹐卡片上有孔或是沒孔﹐來代表十進位的數字系統﹐因為每一個數字﹐就有由
零至九等十種可能﹐要設計電腦硬體來代表這十種不同的情況(states)﹐就會變
得非常複雜﹐極為困難。為了讓硬體的設計較為簡單易行﹐執行的速度快﹐還有其
他考量﹐電腦採用了二進位的數字系統。
〈一〉Bit﹐Byte 和 Word
在二進位的數字系統中﹐一個單位就叫做 bit。這個字是源自 Binary Digit。由八
個 bits 組成一個單元﹐就叫做一個 byte。如果由四個 bytes 組成一個單元(共
有 32 bits)﹐就叫一個 word。
〈二〉資料與指令
如上所述﹐一個 bit 只有兩種可能﹐不是零就是一﹐換句話說﹐我們可以用一個
bit 來代表兩件不同的事物。例如﹐用零來代表拒絕﹐一來代表答應﹐那麼﹐只要
您和朋友雙方有這個共識的話﹐倘若您問朋友今晚一起去看電影好不好?您的朋友
對您豎起一根食指﹐您就知道他答應了﹐雖說旁人見了﹐不見得了解那是什麼意思。
問題是﹐用一個 bit 只能代表兩件事﹐真是太局限了﹐如果用兩個單位(2 bits)
當作一組的話﹐就能有下列四種不同的組合:00﹐01﹐10﹐11。換句話說﹐就可
以用兩個 bits 來代表四種不同的事物﹐這在我們的日常生活中﹐還是遠遠不夠的。
想想平日要與人用文字溝通的話﹐英文有二十六個字母﹐若包括大寫和小寫﹐就有
五十二個不同的符號(symbols)﹐再加上代表零至九的﹐我們日常習慣使用的十
進位數字﹐還有標點符號等等﹐就需要一個組合能夠代表所有這些符號才行﹐於是
就有了由八個 bits 作為一個單元的 byte 了。因為八個 bits 可以有兩百五十六個
不同的組合﹐要用來代表英文字母和數字及標點符號等等﹐是綽綽有餘了。
雖說一個 byte 可以代表兩百五十六個不同的組合﹐也就是代表兩百五十六個不同
的符號﹐但也必須所有使用者都同意用什麼組合來代表那個符號(例如要用什麼組
合來代表英文字母的 A)﹐大家才有相互溝通的可能。這大家同意使用的組合就叫
做符號組(Character Set)。在電腦世界所存在的許多符號組之中﹐有兩種是大
家所最熟悉的﹐其中一個專門使用在小電腦上(桌上型、筆記簿型等等)﹐就叫做
ASCII (American Standard Code for Information Interchange)﹐另一種
則是使用在 IBM 的大型電腦上﹐就叫做 EBCDIC (Extended Binary Coded
Decimal Interchange Code)。例如說﹐在 ASCII 符號組裡﹐英文字母的 A 是
由 01000001 這個 byte 來代表的﹐可是如果您用 EBCDIC 來代表 A 卻是使用
11000001 這個 byte。因為所有小型電腦所使用的都是 ASCII 的碼﹐所以小型
電腦間的溝通並不成問題﹐不過因為小型電腦和大型電腦所使用的符號組並不一樣﹐
就像是使用不同的語言﹐成了雞同鴨講的情形﹐無法直接的溝通﹐除非經由適當的
轉換。
上面所說的 ASCII 和 EBCDIC 都是以英文為中心﹐但是隨著電腦科技的進步和硬
體的便宜化﹐於是就有一種想法﹐那就是「為何不能有符號組不但可以代表英文字
母﹐而且可以代表其他的語言﹐例如中文?」這種考量的結果﹐就產生了所謂的
Unicode 這個符號組。因為它是使用兩個 bytes (也就是十六個 bits 而不是僅
有八個 bits)﹐所以它可以有六萬五千多個不同的組合﹐足以代表除了英文字母之
外的﹐世上其他主要語言的文字符號﹐包括中文和日文。比較新的電腦語言(例如
Java)﹐使用的就是 Unicode﹐不過它只是另一種碼﹐我就不再多討論 Unicode
的使用。
現在我們知道﹐小型電腦是使用 ASCII 來代表字母、數字和標點符號等等﹐那麼﹐
電腦指令又是怎麼一回事呢?一般而言﹐一個指令可以分成兩部份﹐第一個部份是
叫電腦採取什麼行動(例如讀取資料)﹐這個部份就叫做 Operation Code 或簡稱
為 Op Code。這個部份的大小通常是一個 byte (也就是八個 bits)﹐換句話說﹐
總共可以有兩百五十六個不同的指令。第二個部份則是儲存資料或指向資料所在的
地方(例如若要讀取資料﹐電腦必須知道那資料到底是存在何處)﹐這個部份就叫
做 Operands﹐它的大小通常是三個 bytes (不過可能更小或更大﹐因指令而不同)。
通常是一個 byte 的 Op Code 加上三個 bytes 的 Operands﹐合起來成為一個指令。
四個 bytes 在一起﹐一般被稱為一個 Word。
在上篇文章裡﹐使用機器語言的指令例子中﹐只用兩個 bytes (也就是十六個 bits)。
我在這兒重複如下:
0001101000110010
上面指令的最左邊的一個 byte (也就是 00011010)便是要相加的 Op Code﹐右
邊的一個 byte (也就是 00110010)便是所謂的 Operands﹐告訴電腦何處抽取數
字用來相加。
【註】
在英文裡﹐Data 和 Information 是有所區分的。Data 指的是原始數據(例如 1000
和 0.1)。將原始數據作適當的運算或操作﹐使其成為有用的資料(Information)﹐
例如說﹐上面的兩個數字中﹐第一個是本金﹐第二個是利率﹐兩個數字相乘﹐我們
得到利息一百元的資料。我不知道在中文是以什麼用語來區分這兩個英文字。
〈三〉八進位和十六進位的數字系統
除了二進位和十進位的數字系統之外﹐在電腦領域還常用八進位和十六進位系統。
使用這兩種數字系統主要只是讓二進位的數字比較容易閱讀而已。它們之間都是可
以很容易的互相轉換的。
所謂的八進位數字系統﹐就是一個 digit 可以有 0﹐1﹐2﹐3﹐4﹐5﹐6﹐7 這八個
可能﹐那麼若要以八進位的數字來代表十進位數字系統裡的 8 的話﹐就需要兩個digits
(也就是 10)了。八進位的數字系統﹐在英文就叫做 Octal Number System。
在電腦世界裡﹐十六進位的數字系統(Hexadecimal Number System)比八進位
的數字系統更常為人所使用。在這個系統中﹐一個digit 可有 0﹐1﹐2﹐3﹐4﹐5﹐
6﹐7﹐8﹐9﹐A﹐B﹐C﹐D﹐E﹐F 等十六個值。每個 hexadecimal digit 可以換算
成四個 bits﹐例如十六進位的 A 等於十進位的 10﹐也等於二進位的 1010。如果要把
那相加的機器語言的指令 0001101000110010 由十六進位的數字系統來代表的話﹐
就成了 1A32。如果您因不熟悉這些數字系統而覺得不易了解的話﹐也不必太放在心上﹐
因為那並不會影響您學習高級電腦語言﹐因為這種語言您無需去面對那些數字系統﹐
所以對於二進位數字系統中﹐整數(Integer)及實數(Floating-point)的數字運算﹐
所需的 one's complement﹐two's complement﹐以及 normalization 之類的東
西﹐我也就不在這兒介紹了。電腦的硬體和其組織結構﹐我也不在此多介紹和解釋﹐因
為那對學習高級電腦語言沒有直接的關係(若是學習機器語言和組合語言﹐若能對電腦
內部的結構有充份的了解﹐就會有比較多的幫助)。
這篇文章的重點是﹐了解為何電腦使用二進位數字系統以及區分 Data 和電腦指令
(Program Instruction)。Data 是如何儲存的(例如用 ASCII 碼)﹐以及一個電
腦指令是如何組成的(Op Code 告訴電腦要採取什麼行動﹐ Operands 告訴電腦何
處取得數據)。
下一篇文章要談到如何下載及安裝「大蟒蛇(Python)」這個高級電腦語言。
〈待續〉
(2012-02-07)
【附記】
海濱之歌
你可能會有興趣的文章:
限會員,要發表迴響,請先登入



