《微機原理與接口技術》課件第1章_第1頁
《微機原理與接口技術》課件第1章_第2頁
《微機原理與接口技術》課件第1章_第3頁
《微機原理與接口技術》課件第1章_第4頁
《微機原理與接口技術》課件第1章_第5頁
已閱讀5頁,還剩146頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1章概述1.1計算機的數制及其轉換1.2計算機中數與字符的編碼1.3微型計算機系統組成1.4微型計算機的性能指標及分類1.5多媒體計算機1.1計算機的數制及其轉換

1.1.1數與數制進位計數制是一種計數的方法。在日常生活中,人們使用各種進位計數制。例如,六十進制(1小時=60分,1分=60秒),十二進制(1英尺=12英寸,1年=12月)等。但最熟悉和最常用的是十進制計數。如前所述,在計算機中使用的是二進制計數。另外,為便于人們閱讀及書寫,常常還要用到八進制計數及十六進制計數來表示二進制計數。十進制數的特點是“逢十進一,借一當十”,需要用到的數字符號為10個,分別是0~9。二進制數的特點是“逢二進一,借一當二”,需要用到的數字符號為2個,分別是0、1。八進制數的特點是“逢八進一,借一當八”,需要用到的數字符號為8個,分別是0~7。十六進制數的特點是“逢十六進一,借一當十六”,需要用到的數字符號為16個,分別是0~9、A~F。

任意一個十進制數可以用位權表示,位權就是某個固定位置上的計數單位。在十進制數中,個位的位權為100,十位的位權為101,百位的位權為102,千位的位權為103,而在小數點后第一位上的位權為10-1,小數點后第二位的位權為10-2等等。因此,如果有十進制數234.13,則百位上的2表示兩個100,十位上的3表示三個10,個位上的4表示四個1,小數點后第一位上的1表示一個0.1,小數點后第二位上的3表示三個0.01,用位權表示為

(234.13)10?=2×102+3×101+4×100?+1×10-1+3×10-2

同理,任意一個二進制數、八進制數和十六進制數也可用位權表示。例如:1.1.2不同數制之間的轉換

1.十進制數與二進制數之間的轉換

1)十進制整數轉換成二進制整數方法:除2取余數,結果倒排列。具體做法:將十進制數除以2,得到一個商和一個余數;再將商除以2,又得到一個商和一個余數;繼續這一過程,直到商等于0為止。每次得到的余數(必定是0或1)就是對應的二進制數的各位數字。注意:第一次得到的余數為二進制數的最低位,最后得到的余數為二進制數的最高位。【例1-1】將十進制數97轉換成二進制數。其過程如下:最后結果為為了將一個既有整數又有小數部分的十進制數轉換成二進制數,可以將其整數部分和小數部分分別進行轉換,然后再組合起來。例如把97.6875轉換成對應二進制數的過程如下:

2.十進制與八進制之間的轉換

1)十進制整數轉換成八進制整數方法:除8取余數,結果倒排列。具體做法:將十進制數除以8,得到一個商和一個余數;再將商除以8,又得到一個商和一個余數;繼續這一過程,直到商等于0為止。每次得到的余數(必定是小于8的數)就是對應八進制數的各位數字。第一次得到的余數為八進制數的最低位,最后一次得到的余數為八進制數的最高位。

2)十進制小數轉換成八進制小數方法:乘8取整數,結果順排列。具體做法:用8乘以十進制小數,得到一個整數和一個小數;再用8乘以小數部分,又得到一個整數和一個小數;繼續這一過程,直到余下的小數部分為0或滿足精度要求為止;最后將每次得到的整數部分(必定是小于8的數)按先后順序從左到右排列,即得到所對應的二進制小數。

3.十進制與十六進制之間的轉換

1)十進制整數轉換成十六進制整數方法:除16取余數,結果倒排列。具體做法:將十進制數除以16,得到一個商和一個余數;再將商除以16,又得到一個商和一個余數;繼續這一過程,直到商等于0為止。每次得到的余數(必定是小于F的數)就是對應十六進制數的各位數字。第一次得到的余數為十六進制數的最低位,最后一次得到的余數為十六進制數的最高位。

2)十進制小數轉換成十六進制小數方法:乘16取整數,結果順排列。具體做法:用16乘以十進制小數,得到一個整數和一個小數;再用16乘以小數部分,又得到一個整數和一個小數;繼續這一過程,直到余下的小數部分為0或滿足精度要求為止;最后將每次得到的整數部分(必定是小于F的數)按先后順序從左到右排列,即得到所對應的十六進制小數。4.二進制與八進制、十六進制數之間的轉換因為23=8,所以每三位二進制數對應一位八進制數;24=16,所以每四位二進制數對應一位十六進制。表1-1列出了十進制、二進制、八進制、十六進制最基本數字的對應關系,這些對應關系在后面的二進制、八進制、十六進制相互轉換中要經常用到。

1)二進制數轉換成八進制數方法:從小數點所在位置分別向左、向右每三位一組進行劃分。若小數點左側的位數不是3的整數倍,在數的最左側補零;若小數點右側的位數不是3的整數倍,則在數的最右側補零。然后參照表1-1,將每三位二進制數轉換成對應的一位八進制數,排列后即為二進制數對應的八進制數。表1-1十、二、八、十六進制數碼的對應關系

【例1-10】直接將二進制數11110.11轉換成八進制數。其過程如下:

011 110 . 110 3 6 . 6所以

(11110.11)2=(36.6)8

2)八進制數轉換二進制數方法:參照表1-1,將每一位八進制數分解成對應的三位二進制數,排列后即為八進制數對應的二進制數。

【例1-11】直接將八進制數35.6轉換成二進制數。其過程如下:

3)二進制數轉換成十六進制數方法:從小數點所在位置分別向左、向右每四位一組進行劃分。若小數點左側的位數不是4的整數倍,在數的最左側補零;若小數點右側的位數不是4的整數倍,在數的最右側補零。然后參照表1-1,將每四位二進制數轉換成對應的一位十六進制數,排列后即為二進制數對應的十六進制數。 0001 1110 . 1100 1 E . C所以

(11110.11)2=(1E.C)16

【例1-12】直接將二進制11110.11轉換成十六進制數。其過程如下:4)十六進制數轉換二進制數方法:參照表1-1,將每一位十六進制數轉換成對應的四位二進制數,排列后即為十六進制數對應的二進制數。

【例1-13】直接將十六進制數EF.C轉換成二進制數。其過程如下:

E F C 1110 1111. 1100所以

(EF.C)16=(11101111.11)2由以上方法可以看出,(25)10=(11001)2=(19)16=(31)8,(0.5)10=(0.1)2=(0.8)16=(0.4)8。在計算機里,通常用數字后面跟一個英文字母來表示該數的數制,十進制數用D(Decimal)、二進制數用B(Binary)、八進制數用O(Octal)、十六進制數用H(Hexadecimal)來表示。由于英文字母O容易和零混淆,所以也可以用Q來表示八進制數。另外,在計算機操作中一般默認使用十進制數,所以十進制數可以不標進制。例如,25D=11001B=19H=31Q,0.5D=0.1B=0.8H=0.4Q。當然,也可以用這些字母的小寫形式來表示數制。例如:25d=11001b=19h=31q,0.5d=0.1b=0.8h=0.4q。本書約定采用大寫字母形式。八進制數和十六進制數主要用來簡化二進制數的書寫,因為具有23=8,24=16的關系,所以使用八進制數和十六進制數表示的二進制數較短,便于記憶。IBM-PC機中主要使用十六進制數表示二進制數和編碼,所以必須十分熟悉二進制數與十六進制數的對應關系。

同理,任意一個二進制數、八進制數和十六進制數也可用位權表示。例如:(101.11)2=1×22+0×21+1×20+1×2-1+1×2-2(124.36)8=1×82+2×81+4×80+3×8-1+6×8-2(AC.B5)16=A×161+C×160+B×16-1+5×16-2

根據上述概念,可推廣出表示任意進制數的通式:其中為整數部分,為小數部分,r為基數。每一項的數字可用0~r-1數字中的一個數字來表示。1.3.2不同數制之間的轉換

1.十進制數與二進制數之間的轉換

1)十進制整數轉換成二進制整數

方法:除2取余法。具體做法:將十進制數除以2,得到一個商和一個余數;再將商除以2,又得到一個商和一個余數;繼續這一過程,直到商等于0為止。每次得到的余數(必定是0或1)就是對應的二進制數的各位數字。注意:第一次得到的余數為二進制數的最低位,最后得到的余數為二進制數的最高位。【例1-1】將十進制數97轉換成二進制數。其過程如下:最后結果為(97)10=(A6A5A4A3A2A1A0)2=(1100001)22972482242122623210余數為1,余數為0,余數為0,余數為0,余數為0,余數為1,余數為1,余數為0,即A0=1即A1=0即A2=0即A3=0即A4=0即A5=1即A6=1結束2)十進制小數轉換成二進制小數方法:乘2取整法。具體做法:用2乘以十進制小數,得到整數和小數部分;再用2乘以小數部分,又得到一個整數和一個小數部分;繼續這一過程,直到余下的小數部分為0或滿足精度要求為止;最后將每次得到的整數部分(必定是0或1)按先后順序從左到右排列,即得到所對應的二進制小數。【例1-2】將十進制小數0.6875轉換成二進制小數。其過程如下:0.6875× ?21.3750 整數部分為1,即A-1=10.3750 余下的小數部分×20.7500 整數部分為0,即A-2=00.7500 余下的小數部分×?21.5000 整數部分為1,即A-3=10.5000 余下的小數部分×?21.0000 整數部分為1,即A-4=10.0000 余下的小數部分為0,結束最后結果為(0.6875)10=(0.A-1A-2A-3A-4)2=(0.1011)2

為了將一個既有整數又有小數部分的十進制數轉換成二進制數,可以將其整數部分和小數部分分別進行轉換,然后再組合起來。例如:(97)10=(1100001)2(0.6875)10=(0.1011)2由此可得:(97.6875)10=(1100001.1011)23)二進制數轉換成十進制數方法:按位權展開后相加。【例1-3】將二進制數111.11轉換成十進制數。其過程如下:(111.11)2=1×22+1×21+1×20+1×2-1+1×2-2 =4+2+1+0.5+0.25=(7.75)10

2.十進制與八進制之間的轉換

1)十進制整數轉換成八進制整數方法:除8取余法。具體做法:將十進制數除以8,得到一個商和一個余數;再將商除以8,又得到一個商和一個余數;繼續這一過程,直到商等于0為止。每次得到的余數(必定是小于8的數)就是對應八進制數的各位數字。第一次得到的余數為八進制數的最低位,最后一次得到的余數為八進制數的最高位。【例1-4】將十進制數97轉換成八進制數。其過程如下:最后結果為(97)10=(A2A1A0)8=(141)8余數為1,余數為4,余數為1,即A0=1即A1=4即A2=1結束89781281商為0余數為0,2)十進制小數轉換成八進制小數

方法:乘8取整法。具體做法:用8乘以十進制小數,得到一個整數和一個小數部分;再用8乘以小數部分,又得到一個整數和一個小數部分;繼續這一過程,直到余下的小數部分為0或滿足精度要求為止;最后將每次得到的整數部分(必定是小于8的數)按先后順序從左到右排列,即得到所對應的二進制小數。【例1-5】將十進制小數0.6875轉換成八進制小數。其過程如下:

0.6875 ×8 5.5000 整數部分為5,即A-1=5 0.5000 余下的小數部分

×8 4.0000 整數部分為4,即A-2=4 0.0000 余下的小數部分為0,結束最后結果為(0.6875)10=(0.A-1A-2)8=(0.54)8同理,一個八進制數可分解成整數和小數部分,分別轉換后合成即可。3)八進制數轉換成十進制數方法:按位權展開后相加【例1-6】

將八進制數141.54轉換成十進制數。其過程如下:(141.54)8=1×82+4×81+1×80+5×8-1+4×8-2 =64+32+1+0.625+0.0625 =97.6875最后結果為

(141.54)8=(97.6875)10

3.十進制與十六進制之間的轉換

1)十進制整數轉換成十六進制整數

方法:除16取余法。具體做法:將十進制數除以16,得到一個商和一個余數;再將商除以16,又得到一個商和一個余數;繼續這一過程,直到商等于0為止。每次得到的余數(必定是小于F的數)就是對應十六進制數的各位數字。第一次得到的余數為十六進制數的最低位,最后一次得到的余數為十六進制數的最高位。【例1-7】將十進制數97轉換成十六進制數。其過程如下:最后結果為(97)10=(A2A1A0)16=(61)16余數為1,余數為6,即A0=1即A1=6結束1697166商為0余數為0,2)十進制小數轉換成十六進制小數方法:乘16取整法。具體做法:用16乘以十進制小數,得到一個整數和一個小數部分;再用16乘以小數部分,又得到一個整數和一個小數部分;繼續這一過程,直到余下的小數部分為0或滿足精度要求為止;最后將每次得到的整數部分(必定是小于F的數)按先后順序從左到右排列,即得到所對應的十六進制小數。【例1-8】將十進制小數0.6875轉換成十六進制小數。其過程如下:0.68751611.00000.0000整數部分為11,即A-1=B余下的小數部分為0,結束最后結果為(0.6875)10=(0.A-1)16=(0.B)163)十六進制數轉換成十進制數方法:按位權展開后相加。【例1-9】

將十六進制數61.B轉換成十進制數。其過程如下:

(61.B)8 =6×161+1×160+B×16-1 =96+1+11×16-1 =97+0.6875 =97.6875最后結果為

(61.B)16=(97.6875)10

4.二進制與八進制、十六進制數之間的轉換因為23=8,所以每三位二進制數對應一位八進制數;24=16,所以每四位二進制數對應一位十六進制。表1-1列出了十進制、二進制、八進制、十六進制最基本數字的對應關系,這些對應關系在后面的二進制、八進制、十六進制相互轉換中要經常用到。

1)二進制數轉換成八進制數

方法:從小數點所在位置分別向左向右每三位一組進行劃分。若小數點左側的位數不是3的整數倍,在數的最左側補零;若小數點右側的位數不是3的整數倍,在數的最右側補零。然后參照表1-1,將每三位二進制數轉換成對應的一位八進制數,即為二進制數對應的八進制數。表1-1十、二、八、十六進制數碼的對應關系十進制二進制八進制十六進制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F表1-1十、二、八、十六進制數碼的對應關系【例1-10】直接將二進制數11110.11轉換成八進制數。其過程如下:011 110 . 1103 6 . 6所以(11110.11)2=(36.6)82)八進制數轉換二進制數方法:參照表1-1,將每一位八進制數分解成對應的三位二進制數,即為八進制數對應的二進制數。

【例1-11】直接將八進制數35.6轉換成二進制數。其過程如下:3 5 . 6011 101 . 110

所以(35.6)8=(11101.11)2

3)二進制數轉換成十六進制數方法:從小數點所在位置分別向左向右每四位一組進行劃分。若小數點左側的位數不是4的整數倍,在數的最左側補零;若小數點右側的位數不是4的整數倍,在數的最右側補零。然后參照表1-1,將每四位二進制數轉換成對應的一位十六進制數,即為二進制數對應的十六進制數。

【例1-12】直接將二進制11110.11轉換成十六進制數。其過程如下:0001 1110 . 11001 E . C所以(11110.11)2=(1E.C)164)十六進制數轉換二進制數方法:參照表1-1,將每一位十六進制數轉換成對應的四位二進制數,即為十六進制數對應的二進制數。

【例1-13】直接將十六進制數EF.C轉換成二進制數。其過程如下:

E F . C1110 1111 . 1100所以(EF.C)16=(11101111.11)2

由以上方法可以看出,(25)10=(11001)2=(19)16=(31)8,(0.5)10=(0.1)2=(0.8)16=(0.4)8。在計算機里,通常用數字后面跟一個英文字母來表示該數的數制,十進制數用D(Decimal)、二進制數用B(Binary)、八進制數用O(Octal)、十六進制數用H(Hexadecimal)來表示。由于英文字母O容易和零誤會,所以也可以用Q來表示八進制數。另外,在計算機操作中一般默認使用十進制數,所以十進制數可以不標進制。

例如,25D=1100B=19H=31Q,0.5D=0.1B=0.8H=0.4Q。當然,也可以用這些字母的小寫形式來表示數制。例如:25d=1100b=19h=31q,0.5d=0.1b=0.8h=0.4q。本書約定采用大寫字母形式。八進制數和十六進制數主要用來簡化二進制數的書寫,因為具有23=8,24=16的關系,所以使用八進制數和十六進制數表示的二進制數較短,便于記憶。IBM-PC機中主要使用十六進制數表示二進制數和編碼,所以必須十分熟悉二進制數與十六進制數的對應關系。1.2計算機中數與字符的編碼1.2.1數值數據的編碼及其運算

1.二進制數據的編碼及運算在二進制數制中,數據的正負號可以用一位二進制的“0”和“1”兩個狀態來表示,這樣,二進制數值數據在計算機中就能方便表示了。為了盡可能簡化對二進制數值數據實現算術運算的規則,機器將二進制數值數據進行編碼表示,常用的編碼有原碼、反碼和補碼。由于補碼編碼有許多優點,因此大多數微機數字與字符采用補碼編碼。

為了討論方便,有必要引入兩個概念:機器數和機器數的真值(簡稱真值)。

.機器數:帶符號的二進制數值數據在計算機內部的編碼。

.真值:機器數所代表的實際值。一般機器數的最高有效位用來表示數的正負號,“0”表示正數,“1”表示負數。1)二進制數原碼編碼方法原碼編碼的方法如下:設真值為X,機器字長為n位,則當X≥0時,[X]原的最高位填0,其余n-1位填X的各數值位的位值。例如,n=8時,[+0]原=00000000,[+1]原=00000001,[+127]原=01111111。當X≤0時,[X]原的最高位填1,其余n-1位填X的各數值位的位值。例如,n=8時,[-0]原=10000000,[-1]原=10000001,[-127]原=11111111。結論:二進制正、負數的原碼就是符號化的機器數真值本身。

注意:在原碼的表示中,真值0的原碼可表示為兩種不同的形式,+0和-0。原碼表示法的優點是簡單易于理解,與真值間的轉換較為方便。它的缺點是進行加減運算時較麻煩,既要考慮是做加法還是做減法運算,還要考慮數的符號和絕對值的大小。這不僅使運算器的設計較為復雜,而且降低了運算器的運算速度。若有二進制數X=Xn-1Xn-2…X1X0,則原碼表示法的定義為2n-1>X≥00≥X>-2n-12)二進制數反碼編碼方法反碼編碼的方法如下:設真值為X,機器字長為n位,則當X≥0時,[X]反的最高位填0,其余n-1位填X的各數值位的位值,即采用符號—絕對值表示。例如,n=8時,[+0]反=00000000,[+1]反=00000001,[+127]反=01111111。當X≤0時,[X]反=2n-1+X(MOD2n)。例如,n=8時,[-0]反=11111111,[-1]反=11111110,[-127]反=10000000。

結論:二進制正數的反碼就是其原碼。二進制負數的反碼就是機器數符號位保持不變,其余按位取反。

注意:在反碼的表示中,真值0的反碼也可表示為兩種不同的形式,+0和-0。若二進制數X=Xn-1Xn-2…X1X0,則反碼表示法的定義為2n-1>X≥00≥X>-2n-13)二進制數補碼編碼方法補碼編碼的方法如下:設真值為X,機器字長為n位,則當X≥0時,[X]補的最高位填0,其余n-1位填X的各數值位的位值,即采用符號—絕對值表示。例如,n=8時,[+0]補=00000000,[+1]補=00000001,[+127]補=01111111。當X≤0時,[X]補=2n-|X|(MOD2n)。例如,n=8時,[-0]補=00000000,[-1]補=11111111,[-127]補=10000001。結論:二進制正數的補碼就是其原碼。二進制負數的補碼就是機器數符號位保持不變,其余位取反碼后末位加1。

求負數的補碼有一種更簡便的方法:當X≤0時,[X]補的最高位填1,其余n-1位填X的各數值位按位取反(0變1,1變0)后在末位加1的數值。

注意:①在補碼表示法中,0只有一種表示,即000…000。②對于10000000這個補碼編碼,其真值被定義為-128。

【例1-14】

機器字長n=8位,X=+48D,求[X]補。首先將+48D轉換為二進制數:+110000B。因為機器字長是8位,其中符號占了1位,所以數值只占7位。將+110000B寫成+0110000B,[+48]補

=00110000B,寫成十六進制數為30H,即[+48]補

=30H。【例1-15】機器字長n=8位,X=-48D,求[X]補。首先將-48D轉換為二進制數:-110000B。因為機器字長是8位,其中符號占了1位,所以數值只占7位。將-110000B寫成-10110000B。再將數值位0110000B按位求反后為1001111B,末位加1后為1010000B。所以,[-48]補

=11010000B,寫成十六進制數為0D0H,即[-48]補

=0D0H。注意:在匯編語言中,為了區別指令碼和數據,規定以A~F開始的數據前面加零,如0D0H。

【例1-16】機器字長n=16位,X=+48D,求[X]補

+48D轉換為二進制數:+110000B。因為機器字長是16位,其中符號占了一位,所以數值占15位。將+110000B寫成+000000000110000B,[+48]補

=0000000000110000B,寫成十六進制數為0030H,即[+48]補

=0030H。

【例1-17】

機器字長n=16位,X=-48D,求[X]補。-48D轉換為二進制數:-110000B。因為機器字長是16位,其中符號占了1位,所以數值占15位。將-110000B寫成-000000000110000B。000000000110000B按位求反后為1111111111001111B,末位加1后為1111111111010000B。所以,[-48]補

=1111111111010000B,寫成十六進制數為0FFD0H,即[-48]補

=0FFD0H。

由此可看出,補碼數要擴展時,正數是在符號的前面補0,負數是在符號的前面補1。也就是說,補碼數擴展實際上是符號擴展。已知補碼求真值的方法是:當機器數的最高位(符號位)為0時,表示真值是正數,其值等于其余n-1位的值;當機器數的最高位(符號位)為1時,表示真值是負數,其值等于其余n-1位按位取反后末位加1的值。

例如:若[X]補

=01111111,則X=(+1111111)2=(+127)10。若[X]補

=11111111,則X=(-0000001)2=(-1)10。下面討論補碼表示數的范圍。一般來說,如果機器字長為n位,則補碼能表示的整數范圍是-2n-1≤N≤2n-1-1。例如,當n=8時,-128≤N≤+127,其二進制補碼數范圍如表1-2所示。表1-28位二進制補碼數范圍補碼編碼(機器數)十進制數(真值)01111111+12701111110+12600000010+200000001+100000000011111111-111111110-210000010-12610000001-12710000000-1284)二進制數補碼的運算補碼的運算規則是:[X+Y]補

=[X]補

+[Y]補[X-Y]補

=[X]補

+[-Y]補已知[Y]補,求[-Y]補的方法是將[Y]補各位按位取反(包括符號位在內)末位加1。現舉例說明以上兩個公式的正確性。【例1-18】設 X1=+0001100X2=-0001100 Y1=+0000101Y2=-0000101則 [X1]補

=00001100 [X2]補

=11110100[Y1]補

=00000101 [Y2]補

=11111011①計算X1+Y1。+0001100X1 00001100 [X1]補+)+0000101Y1 +)00000101 [Y1]補

+0010001X1+Y1 00010001 [X1]補+[Y1]補因為:

[X1+Y1]補

=[+0010001]補

=00010001=[X1]補+[Y1]補所以:

[X1+Y1]補

=[X1]補

+[Y1]補②計算X1-Y1。+0001100 X1 00001100 [X1]補-)+0000101 Y1 +)11111011 [-Y1]補

+0000111 X1-Y1100000111 [X1]補+[-Y1]補自然丟失

因為:

[X1-Y1]補

=[+0000111]補

=00000111=[X1]補+[-Y1]補所以:

[X1-Y1]補

=[X1]補

+[-Y1]補③計算X2+Y2。-0001100 X2 11110100 [X2]補+)-0000101 Y2 +)11111011 [Y2]補 -0010001 X2+Y2 11101111 [X2]補+[Y2]補自然丟失因為:

[X2+Y2]補

=[-0010001]補

=11101111=[X2]補+[Y2]補所以:

[X2+Y2]補

=[X2]補

+[Y2]補④計算X2-Y2。-0001100 X2 11110100 [X2]補-)-0000101 Y2 +) 00000101 [-Y2]補

-0000111 X2-Y2 11111001 [X2]補+[-Y2]補因為:

[X2-Y2]補

=[-0000111]補

=11111001=[X2]補+[-Y2]補所以:

[X2-Y2]補

=[X2]補

+[-Y2]補

由此可看出,計算機引入了補碼編碼后,帶來了以下幾個優點:

(1)減法轉化成了加法,這樣大大簡化了運算器硬件電路的設計,加減法可用同一硬件電路進行處理。

(2)運算時,符號位與數值位同等對待,都按二進制數參加運算,符號位產生的進位丟掉不管,其結果是正確的。這大大簡化了運算規則。

運用以上兩個公式時,要注意以下兩點:

(1)公式成立有個前提條件,就是運算結果不能超出機器數所能表示的范圍,否則運算結果不正確,按“溢出”處理。例如,設機器字長為8位,則-128≤N≤+127,計算(+64)+(+65)。+64 01000000+)+65 +) 01000001+129 10000001—→-127

顯然這個結果是錯誤的。究其原因是:(+64)+(+65)=+129>+127,超出了字長為8位所能表示的最大值,產生了“溢出”,所以結果值出錯。再如,計算(-125)+(-10)。

-125 10000011+)-10 +) 11110110

-135 101111001—→+121顯然,計算結果也是錯誤的。其原因是:(-125)+(-10)=-135<-128,超出了字長為8位所能表示的最小值,產生了“溢出”,所以結果出錯。(2)采用補碼運算后,結果也是補碼,欲得運算結果的真值,還需進行轉換。

2.無符號整數的編碼及運算規則在某些情況下,計算機要處理的數據全是正數,此時機器數再保留符號位就沒有意義了。這時,將機器數最高有效位也作為數值位處理,也就是說,假設機器字長為n位,則有符號整數的編碼可表示為符號位數值位1位n-1位無符號整數的編碼可表示為數值位n位

無符號整數的表示范圍是:0≤N≤2n-1。例如,當n=8位時,表示范圍是:0≤N≤255;當n=16位時,表示范圍是:0≤N≤65535。計算機中最常見的無符號整數是地址,另外,雙字長數據的低位字也是無符號整數。要注意的是,計算機本身不論是對有符號數還是無符號數,總是按照補碼的運算規則做運算。例如,機器做這樣一個運算:10001010+) 00000111 10010001可以把它看作是兩個無符號整數相加:也可以把它看作是兩個有符號整數相加:138+) 70145

-118+)7

-111

也就是說,不論把二進制數解釋成有符號數還是無符號數,其結果都是正確的。因此,機器采用補碼編碼以后,不必針對無符號數和有符號數設計兩套不同的電路,無符號數和有符號數的運算是兼容的。這也是采用補碼后帶來的一大優點。

3.十進制數的編碼及運算人們在日常生活中習慣使用十進制數,而在計算機內,采用二進制表示和處理數據更方便。因此,計算機在輸入和輸出數據時,要進行十→二和二→十的進制數轉換。但是,在某些特定的應用領域中(如商業統計),數據的運算很簡單,但數據的輸入和輸出量很大,這樣,進制轉換所占的時間比例就會很大。從提高計算機的運行效率考慮,可以采用在計算機內部直接用十進制表示和處理數據的方法。以下介紹在計算機內部的十進制數的編碼方法及運算方法。

十進制數的每一個數位的基為10,但到了計算機內部,必須用基2碼對每個十進制數位進行編碼,所需要的最少的基碼的位數為lb10(即log210),取整數為4。4位基2碼有16種不同的組合,怎樣從中選擇出10個組合來表示十進制數位的0~9,有非常多的方案,最常見的是8421碼。8421碼是指4個基2碼的位權從高到低分別為8、4、2、1,選擇的是0000,0001,0010,…,1001這10種組合,用來表示0~9這10個數位,如表1-3所示。表1-3BCD碼表

這種編碼的特點是:這4個基2碼之間滿足二進制規則,而十進制數位之間是十進制計數規則。因此,這種編碼實質上是二進制編碼的十進制數(BinaryCodedDecimal),因此,簡稱BCD碼或二—十進制碼。十進制數碼01234567898421碼0000000100100011010001010110011110001001【例1-19】將十進制數67.9轉換成BCD碼。其過程如下:

6 7 . 90110 0111 . 1001所以(67.9)10=(01100111.0111)BCD【例1-20】將BCD碼10010110.0110轉換成十進制數,其過程如下:10010110 . 01109 6 . 6所以(10010110.0110)BCD=(96.6)10BCD碼的運算規則:BCD碼是十進制數,而運算器對數據做加減運算時,都是按二進制運算規則進行處理的。這樣,當將BCD碼傳送給運算器進行運算時,其結果需要修正。修正的規則是:當兩個BCD碼相加,如果和等于或小于1001(即9H),不需要修正;如果相加之和在1010到1111(即0AH~0FH)之間,則需加6H進行修正;如果相加時本位產生了進位,也需加6H進行修正。這樣做的原因是,機器按二進制相加,所以4位二進制數相加時,是按“逢十六進一”的原則進行運算的,而實質上是2個十進制數相加,應該按“逢十進一”的原則相加,16與10相差6,所以當和超過9或有進位時,都要加6進行修正。下面舉例說明。【例1-21】計算1+8的值。如果將1和8送給機器進行加法運算,其運算過程如下:0001+)10001001結果是1001,即十進制數9,1+8=9正確。【例1-22】需要修正BCD碼運算值的舉例。①計算5+7的值。0101+)01111100結果大于9+)0110加6修正

10010結果是0010,即十進制數2,還產生了進位。5+7=12,結論正確。②計算9+9的值。

結果是1000,即十進制的8,還產生進位,故加6修正。9+9=18,結論正確。1001+)100110010+)011011000加6修正

若做減法運算,其修正規則為:當兩個BCD碼相減,如果差等于或小于1001,不需要修正;如果相減時本位產生了借位,則應減6H加以修正。原因是:如果有借位,機器將這個借位當十六看待,而實際上應該當十看待,因此,應該將差值再減6H才是BCD碼的正確結果值。下面舉例進行說明。【例1-23】

需要修正BCD碼運算值的舉例。①計算9-7的值。1001-)01110010結果值是0010,即十進制數2。9-7=2,結論正確。②計算7-9的值。→發生借位10111-)10011110-)0110減6修正

1000

結果值是1000,即十進制數8,有借位。7-9=8,結論正確。(8是-2以10為模的補碼,在機器中,負數都以補碼形式表示)

在計算機中BCD碼有兩種格式:壓縮BCD碼和非壓縮BCD碼:

(1)非壓縮BCD碼:1字節(8位二進制)中僅表示一位BCD數,例如:(00000110)BCD=6。

(2)壓縮BCD碼:1字節中僅表示兩位BCD數,例如:(01100110)BCD=66。另外,BCD碼除了采用上述方法調整以外,也可以在交付計算機運算之前,先將BCD碼轉換為二進制數,然后交付計算機運算,運算以后再將二進制結果轉換為BCD碼。1.2.2非數值數據的二進制編碼現代計算機不僅要處理數值數據,而且還要處理大量的非數值數據,像英文字母、標點符號、專用符號、漢字等等。前面已說過,不論什么數據,都必須用基2碼編碼后才能存儲、傳送及處理,非數值數據也不例外。下面分別討論常見的非數值數據的二進制編碼方法。

1.字符編碼使用最多、最普遍的是ASCII字符編碼,即美國標準信息交換代碼(AmericanStandardCodeforInformationInterchange),具體見表1-4。表1-4ASCII字符編碼B6B5B4

B3B2B1B0000(0)001(1)010(2)011(3)100(4)101(5)110(6)111(7)0000(0)NULDLESP0@P`p0001(1)SOHDC1!1AQaq0010(2)STXDC2″2BRbr0011(3)ETXDC3#3CScs0100(4)EOTDC4$4DTdt0101(5)ENQNAK%5EUeu0110(6)ACKSYN&6FVfv0111(7)BELETB?7GWgw1000(8)BSCAN(8HXhx1001(9)HTEM)9IYiy1010(A)LFSUB*:JZjz1011(B)VTESC+;K[k{1100(C)FFFS,<L\l|1101(D)CRGS-=M]m}1110(E)SORS.>N^n~1111(F)SIUS/?O_oDELASCII碼表有以下幾個特點:

(1)每個字符用7位基2碼表示,其排列次序為B6B5B4B3B2B1B0。實際上,在計算機內部,每個字符是用8位(即一個字節)表示的。一般情況下,將最高位置為“0”,即B7為“0”。需要奇偶校驗時,最高位用做校驗位。(2)ASCII碼共編碼了128個字符,它們分別是:*32個控制字符,主要用于通信中的通信控制或對計算機設備的功能控制,編碼值為0~31(十進制)。*間隔字符(也稱空格字符)SP,編碼值為20H。*刪除控制碼DEL,編碼值為7FH。*94個可印刷字符(或稱有形字符)。這94個可印刷字符編碼有如下兩個規律:①字符0~9這10個數字符的高3位編碼都為011,低4位為0000~1001,屏蔽掉高3位的值,低4位正好是數據0~9的二進制形式。這樣編碼的好處是既滿足正常的數值排序關系,又有利于ASCII碼與二進制碼之間的轉換。②英文字母的編碼值滿足A~Z或a~z正常的字母排序關系。另外,大小寫英文字母編碼僅是B5位值不相同,B5為1是小寫字母,這樣編碼有利于大、小寫字母之間的編碼轉換。

2.漢字的編碼計算機在處理漢字時,漢字字符也必須用基2碼編碼表示,一般漢字編碼采用兩個字節即16位二進制數。但由于漢字的特殊性,在漢字的輸入、存儲、輸出過程中所使用的漢字編碼是不一樣的,輸入時有輸入編碼,存儲時有漢字機內碼,輸出時有漢字字形編碼。1)漢字輸入編碼為了能把漢字這種象形文字通過西文標準鍵盤輸入到計算機內,就必須對漢字用鍵盤已有的字符設計編碼,這種編碼稱為漢字的輸入編碼。同一漢字有不同的輸入編碼,這取決于用戶采用哪種輸入法。不同的輸入法對同一漢字有不同的編碼方案。常見的有數字碼、音碼、形碼及混合碼。2)漢字機內碼漢字機內碼也稱漢字內部碼,簡稱內碼,它是機器存儲和處理漢字時采用的統一編碼。每個漢字的機內碼是惟一的,用兩個字節表示。為了避免與西文字符的ASCII碼之間產生二義性,漢字機內碼中兩個字節的最高位均規定為“1”。

3)漢字字形碼漢字字形碼也叫漢字字模點陣碼,是漢字輸出時的字形點陣代碼,是一串基2碼編碼。

3.邏輯數據的編碼邏輯數據是用來表示“是”與“否”,或稱“真”與“假”兩個狀態的數據。在計算機中,用“1”表示“真”或“是”,用“0”表示“假”或“否”。需要注意的是,這里的“1”和“0”沒有數值和大小概念,只有邏輯意義。對邏輯數據只能進行邏輯運算,例如,邏輯非、邏輯加、邏輯乘等基本邏輯運算和由基本邏輯運算構成的各種組合邏輯運算,運算結果仍是邏輯數據。下面介紹一下基本邏輯運算的運算規則。1)“與”運算(AND)“與”運算又稱邏輯乘,用符號·或∧表示。其運算規則為0·0=00·1=01·0=01·1=1當兩個邏輯變量取值均為1時,它們“與”的結果才為1。2)“或”運算(OR)“或”運算又稱邏輯加,用符號+或∨表示。其運算規則為0+0=00+1=11+0=11+1=1當兩個邏輯變量的取值只要一個為1,它們“或”的結果就會為1。3)“非”運算(NOT)“非”運算用符號—來表示。其運算規則為1=00=14)“異或”運算(XOR)“異或”運算用符號⊕或∨來表示。其運算規則為0⊕0=00⊕1=11⊕0=11⊕1=0當兩個邏輯變量取值不相同時,它們“異或”的結果才為1。要注意的是,一個邏輯數據用一位基2碼表示,這樣,8個邏輯數據用8位基2碼表示,這8位基2碼可存放在一個字節中。反過來說,一個32位的字就可以表示32個邏輯數據。表1-5邏輯數運算規則

下面舉例說明邏輯運算方法。例如,X=00F0H,Y=7777H,求X∧Y,X∨Y,X∨Y。其運算結果如下:X∧Y=0070H,X∨Y=77F7H,X∨Y=7787H1.3微型計算機系統組成1.3.1微型計算機硬件系統組成微型計算機主要由以下幾個部分組成:微處理器或稱中央處理單元(CPU)、內部存儲器(簡稱內存)、輸入/輸出接口(簡稱I/O接口)及系統總線。當微型計算機配備上相應的輸入/輸出設備和軟件,就構成了一套完整的微型計算機系統。一臺微型計算機硬件系統結構如圖1.1所示。在這里我們將簡單介紹微型計算機的硬件組成及各部分的基本功能,至于各部分的細節,將在本書后續章節詳細介紹。1.3.1微型計算機硬件系統組成微型計算機主要由以下幾個部分組成:微處理器或稱中央處理單元(CPU)、內部存儲器(簡稱內存)、輸入/輸出接口(簡稱I/O接口)及系統總線。當微型計算機配備上相應的輸入/輸出設備和軟件,就構成了一套完整的微型計算機系統。一臺微型計算機硬件系統結構如圖1.1所示。在這里我們將簡單介紹微型計算機的硬件組成及各部分的基本功能,至于各部分的細節,將在本書后續章節詳細介紹。圖l.1微型計算機的硬件結構

1.中央處理單元CPU

中央處理單元CPU(CentralProcessingUnit)是微型計算機的心臟,它包含了早期計算機中的運算器、控制器和其他功能部件,它是用來解釋執行指令并進行運算的部件。CPU是一塊超大規模集成電路,它集成了成千上萬的邏輯門陣列電路,這些邏輯門陣列電路組成了用于進行運算的加法器、算術邏輯單元、譯碼器、數據選擇器、觸發器、寄存器、計數器等基本運算單元。無論多么復雜的工作,都是由計算機程序來完成的,而計算機高級語言程序被一級一級地最終翻譯成機器認識的由“0”和“1”組成的二進制機器碼,這些機器碼就是由上述基本運算單元進行處理的,所以人們把計算機又稱為“電腦”,實際指的就是CPU的功能。目前生產微機CPU的最大的代表廠商是美國的Intel公司和AMD公司。早期的8086、80286、80386到近期的Pentium、Pentium-Ⅱ、Pentium-Ⅲ、Pentium-4等就是Intel公司的主導產品。在評價CPU的指標時,最主要的是看它的主頻,主頻越高,其運算速度越快;字長代表了CPU對數據處理的能力和精度;其次還要看CPU的緩存有多大,一般來講,緩存的大小也對CPU的運算速度有很大的影響;當然工作溫度也很重要,溫度涉及到CPU的工作壽命。

2.內存存儲器的主要任務是臨時或永久性保存計算機的軟件資源。存儲器分為內存儲器和外存儲器,內存儲器指內存,用于臨時性保存軟件資源,而外存儲器則包括了硬盤、軟盤、光驅、磁帶機等許多設備,用來永久性保存軟件資源。在現代微機中內存用內存條的形狀提供,在計算機主板上有一個一個的內存擴展插槽,內存條就是插在這些內存擴展槽上的,內存條現在常用的有128MB、256MB、512MB和1GB甚至更大容量。每臺計算機有多個內存擴展槽,每個內存擴展槽又可以插入不同容量的內存條,可見一臺機器的內存配置是可由用戶自己決定的。如果想提高機器的運行速度,并且資金充裕,則可以配置大的內存,反之,內存也可以配置小一點,并可以根據實際需要,隨時擴充內存。

3.系統總線目前,微型計算機硬件連接都采用總線結構。所謂總線,是指能為多個功能部件服務的一組公用通信線路。借助總線連接,計算機在各系統部件之間實現傳送地址、數據和控制信息的操作。采用總線結構有兩個優點:一是各部件可通過總線交換信息,相互之間不必直接連線,減少了傳輸線的根數,從而提高了微機的可靠性;二是在擴展微機功能時,只需把要擴展的部件連接到總線上即可,使微機功能擴展十分方便。一個微型計算機系統中的總線,大致分為三類:

(1)內部總線:CPU內部連接各寄存器及運算部件之間的總線。

(2)系統總線:CPU同計算機系統的其他高速功能部件,如存儲器、通道等互相連接的總線。

(3)?I/O總線:中、低速I/O設備之間互相連接的總線。系統總線一般由三部分組成:

(1)數據總線(DB):一般是三態邏輯控制的若干位(如8、16等)數據線寬的雙向數據總線。用以實現微處理器、存儲器及I/O接口間的數據交換。

(2)地址總線(AB):用于微處理器輸出地址,以確定存儲器單元地址及I/O接口部件地址。一般都是三態邏輯控制的若干位(如16、24等)線寬的單向傳送地址總線。

(3)控制總線(CB):控制總線用來傳送保證計算機同步和協調地定時、控制信號,使微機各部件協調動作,從而保證正確地通過數據總線傳送各項信息的操作。其中有些控制信號由微處理器向其他部件輸出,如讀寫等信號;另一些控制信號則由其他部件輸入到微處理器中,如中斷請求、復位等信號。控制總線不需用三態邏輯。

4.接口一般而言,接口泛指任何兩個系統之間的交接部分,或兩個系統間的連接部分。在計算機系統里,接口指中央處理機與外部設備之間的連接通道及有關的控制電路。微型計算機要對性能各異的外設進行操作與控制,實現彼此之間的信息交換,就必須在主機與外設之間設置一組中間部件,該部件將CPU發出的控制信號和數字信號轉換成外設所能識別的數字符號或執行的具體命令,或將外設發送給CPU的數據和狀態信息轉換成CPU所能接受的數字信息。這組位于主機和外部設備之間的緩沖電路就是接口。微機接口技術包括接口電路和相關編程技術。1.3.2微型計算機軟件系統組成

1.系統軟件起初,這種翻譯工作是程序員用手工完成的,逐漸地,人們就編一個程序讓機器來完成上述的翻譯工作,具有這樣功能的程序就稱為匯編程序(Assembler)。但是匯編語言的語句與機器指令是一一對應的,程序的語句數仍然很多,編程仍然是一件十分繁瑣、困難的工作,而且用匯編語言編寫程序必須對機器的指令系統十分熟悉,即不能脫離具體的機器,因而匯編語言的程序還不能在不同的機器上通用。為了使用戶編程更容易,程序中所用的語句與實際問題更接近,而且使用戶可以不必了解具體的機器,就能編寫程序,同時這樣的程序的通用性更強,于是就出現了各種高級語言(Highlevellanguage),例如:BASIC、FORTRAN、PASCAL、COBOL、C等。高級語言易于理解、學習和掌握;用戶用高級語言編程也就方便多了,大大減少了工作量。但是計算機在執行時,仍必須把用高級語言編寫的源程序翻譯成用機器指令表示的目標程序才能執行,這樣就需要有各種解釋程序(Interpreter),(針對BASIC)或編譯程序(Compiler)(針對FORTRAN、C、COBOL)等。

2.應用軟件用戶利用計算機以及它所提供的各種系統軟件,編制解決用戶各種實際問題的程序,這些程序、數據和資料就稱為應用軟件。應用軟件也可以逐步標準化、模塊化,逐步形成了解決各種典型問題的應用程序的組合,稱其為應用軟件包(Package)。

3.支撐(或稱為支持)軟件隨著計算機硬件和軟件的發展,計算機在信息處理、情報檢索以及各種管理系統中的應用越來越普及。計算機需要處理大量的數據,檢索和建立大量的各種表格,而且這些數據和表格應按一定規律組織起來,使得檢索更迅速,處理更方便,也更便于用戶使用,于是就建立了數據庫。為便于用戶根據需要建立自己的數據庫,查詢、顯示、修改數據庫的內容,輸出打印各種表格等,就建立了數據庫管理系統(DataBaseManagementSystem)等支撐軟件。上述都是各種形式的程序,它們存儲在各種存儲介質中,例如磁盤、磁帶、光盤等,統稱為計算機的軟件。總之,計算機的硬件建立了計算機應用的物質基礎;而各種軟件激活了計算機且擴大了計算機的功能,擴大了它的應用范圍,以便于用戶使用。硬件與軟件的結合才是一個完整的計算機系統。1.3.3微型計算機的工作過程微型計算機必須在硬件和軟件的相互配合下才能工作。每種型號的CPU都有自己的指令系統,每條指令一般都由指令操作碼(規定指令的操作類型)和操作數(規定指令的操作對象)兩部分組成。用戶根據要完成的任務預先分解成一系列的基本動作(又稱為算法)并且編好程序,再通過輸入設備(如鍵盤)將程序送入存儲器中。微型計算機開始工作后,首先將該程序在存儲器中的起始地址送入微處理器中的程序計數器(PC)中,微處理器根據PC中的地址值找到對應的存儲單元,并取出存放在其中的指令操作碼送入微處理器中的指令寄存器(IR)中,由指令譯碼器(ID)對操作碼進行譯碼,并由微操作控制電路發出相應的微操作控制脈沖序列去取出指令的剩余部分(如果指令不止1個字節的長度),同時執行指令賦予的操作功能。在取指過程中,每取出1個單元的指令,PC自動加1,形成下一個存儲單元的地址。以上為一條指令的執行過程,如此不斷重復上述過程,直至執行完最后一條指令的動作為止。綜上所述,微型計算機的基本工作過程是執行程序的過程,也就是CPU自動從程序存放的第1個存儲單元起,逐步取出指令、分析指令,并根據指令規定的操作類型和操作對象,執行指令規定的相關操作。如此周而復始,直至執行完程序的所有指令,從而實現程序的基本功能,這就是微型計算機的基本工作過程。

1.4微型計算機的性能指標及分類1.4.1微型計算機的性能指標

1.位(bit)、字節(Byte)和字長(Word)位(bit)是計算機內部數據儲存的最小單位,表示數據“1”或“0”,音譯為“比特”,習慣上用小寫字母的“b”表示。字節(Byte)是計算機中數據處理的基本單位,習慣上用大寫字母“B”表示。計算機中以字節為單位存儲和解釋信息,規定1個字節由8個二進制位構成,即1個字節等于8個比特(1Byte=8bit)。八位二進制數最小為00000000,最大為11111111;通常1個字節可以存入一個ASCII碼,2個字節可以存放一個漢字國標碼。字長(Word)是指微處理器內部一次可以并行處理二進制代碼的位數。它與微處理器內部寄存器以及CPU內部數據總線寬度是一致的,字長越長,所表示的數據精度就越高。在完成同樣精度的運算時,字長較長的微處理器比字長較短的微處理器運算速度快。大多數微處理器內部的數據總線與微處理器的外部數據引腳寬度是相同的。字長是微型機重要的性能指標,也是微型機分類的主要依據之一。如把微型機分為8位、15位、32位、64位機等。

2.存儲容量存儲容量是衡量微機內部存儲器能夠存儲二進制信息量大小的一個技術指標。內存儲器由若干個存儲單元組成,每個單元分配一個固定的地址并且存放一個字節的數據,存儲單元的地址數由CPU的地址總線條數決定,同時也確定了內存的容量大小。存儲器容量一般以字節為最基本的計量單位。一個字節記為1B,1024個字節記為1KB(千字節,KiloByte),1024KB字節記為1MB(兆字節,MegaByte),1024MB字節記為1GB(吉字節,GigaByte),而1024GB字節記為1TB(太字節,TeraByte)。

3.指令系統任

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論