計算機系統概論第二章

2022-10-04 05:36:04 字數 4557 閱讀 5055

我們在第一章中提到,計算機是乙個由多個層次組織起來的系統。在計算機中通過電子的流動,乙個用自然語言描述的問題可以輕而易舉的得到解決。

在計算機的內部,數以億計非常微小、快速的元件控制著電子的流動。這些元件對電路中電壓的有無做出反應。事實上,它們可以對電壓具體的數值做出反應,而不僅僅是對電壓的有無做出反應。

但是這樣會使控制電路和探測電路變得非常複雜而沒有多少實際用途,因此在實際的應用中往往是探測兩點之間電壓的有無而不是測量電壓的具體值。

要明白這些,先想一想家中的插座孔,你可以測量一下兩孔間電壓具體的值,比如,是120伏特呢,還是115伏特,或者是118.6伏特。但是電路系統只會探測電壓是否存在,因為這樣更簡單。

如果你想測量電壓值,那麼你還需要一組儀器,而如果想探測電壓是否存在,把你的手指伸進去就足夠了。

我們把存在電壓用「1」表示,而把不存在電壓用「0」表示,我們稱這乙個個的「0」和「1」為位元(bit),或位,是「二進位制位」(binary digit)的縮寫。想想你從小就使用的0,1,2,3,4,5,6,7,8,9,它們是十進位制數,用十個符號表示,而二進位制只有兩個表示數的符號:0和1。

更精確的說,計算機並不是區分電壓的絕對不存在(即0)和絕對存在(即1)。實際上,計算機的電路區分的是接近0的電壓和遠離0的電壓。例如,如果計算機把2.

9伏的電壓表示為1,把0伏的電壓表示為0,那麼2.6伏的電壓也會被視作1,而0.2伏的電壓會被當作0。

計算機要解決乙個真正的問題,必須能唯一的識別出許多不同的數值,而不僅僅是0和1。一根線路上的電壓只能唯一的表示兩個數值中的乙個,乙個表示為0,另乙個表示為1。這樣,為了唯一的識別出多個數值,必須對多個位進行組合。

例如,如果我們用8位(對應8根線路上的電壓),我們就能用***表示某乙個特定值,用***表示另乙個值。事實上,如果我們使用8位,最多能區分出256(即28)個不同的值。一般說來,如果有k位,我們最多能區分出2k個不同的值。

這些k位的每一種組合都是乙個編碼,對應著某個特定的值。

對於表示同乙個數值,存在許多種表示方法。例如,數字5可以被寫為5。這是你習慣的標準的十進位制計數法。

它也可以被乙個人用伸出的手指數來表示,這種方法寫下來就是11111,這種計數法有個名字——一元計數法。羅馬字中還有另一種表示5的符號——字元v。我們即將會看到5的第四種符號表示是二進位制00000101。

只是簡單的表示這些數值還不夠,我們還必須能對這些數值進行運算。如果在計算機上能對以某種表示法編碼的資訊進行運算,我們就把這種特殊的表示法稱為資料型別。每種指令集結構都有它自己的資料型別集,和對那些資料型別進行運算的指令集。

在本書中,我們主要使用兩種資料型別:用來表示我們要進行算術運算的正負整數的二進位制補碼整數,和用來表示我們想輸入計算機或顯示在計算機顯示器上的鍵盤上的字元的ascii碼。在後面就會解釋這兩種資料型別。

事實上,在大多數計算機上還存在著多種數值表示方法。回憶在中學學習過的「科學計數法」,它要求你將十進位制數621表示為6.21*102。

在計算機中,也存在以這種形式表示的數字,並且也提供了對這種表示法的數值的運算。這種資料型別通常被稱為浮點數。我們將在2.

6節展示這種表示法。

我們即將看到的第一種資訊的表示方法,或資料型別是無符號整數。無符號整數在計算機中有很多用途。如果我們想將某個任務執行有限次,可以使用無符號整數,表示該任務已經執行的次數。

計算機中的儲存單元的位址,就像房屋的位址一樣,可以通過「某大街129號」和「某大街131號」來區分,也可以使用無符號整數來表示。

首先回憶一下我們日常使用的十進位制系統。在乙個十進位制數329中,儘管單獨的3的絕對值只是9的1/3,但這裡的3表示比9大得多的值。原因就在於這個3在329中的位置決定了它表示300(3*102),而9則表示9*100 。

這就是位置計數法,或稱為定位數制。在十進位制系統裡,10被稱為數制中的基數或基。

在計算機中,可以使用類似的採用位置計數法的一串二進位制數來表示無符號型整數,不同的是基數為2,二進位制數為0和1。例如:如果我們使用5位有效數字來表示我們需要的數值,則數字6可以表示為00110,即:

0*24+0*23+1*22+1*21+0*20

使用k位數,就可以表示從0到2k-1共2k個整數。使用5位數,可以表示十進位制整數0到31。

然而在實際的計算中,還經常會使用負數,因此只有無符號整數是不夠的。為了表示有符號整數,我們可以將k位的2k個不同的數字分為兩半,一半表示正數,另一半表示負數。這樣,使用5位碼字就可以表示從+1到+15的正數,以及從-1到-15的負數。

這樣,就有30個整數被表示出來。因為25是32,那麼,還有兩個5位的碼字沒有被分配。其中乙個是00000,如果將其分配給數值0,現在,就得到乙個從-15到+15的完整的整數值系列。

還留下最後乙個數沒有分配,對於如何對其進行分配的問題,首先需要考慮的是從+1到+15,從-1到-15,到底是哪些碼字與其一一匹配的?

首先,正數是按照位置計數法直接表示的。因為有k位,而且我們想要用2k個碼字的一半來表示從0到2k-1-1的正數,所有的正數在它們的表示法中都會在最高位有乙個0。在k=5的情況下,最大的正數15使用01111來表示。

注意在圖2.1的三種資料型別中,0和所有正數都是以0開頭。

那麼,負數是如何表示的呢(在k=5的情況下,從-1到-15)?通常,第乙個想法就是:如果最高位為0表示是正數,那麼把該數字的最高位設為1就表示其對應的負數。

這種表示法就是原碼資料型別,見圖2.1。第二個想法是(這種方法實際上曾經在某些早期的計算機上使用過,如資料控制公司6600):

對正數「按位取反」,就表示與其絕對值大小相同、符號相反的負數,例如,+5是用00101來表示的,那麼-5就被記作11010。這種表示法在計算機工程中被稱為反碼,見圖2.1。

計算機設計者可以用任意的位組合來表示任意整數。但是究竟採用哪種表示方法呢?實際上,原碼和反碼在設計加法邏輯電路時,都會使問題複雜化。

原碼和反碼在進行加法運算時都會造成不必要的硬體需求,於是就出現了補碼表示法,見圖2.1。補碼被運用於現在的每一台機器之中。

我們在圖2.1中看到了從-16到+15的二進位制補碼表示法。為什麼要採用這種表示法呢?

首先,正整數使用直接的位置計數法來表示。對於5位而言,我們使用了25的一半的碼字來表示整數0到+15。

對負數表示法的選擇是基於盡可能使邏輯電路最簡單的想法,幾乎所有的計算機都使用相同的基本結構來進行加法運算。它被稱之為算術邏輯單元,也就是我們所知道的取首字母縮寫的alu。我們將在3、4章介紹alu的真正結構。

現在只需要了解:乙個alu有兩個輸入和乙個輸出。在它進行運算時,它將要相加的兩個二進位制位組合作為輸入,求和產生的乙個二進位制位組合作為輸出。

例如,如果alu能進行5位的輸入組合的運算,兩個輸入值為00110和00101,結果(alu的輸出)是01011。加法過程如下:

00110

00101

=01011

兩個二進位制位組合的加法和兩個十進位制位組合的加法相同,從右向左,一列一列的運算。如果一列的加法有進製,進製立即加至它的左列。

值的一提是二進位制alu並不知道(也不關心)所加的兩個位組合表示什麼。它只是簡單的將二進位制數相加。alu只做加法而不考慮其他,這一點將對我們為整數分配碼字十分有利。

首先考慮,如何分配碼字[表示乙個數(或字元)的若干位二進位制**。],使得兩個絕對值相同符號相反的整數在alu做加法的結果為0。也就是說,如果對alu的輸入是a與-a的表示,那麼,alu的輸出應是00000。

為了實現這個目的,補碼資料型別定義了每乙個負整數的表示,即:當alu把它加上絕對值大小相同的正數,結果會是0的表示法。比如說,既然00101是+5的表示法,11011就被選作-5的表示法。

此外,還必須考慮的重要一點是,分配碼字應使alu在對每個數值加00001後,應得到正確的結果。這樣,所有的二進位制數值就像十進位制的-15到+15一樣。

我們可以使用數學語言來表示:

表示(value+1)=表示(value)+表示(1)

以上兩點,就足以保證alu正確地做加法運算(只要得到的結果不大於+15或小於-16)。

特別的,注意-1和0的表示,分別為11111和00000。當我們對-1的表示加上00001,我們就得到00000,雖然有乙個進製,但是該進製不影響結果。也就是說,把00001和-1的表示相加的正確結果是0,而不是100000。

因此,進製可以被忽略。實際上,在做補碼算術運算時,這個進製總是被忽略。

乙個計算-a的表示的簡便方法:已知a的表示,對a按位取反,然後把a和a的反碼相加;這個結果是11111。如果再加上00001,就得到結果為0。

因此,-a的表示可以簡單地通過把a的反碼加1得到。

例題2.1 -13的二進位制補碼表示是什麼?

1.如果a是+13,它表示為

01101

2. a的反碼是

10010

3. 加1到10010得到10011,-13的二進位制補碼表示是10011

我們可以通過對a和-a的表示作加法,來驗證我們的結果:

01101

10011

00000

你可能已經注意到01101和10011的加法,除了得到00000,還得到乙個進製。也就是說,01101和10011的二進位制加法實際上得到100000。然而,正如我們前面看到的,在使用二進位制補碼的情況下,這個進製可以被忽略。

至此,使用5位,我們能夠識別出15個正數,15個負數,和乙個0。如果k=5,我們能夠識別出32個不同的數,但是我們只說明了31(15+15+1)個。剩下的乙個表示是10000,我們應該分配乙個什麼值給它?

第二章計算機系統基礎知識

一 選擇題 1 在計算機執行時,把程式和資料一樣存放在記憶體中,這是1946年由 c 所領導的研究小組正式提出並論證的。a.圖靈 b 布林 c 馮 諾依曼 d 愛因斯坦 2 計算機中運算器的主要功能是b a 控制計算機的執行 b 算術運算和邏輯運算 c 分析指令並執行 d 負責訪問儲存器中的資料 3...

第二章計算機系統基礎知識

一 選擇題 1 在計算機執行時,把程式和資料一樣存放在記憶體中,這是1946年由 c所領導的研究小組正式提出並論證的。a.圖靈 b 布林 c 馮 諾依曼 d 愛因斯坦 2 計算機中運算器的主要功能是 b a 控制計算機的執行 b 算術運算和邏輯運算 c 分析指令並執行 d 負責訪問儲存器中的資料 3...

大學計算機基礎第二章總結

數 計算機的資料的基本形態是二進位制數 數制 可以直接進行數學計算 數字 碼制 用來表示不同物件屬性 數制 計數體制 多位數中每一位的構成方法以及實現從低位到高位的進製規則 也叫做進製 常用數制 r進製有r個數碼,數碼從0 r 1,構成數的每乙個數碼所表示的值是該數碼和該位的權係數 也叫冪次或權重 ...