《計算機組成原理》課件第3章(一)_第1頁
《計算機組成原理》課件第3章(一)_第2頁
《計算機組成原理》課件第3章(一)_第3頁
《計算機組成原理》課件第3章(一)_第4頁
《計算機組成原理》課件第3章(一)_第5頁
已閱讀5頁,還剩153頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第3章

計算機中信息的表示和數(shù)值運算本章導讀本章首先介紹數(shù)制與信息編碼的知識,具體內(nèi)容包括各種進位計數(shù)制及其相互轉(zhuǎn)換方法;BCD編碼、字符編碼、漢字編碼和校驗編碼等編碼方案與技術(shù)。本章導讀然后講述計算機中各種數(shù)值數(shù)據(jù)的表示和運算方法,具體內(nèi)容包括定點數(shù)的原碼、反碼、補碼等表示方法和移位、加減、乘除運算方法,浮點數(shù)的表示和加減、乘除運算方法。最后介紹算術(shù)邏輯單元ALU的設計原理與基本結(jié)構(gòu)情況。本章要點進位計數(shù)制及其相互轉(zhuǎn)換BCD編碼字符編碼與字符串校驗碼真值和機器數(shù)定點數(shù)的表示本章要點定點數(shù)的各種運算方法與溢出的概念浮點數(shù)的表示和加減運算IEEE754標準串行加法器和并行加法器ALU的功能和結(jié)構(gòu)3.1數(shù)制與編碼3.1.1進位計數(shù)制及其相互轉(zhuǎn)換3.1.2十進制數(shù)的編碼3.1.3字符與字符串編碼3.1.4漢字及其他信息的編碼表示3.1.5校驗碼3.1.1進位計數(shù)制及其相互轉(zhuǎn)換1、進位計數(shù)制在日常生活中,人們廣泛使用十進制數(shù),任意一個十進制數(shù)(N)10可表示為:(N)10=Dm?10m+Dm-1?10m-1+…+D1?101+D0?100+D-1?10-1+D-2?10-2+…+D-k?10-KDi可以是0~9十個數(shù)碼中的任意一個,根據(jù)Di在式中所處位置而賦以一個固定的單位值10i,稱之為權(quán)。式中的10稱為基數(shù)或“底”。任意一種進位計數(shù)制都具有基數(shù)和位權(quán)兩個重要參數(shù)。在計算機中,十進制數(shù)的存儲和運算都不太方便,于是二進制計數(shù)制應運而生。任意一個二進制數(shù)可表示為:(N)2=Dm?2m+Dm-1?2m-1+…+D1?21+D0?20+D-1?2-1+D-2?2-2+…+D-k?2-K該式中整數(shù)部分有m+1位,小數(shù)部分有k位,基數(shù)(或底)為2。二進制數(shù)(N)2按公式展開,可計算得該數(shù)的十進制表示。例如(1101.0101)2=(1?23+1?22+0?21+1?20+0?2-1+1?2-2+0?2-3+1?2-4)10=(8+4+0+1+0+0.25+0+0.0625)10=(13.3125)10對人們來說,二進制數(shù)位數(shù)較多,無論是書寫或閱讀均很不方便,為此經(jīng)常在表示計算機內(nèi)的數(shù)據(jù)時采用八進制數(shù)或十六進制數(shù)。任意一個八進制數(shù)可表示為:(N)8=Dm?8m+Dm-1?8m-1+…+D1?81+D0?80+D-1?8-1+D-2?8-2+…+D-k?8-K其中Di可為0~7八個數(shù)碼中的任意一個。任意一個十六進制數(shù)可表示為:(N)16=Dm?16m+Dm-1?16m-1+…+D1?161+D0?160+D-1?16-1+D-2?16-2+…+D-k?16-K其中Di可以是0~15共十六個數(shù)中的任一個。為書寫和辨認方便,通常用0~9和A~F分別表示十六進制數(shù)0~9和10~15。例如:(0D.5)16=(0?161+13?160+5?16-1)10=(0+13+0.3125)10=(13.3125)10表3-1二、八、十六和十進制數(shù)的對應關(guān)系二進制數(shù)八進制數(shù)十六進制數(shù)十進制數(shù)0000000100100011010001010110011110001001101010111100110111101111000102030405060710111213141516170123456789ABCDEF0123456789101112131415各進制數(shù)據(jù)在書寫表示時,除了可以給數(shù)加上括號,然后用下標表示采用的是幾進制外,還可用后綴來區(qū)分。如可在十六進制數(shù)據(jù)的后面加上“H”,如17DBH;在二進制數(shù)據(jù)的后面加上“B”,如110101B;在十進制數(shù)據(jù)后面可加上“D”,如78D,通常也可省略“D”;在八進制數(shù)據(jù)后面加上“O”(大寫字母O)或“Q”,如17Q。2、各種進位制的相互轉(zhuǎn)換(1)二進制數(shù)、八進制數(shù)和十六進制數(shù)之間的轉(zhuǎn)換八進制數(shù)和十六進制數(shù)是從二進制數(shù)演變而來的,由3位二進制數(shù)組成1位八進制數(shù),4位二進制數(shù)組成1位十六進制數(shù)。對于一個兼有整數(shù)和小數(shù)部分的數(shù),以小數(shù)點為界,對小數(shù)點前后的數(shù)位分別分組進行處理,不足的位數(shù)用0補足,對整數(shù)部分將0補在數(shù)的左側(cè),對小數(shù)部分將0補在數(shù)的右側(cè)。這樣數(shù)值不會發(fā)生差錯。假如從二進制數(shù)轉(zhuǎn)換到八進制數(shù),則以3位為1組。例如:(1101.0101)2=(001

101.010

100)2=(15.24)8假如從二進制數(shù)轉(zhuǎn)換到十六進制數(shù),則以4位為1組。例如:(11101.0101)2=(0001

1101.0101)2=(1D.5)16從八進制數(shù)或十六進制數(shù)轉(zhuǎn)換到二進制數(shù),只要按順序?qū)⒚恳晃粩?shù)寫成對應的3位或4位二進制數(shù)即可。例如:(15.37)8=(001

101.011

111)2=(1101.011111)2八進制數(shù)與十六進制數(shù)之間的轉(zhuǎn)換,可用二進制數(shù)作為中間媒介進行轉(zhuǎn)換。(2)二進制數(shù)轉(zhuǎn)換成十進制數(shù)可把二進制數(shù)寫成按權(quán)展開的形式,然后求和。(3)十進制數(shù)轉(zhuǎn)換成二進制數(shù)通常要對一個十進制數(shù)的整數(shù)部分和小數(shù)部分分別進行處理。對整數(shù)部分,一般采用除2取余數(shù)法,其運算規(guī)則如下:將十進制數(shù)除以2,所得余數(shù)(0或1)即為對應二進制數(shù)最低位的值。然后對上次所得的商除以2,所得余數(shù)即為二進制數(shù)次低位的值,如此進行下去,直到商等于0為止,最后得出的余數(shù)是所求二進制數(shù)最高位的值。對小數(shù)部分,一般用乘以2取整數(shù)法,其運算規(guī)則如下:將十進制數(shù)乘以2,所得乘積的整數(shù)部分即為對應二進制小數(shù)最高位的值,然后對所余的小數(shù)部分乘以2,所得乘積的整數(shù)部分為次高位的值,如此進行下去,直到乘積的小數(shù)部分為0,或結(jié)果已滿足所需精度要求為止。例:將(105)10轉(zhuǎn)換成二進制。例:將(0.3125)10轉(zhuǎn)換成二進制數(shù)。(要求保留4位有效位)當一個數(shù)既有整數(shù)部分又有小數(shù)部分時,分別進行轉(zhuǎn)換后再進行拼接,如(105.3125)10

,則根據(jù)前面的計算,得出:(105.3125)10=(1101001.0101)2。(4)十進制數(shù)轉(zhuǎn)換成八進制數(shù)、十六進制數(shù)參照十進制數(shù)轉(zhuǎn)換成二進制數(shù)的方法,將基數(shù)2改為8或16,采用除以基數(shù)取余和乘以基數(shù)取整的方法,即可實現(xiàn)轉(zhuǎn)換。例:將(13.3125)10轉(zhuǎn)換成八進制數(shù):3.1.2十進制數(shù)的編碼

在計算機中也常采用4位二進制碼對每個十進制數(shù)位進行編碼,這樣可加快十進制數(shù)據(jù)表示轉(zhuǎn)換為計算機能識別的二進制表示的速度。4位二進制碼有16種不同的組合,從中選出10種來表示十進制數(shù)位的0~9十個基本符號,尚余6個編碼,因此可有多種編碼方案供選擇。(1)有權(quán)碼如果表示一位十進制數(shù)的二進制碼的每一位有確定的權(quán)值,稱為有權(quán)碼。一般用8421編碼,其4個二進制碼位的權(quán)值從高到低分別為8、4、2和1。用0000,0001,……,1001分別表示0,1,……,9,每個數(shù)位內(nèi)部滿足二進制規(guī)則,而數(shù)位之間滿足十進制規(guī)則,故稱這種編碼為“以二進制編碼的十進制(簡稱BCD)碼”。在計算機內(nèi)部實現(xiàn)BCD碼算術(shù)運算時,要對運算結(jié)果進行修正,這是因為運算是按二進制規(guī)則進行的,4位二進制位符合“逢十六進一”規(guī)則,但實際的4位代表一個十進制位,應按“逢十進一”規(guī)則處理。對加法運算的修正規(guī)則是:如果兩個一位BCD碼相加之和小于或等于(1001)2,即(9)10,不需要修正;如相加之和大于或等于(10)10,要進行加6修正,并向高位進位,進位可以在首次相加或修正時產(chǎn)生。另外還有幾種有權(quán)碼,如2421,5211,4311碼,也是用4位二進制碼表示一個十進制數(shù)位,但4位二進制碼之間不符合二進制規(guī)則。這幾種有權(quán)碼都具有一特點,即任何兩個相加之和等于(9)10的二進制碼互為反碼。表3-24位有權(quán)碼十進制數(shù)8421碼2421碼5211碼4311碼01234567890000000100100011010001010110011110001001000000010010001101001011110011011110111100000001001101010111100010101100111011110000000100110100100001111011110011101111(2)無權(quán)碼如果表示一個十進制數(shù)位的二進制碼的每一位沒有確定的權(quán)值,稱為無權(quán)碼。用得較多的是余3碼(Excess-3Code)和格雷碼(GrayCode),格雷碼又稱“循環(huán)碼”。表3-34位無權(quán)碼十進制數(shù)余3碼格雷碼(1)格雷碼(2)0123456789001101000101011001111000100110101011110000000001001100100110111010101000110001000000010001100010101010110011000110011000余3碼是在8421碼基礎上,把每個編碼都加上0011而形成的,其運算規(guī)則是:當兩個余3碼相加不產(chǎn)生進位時,應從結(jié)果中減去0011;產(chǎn)生進位時,應將進位信號送入高位,本位加0011。格雷碼的編碼規(guī)則是任何兩個相鄰數(shù)的編碼只有1個二進制位不同,而其余3個二進制位相同。其優(yōu)點是從一個編碼變到下一個相鄰數(shù)編碼時,只有1位發(fā)生變化,用它構(gòu)成計數(shù)器時可得到更好的譯碼波形。3.1.3字符與字符串編碼字符在計算機內(nèi)部也要表示成二進制位串的形式,現(xiàn)在國際上使用最廣泛的字符編碼是美國國家標準委員會頒布的美國信息交換標準編碼(ASCII碼)。該編碼每個字符用7個二進制位來表示,共包括128個字符,其中95個可輸出顯示。表3-4ASCII字符編碼表

b6b5b4b3b2b1b00000010100111001011101110000NULDLESP0@P`p0001SOHDC1!1AQaq0010STXDC2“2BRbr0011ETXDC3#3CScs0100EOTDC4$4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111DELETB‘7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;K[k{1100FFFS,<L\l|1101CRGS—=M]m}1110SORS.>N^n~1111SIUS/?O-oDEL一個字符的ASCII編碼在存儲的時候用一個字節(jié),通常規(guī)定最高位為0,但有時也用最高位作奇偶校驗位。字符串是指連續(xù)的一串字符,通常情況下,它們占用主存中連續(xù)的字節(jié),每個字節(jié)存一個字符的ASCII編碼。如“12B”占用3個字節(jié),內(nèi)容為:“001100010011001001000010”3.1.4漢字及其他信息的編碼表示1、漢字的編碼表示漢字是世界上使用人數(shù)最多的文字,在計算機中對漢字也要進行二進制編碼才能處理。漢字的字數(shù)多,重音多,字形復雜,要在計算機內(nèi)進行表示處理的話牽涉到錄入、存儲表示、輸出等一系列復雜的過程。(1)漢字的輸入

1981年,我國的國家技術(shù)監(jiān)督局公布了國家標準:GB2312《信息交換用漢字編碼字符集—基本集》,收錄了常用漢字6763個,其中一級常用漢字3755個,二級常用漢字3008個。在該標準中收錄的所有漢字和符號按區(qū)位編排,共設94個區(qū),每區(qū)含94個漢字或符號。其中,一級漢字按拼音順序排列,占據(jù)16區(qū)至55區(qū);二級漢字按部首順序排列,占據(jù)56區(qū)至87區(qū);對每一個漢字來說,在該標準中都有一個區(qū)號(01~94)和一個位號(01~94),兩者合在一起就形成了漢字的區(qū)位碼。同一個漢字在不同計算機系統(tǒng)中可以是不一樣的表示,但在不同系統(tǒng)之間要交換信息時,必須采用同一標準表示。GB2312標準中提出了統(tǒng)一的規(guī)格標準,被稱為國標碼。它是在區(qū)位碼的基礎上得到的。具體做法是:把十六進制的區(qū)位碼用兩個字節(jié)表示,在兩個字節(jié)值的基礎上各加上20H就得到了國標碼。對GB2312收錄的漢字來說,都人為規(guī)定的對應了一個惟一的區(qū)位碼,我們可以按區(qū)號和位號來輸入漢字,稱為數(shù)字編碼輸入。但實際中很少采用。現(xiàn)實中常用的輸入方法有字音編碼、字形編碼或形音編碼。字音編碼是基于漢字拼音的編碼方法,具有漢語拼音能力的人很容易學會,但漢字有很多的同音字,給這種輸入方法帶來了麻煩。字形編碼是根據(jù)漢字的字形分類而給出的編碼方法。它把漢字分解成字根、部首、偏旁、筆形、筆畫等基本單位,每一種基本單位與鍵盤上的一個鍵相對應,從而構(gòu)成一個漢字的編碼,通過在標準鍵盤上按某個順序依次按鍵來實現(xiàn)輸入漢字,如五筆字形法。形音編碼法吸取字音編碼和字形編碼兩種編碼方法的優(yōu)點,使編碼規(guī)則簡單,重碼少,但也必須掌握這兩種編碼的基本知識才能使用。(2)漢字的存儲漢字在計算機內(nèi)的存儲通常采用漢字內(nèi)碼,這是漢字信息處理系統(tǒng)在計算機內(nèi)部存儲和處理漢字信息時使用的編碼。現(xiàn)在常用的方案是把兩字節(jié)國標碼的每個字節(jié)最高位的0變成1,其他7位的信息位保持不變。區(qū)位碼、國標碼和內(nèi)碼的關(guān)系可表示為:國標碼=區(qū)位碼+2020H

機內(nèi)碼=國標碼+8080H在一個處理漢字信息系統(tǒng)的計算機內(nèi)部,區(qū)分計算機內(nèi)部信息是一個ASCII編碼的字符還是漢字的編碼字符,只要判別連續(xù)的兩個字節(jié)的最高位是否為1。若為1,這連續(xù)的兩個字節(jié)構(gòu)成了一個漢字內(nèi)碼;若為0,則字節(jié)的低7位是ASCII編碼的字符。(3)漢字的輸出在計算機中的漢字內(nèi)碼不可能直接在屏幕上顯示和在打印機上輸出,要想輸出漢字的話必須要有漢字的字形筆畫信息,這就需要將漢字的內(nèi)碼轉(zhuǎn)換為漢字字形碼,或叫字模碼。計算機早期一般通過點陣表示漢字字形代碼。圖3-1漢字字形點陣及編碼字模點陣的信息量是很大的,所占存儲空間也很大,以16×16點陣為例,每個漢字就要占用32個字節(jié),兩級常用漢字大約占用256KB。因此字模點陣只能用來構(gòu)成“字庫”。字庫中存儲了每個漢字的點陣代碼,當顯示輸出時檢索字庫,輸出字模點陣,得到字形。漢字點陣的大小決定了漢字顯示時的字形質(zhì)量,通常采用的點陣有16×16,24×24,32×32或更高,點陣越大所需存儲空間也越大。后來為了進一步提高字形顯示質(zhì)量也開始采用矢量表示或輪廓曲線表示。2、其他信息的編碼表示(1)邏輯數(shù)據(jù)的表示邏輯數(shù)據(jù)的取值“1”和“0”只用來代表邏輯真或邏輯假兩個相對立面,它的每位之間沒有內(nèi)在聯(lián)系,因此可用若干位無符號的二進制數(shù)字串表示一系列邏輯數(shù)值。邏輯數(shù)據(jù)只能參加邏輯運算,包括基本的“邏輯加”、“邏輯乘”、“邏輯非”和它們的各種組合運算。其特點是參加運算的邏輯數(shù)據(jù)是在對應的兩個二進制位之間進行的,與相鄰的高位和低位的值均無關(guān)。(2)語音的計算機表示語音是人發(fā)出的一系列氣流脈沖激勵聲帶而產(chǎn)生不同頻率振動的結(jié)果,是一種模擬量,它以連續(xù)波的形式傳播。但計算機能處理的只是數(shù)字量,這就需要把語音的模擬量通過A/D設備轉(zhuǎn)換成計算機能處理的二進制組成的數(shù)字量。(3)圖形(圖像)的計算機表示在計算機技術(shù)中對圖像有不同的表示、處理和顯示方法,其中最基本的形式是位圖圖像和矢量圖像。它們也是構(gòu)成活動圖像(視頻)的基礎。位圖圖像是把圖像在二維空間上的畫面分布到矩形點陣的網(wǎng)狀結(jié)構(gòu)中,矩陣中的每個點對應一個圖像點,對每個點進行抽樣,可得到每個點的灰度值,然后把灰度值進行量化可得到用n位二進制表示的數(shù)值。這樣經(jīng)過抽樣和量化后,一幅圖像就轉(zhuǎn)化成由一個個離散點的二進制數(shù)組成的數(shù)字信息。而對矢量圖像是對圖像依據(jù)某種標準進行分析、分解,提取出了具有一定意義的獨立信息單位——圖元,如一段直線、一個圓、一個符號等。然后用一系列的指令描述一個個的圖元及各圖元之間的聯(lián)系,于是一幅原始圖像以一組有序的指令形式存入計算機。3.1.5校驗碼計算機系統(tǒng)中的各種信息、數(shù)據(jù),都以二進制位串的形式存在,在計算機中進行讀寫、存取和傳送的過程中都可能產(chǎn)生錯誤。為了減少和避免這些錯誤,一方面要精心設計以提高硬件電路的可靠性;另一方面是在數(shù)據(jù)編碼上找出路。即采用某種編碼法,通過少量的附加位,使之能夠發(fā)現(xiàn)某些錯誤,甚至能確定出錯位置,進而具有自動改錯的能力。數(shù)據(jù)校驗碼是一種常用的帶有發(fā)現(xiàn)某些錯誤或自動改錯能力的數(shù)據(jù)編碼方法。它的實現(xiàn)原理是加入一些冗余碼,使合法數(shù)據(jù)編碼出現(xiàn)某些錯誤時,就成為非法編碼。這樣,就可以通過檢測編碼的合法性來達到發(fā)現(xiàn)錯誤的目的。合理地安排非法編碼的數(shù)量和編碼規(guī)則,就可以提高發(fā)現(xiàn)錯誤的能力,或達到自動改正錯誤的目的。(1)奇偶校驗碼奇偶校驗碼是一種開銷最小,能發(fā)現(xiàn)數(shù)據(jù)代碼中一位出錯情況的編碼,它的實現(xiàn)原理是考慮到數(shù)據(jù)中“1”的個數(shù)具有一定的奇、偶關(guān)系,當某位數(shù)據(jù)改變時同時也會改變這種奇、偶關(guān)系。它的實現(xiàn)方法通常是為一個字節(jié)補充一個二進制校驗位,用設置校驗位的值為“0”或“1”,使字節(jié)的8位和該校驗位含有“1”的個數(shù)為奇數(shù)或偶數(shù)個。在使用奇數(shù)個1的方案進行校驗時,稱為奇校驗;反之,則稱為偶校驗。當存放該字節(jié)時,由專設的線路形成校驗位的值,然后這9位一起被寫入到存儲器中。當下一次讀出這一代碼時,再用相應線路檢測讀出的9位碼的合法性。若在存放或讀的過程中出現(xiàn)某一個二進制位上的錯誤,得到的9位碼就變成非法編碼,從而發(fā)現(xiàn)錯誤。其形成校驗位和檢測的電路可用異或門來實現(xiàn)。表3-5奇偶校驗編碼表數(shù)據(jù)奇校驗編碼偶校驗編碼000000001000000000000000000101010000101010010101010001111111001111111101111111這種方案只能發(fā)現(xiàn)一位錯或奇數(shù)個位錯,但不能確定是哪一位錯,也不能發(fā)現(xiàn)偶數(shù)個位錯??紤]到一位出錯的幾率比多位同時出錯的幾率高得多,并且該方案附加硬件最少,所以還是有很好的使用價值。(2)海明校驗碼海明碼是由RichardHamming于1950年提出的一種編碼方案,它的實現(xiàn)原理,是在數(shù)據(jù)中加入幾個校驗位,并把數(shù)據(jù)的每一個二進制位分配在幾個奇偶校驗組中。當某一位出錯后,就會引起有關(guān)的幾個校驗組的值發(fā)生變化,這不但可以發(fā)現(xiàn)出錯,還能指出是哪一位出錯,為自動糾錯提供了依據(jù)。假設加入的校驗位的個數(shù)為r個,則它能表示2r個信息,用其中的一個信息指出“沒有錯誤”,則其余的2r-1個信息用于指出錯誤發(fā)生在哪一位??紤]到錯誤也可能發(fā)生在校驗位,因此只有k=2r-1-r個信息能用于糾正被傳送數(shù)據(jù)的位數(shù),也就是說要滿足關(guān)系:2r≥k+r+1按此關(guān)系設計的校驗碼能檢測與自動糾正一位錯誤,如果要檢測兩位錯,則可再增加一個總校驗位,對前面所設計編碼進行整體的奇偶校驗,此時校驗位和數(shù)據(jù)位的關(guān)系可表示成:2r-1≥k+r按此關(guān)系,可計算出數(shù)據(jù)位k與需要的校驗位r的位數(shù)關(guān)系,如表3-6所示。數(shù)據(jù)位k校驗位r44851663276481289表3-6數(shù)據(jù)碼長度與校驗碼長度的關(guān)系首先r位校驗位分別要插在k+r位代碼的第1、2、4……2n位上(設k+r位代碼的順序為從右到左:1、2、3、……k+r),其余各位按從低到高逐位插入數(shù)據(jù)位。其次海明碼的每一位碼Hi(包括數(shù)據(jù)位和校驗位本身)由多個校驗位校驗,其關(guān)系是被校驗的每一位位號要等于校驗它的各校驗位的位號之和。按上述規(guī)律我們來看一個字節(jié)的海明編碼。一個字節(jié)由8個二進制位,所以可以求出需要的校驗位位數(shù)是5,海明碼總位數(shù)為13,可表示成:H13H12……H3H2H1。5個校驗位P5~P1對應的位號應分別為13、8、4、2、1(最高位就是13,所以P5只能放13上),這時編碼有如下排列關(guān)系:P5D8D7D6D5P4D4D3D2P3D1P2P1每個海明碼的位號,要等于參與校驗它的幾個校驗位的位號之和,可得到如表3-7所示的結(jié)果。海明碼位號數(shù)據(jù)位/校驗位參與校驗的校驗位位號位號間的關(guān)系H1H2H3H4H5H6H7H8H9H10H11H12H13P1P2D1P3D2D3D4P4D5D6D7D8P5121、241、42、41、2、481、82、81、2、84、8131=12=23=1+24=45=1+46=2+47=1+2+48=89=1+810=2+811=1+2+812=4+813=13表3-7海明碼位號與校驗碼位號的關(guān)系從表中,可進一步查出每一個校驗位都要校驗那些數(shù)據(jù)位,如P1參與對數(shù)據(jù)位D1、D2、D4、D5和D7位的校驗。對P5來說它是要實現(xiàn)對兩位錯的校驗,所以它對前面各位都進行校驗。找出每個校驗位的對應分組后,可在每組內(nèi)實行奇偶檢驗,由數(shù)據(jù)位的值確定出校驗位應該的取值。如每組按偶校驗來處理,則可按如下運算關(guān)系得到校驗位的取值:P1=D1⊕D2⊕D4⊕D5⊕D7P2=D1⊕D3⊕D4⊕D6⊕D7P3=D2⊕D3⊕D4⊕D8P4=D5⊕D6⊕D7⊕D8P5=D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8⊕P1⊕P2⊕P3⊕P4經(jīng)這樣安排后,每一個數(shù)據(jù)位都至少出現(xiàn)在3個Pi形成的分組關(guān)系中。當任一位數(shù)據(jù)碼發(fā)生變化時,必將引起3個或4個Pi校驗組的校驗值跟著變化。在需要對存儲內(nèi)容進行校驗檢查時,可以按如下運算關(guān)系生成每組的校驗結(jié)果值:S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7S3=P3⊕D2⊕D3⊕D4⊕D8S4=P4⊕D5⊕D6⊕D7⊕D8S5=P5⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8⊕P1⊕P2⊕P3⊕P4可以看到,如果數(shù)據(jù)位和校驗位都沒有發(fā)生錯誤,則S5S4S3S2S1=00000;如果S5=0,而S4~S1不全為0,則可確定是2位錯;如果S5=1,且S4~S1不全為0,則可確定是1位錯。此時根據(jù)S4~S1的具體取值可判定出錯是在哪一位上,進而可以糾正(對該位取反即糾正)。如S4~S1為1010,則是D6位出錯,為0011,則是D1位出錯,其余取值情況下對應的出錯位請讀者自己分析。(3)循環(huán)冗余校驗碼對于串行傳送或處理的信息位,通常采用循環(huán)冗余校驗碼(CRC)來發(fā)現(xiàn)并糾正錯誤。CRC碼是基于模2運算而建立編碼規(guī)律的校驗碼。模2運算的特點是不考慮進位和借位,其加減運算規(guī)律與異或類似。即:0±1=1,0±0=01±0=1,1±1=0其乘除運算的規(guī)則是在通過加減求部分積和部分余數(shù)的時候按模2加減即可。對CRC進行編碼時,設待編碼的信息為n位,表示成Dn-1Dn-2……D1D0,它也可用多項式來表示,即:M(x)=Dn-1Xn-1+Dn-2Xn-2+……+D1X1+D0X0將信息碼左移r位,后面補r個0,可得到n+r位的信息碼,它可表示為M(x)*Xr,后面空出的r位就是用來拼接校驗位的。CRC碼是用多項式M(x)*Xr除以一個稱為生成多項式的G(x)所得的余數(shù)作為校驗碼的。為了得到r位的余數(shù)(校驗位),G(x)必須是r+1位。設所得余數(shù)為R(x),商為Q(x),則有:M(x)*Xr=G(x)*Q(x)+R(x)將余數(shù)拼接在左移了r位后的信息后面,就構(gòu)成了這個有效信息的CRC碼。這個編碼可用多項式表示為:M(x)*Xr+R(x)此時有:M(x)*Xr+R(x)=[G(x)*Q(x)+R(x)]+R(x)=[G(x)*Q(x)]+[R(x)+R(x)]=G(x)*Q(x)(模2加)因此,所得CRC碼是一個可被生成多項式G(x)除盡的數(shù)碼。如果CRC碼在傳輸過程中不出錯,則除以G(x)時其余數(shù)必為0;如果傳輸過程中出錯,則除以G(x)時余數(shù)不為0,此時編碼得當,出錯位不同會得到不同的余數(shù),從而由余數(shù)指出了哪一位出錯,即可糾正之。例:對4位信息碼(1100)求CRC編碼,采用生成多項式為G(x)=1011。信息碼左移3位得到(1100000)。模2除以生成多項式1011,余數(shù)為010。有效信息的CRC編碼為1100010。生成的編碼可稱之為(7,4)碼。在校驗檢查時,將收到的循環(huán)校驗碼用約定的生成多項式去除,如果無錯,則余數(shù)應為0,如果某一位出錯,則余數(shù)不為0。不同的位出錯其余數(shù)也不同,表3-8列出了對應于G(x)=1011的出錯模式。表3-8對應1011生成多項式的(7,4)碼出錯模式序號N1N2N3N4N5N6N7余數(shù)出錯位正確1100010000無錯誤11000110017110000001061100110100511010100114111001011031000010111201000101011可以證明,更換不同的待測信息,余數(shù)和出錯位的對應關(guān)系不變,只與碼制和生成多項式有關(guān)。同時,如果循環(huán)碼有一位出錯,用G(x)作模2除將得到一個不為0的余數(shù),如果對余數(shù)補0繼續(xù)除下去,將發(fā)現(xiàn)各次所得余數(shù)將按表3-8順序循環(huán)。這就是循環(huán)碼的名稱由來。這個特點正好用來糾錯,即當出現(xiàn)不為零的余數(shù)后,一方面對余數(shù)補0繼續(xù)作模2除,另一方面將被檢查的校驗碼字循環(huán)左移。當出現(xiàn)余數(shù)為101時,出錯位也移到了N1位。可通過異或門將它糾正后在下一次移位時送回N7。這樣當移滿一個循環(huán)后,就得到了一個糾正后的碼字。3.2數(shù)值數(shù)據(jù)的表示3.2.1真值和機器數(shù)3.2.2無符號數(shù)和有符號數(shù)3.2.3定點表示和浮點表示3.2.4IEEE754標準3.2.1真值和機器數(shù)輸入計算機內(nèi)部的數(shù)據(jù)若有確定的值,即在數(shù)軸上能找到其對應的點,則稱為數(shù)值數(shù)據(jù)。也就是說,數(shù)值數(shù)據(jù)是表示數(shù)量多少和數(shù)值大小的數(shù)據(jù)。日常生活中,常使用帶正、負符號的十進制數(shù)表示數(shù)值數(shù)據(jù),例如5.62,-135等。但這種形式的數(shù)據(jù)在計算機內(nèi)部難以直接存儲、運算和傳輸,一般是用在輸入到計算機內(nèi)部之前,或從計算機內(nèi)部輸出到輸出設備時,用來表示數(shù)值數(shù)據(jù)。我們把這樣的數(shù)值數(shù)據(jù)輸入到計算機內(nèi)部的時候,需要考慮符號和數(shù)值兩部分。其數(shù)值部分可以用二進制0和1表示,而符號也只有正、負兩種情況,因此,可以考慮用具有兩個穩(wěn)定狀態(tài)的物理器件來表示。這樣符號就可看成和數(shù)值部分一樣,其取值也是0和1。這種處理稱為符號數(shù)字化,一般規(guī)定0表示正號,1表示負號。

為了使數(shù)字化了的符號和數(shù)值部分一起參加運算處理而得到正確結(jié)果,產(chǎn)生了把符號位和數(shù)值部分一起進行編碼的各種方法。通常將數(shù)值數(shù)據(jù)在計算機內(nèi)部編碼表示的數(shù)稱為機器數(shù),而機器數(shù)真正的值(即原來帶有正、負號的數(shù))稱為機器數(shù)的真值。假設機器數(shù)X的真值為:

XT=±X`n-1X`n-2……X`1X`0數(shù)字化編碼后的機器數(shù)X表示為:

X=XnXn-1Xn-2……X1X0

(第一位Xn是符號位表示)那么,研究數(shù)值數(shù)據(jù)在計算機內(nèi)部的編碼問題,就是解決機器數(shù)X中的各位Xi的取值與真值XT的各位的關(guān)系問題。3.2.2無符號數(shù)和有符號數(shù)在計算機中參與運算的數(shù)有兩大類:無符號數(shù)和有符號數(shù)。無符號數(shù)的每一位都用來代表數(shù)值,沒有符號的含義,可用來表示非負數(shù)據(jù),無符號數(shù)的機器碼表示通常就是一般的二進制數(shù)形式,按照二進制規(guī)則可很容易算出對應的十進制數(shù)值大小。有符號數(shù)帶有正/負符號,有符號數(shù)的處理通常是直接用一個二進制位來代表符號含義并放在最高位,低位部分用來表示數(shù)值含義。按照符號的表示形式和數(shù)值位的表示形式的不同,有符號數(shù)的機器數(shù)編碼可分為原碼、反碼、補碼和移碼等幾種。下面以小數(shù)為例來討論這幾種帶符號數(shù)的機器數(shù)形式,表示格式為符號位放在最左邊,小數(shù)點置于符號位與數(shù)值位之間,數(shù)的真值用X表示。1、原碼表示法原碼是機器數(shù)中最簡單的一種表示形式,其符號位用0表示正號,用1表示負號,放在最高位,數(shù)值位跟隨其后,用真值的絕對值的二進制表示。所以原碼也稱為帶符號的絕對值表示。小數(shù)原碼的定義:即:[X]原=符號位+|X|[X]原=X0≤X<11-X=1+|X|-1<X≤0例:X=+0.1011[X]原=01011X=-0.1011[X]原=11011由于小數(shù)點位置已默認在符號位之后,書寫時可以將其省略。零的原碼也有兩種表示形式:

[+0]原=00000[-0]原=100002、補碼表示法小數(shù)補碼的定義為:即:[X]補=2?符號位+X(mod2)例:X=+0.1011,則[X]補=01011X=-0.1011,則[X]補=2+X=2+(-0.1011)=10101[X]補=X0≤X<12+X=2-|X|-1≤X<0對于負數(shù),根據(jù)定義,需要做一次減法才能得到補碼,如果這樣求補碼會比較麻煩,實際上,求負數(shù)的補碼可以有一種比較簡單的方法:先求出該負數(shù)的原碼形式,保持符號位不變(為1),將其數(shù)值位各位取反,然后在最末位加上“1”。數(shù)值零的補碼表示形式是惟一的,即:

[+0]補=[-0]補=00000根據(jù)小數(shù)補碼定義,X=-1時,

[X]補=2+X=10.0000-1.0000=1.0000可見,-1本不屬于小數(shù)范圍,但卻有[-1]補存在,這是由于補碼中零的形式只有一種,故它能比原碼多表示一個非0的數(shù)值。當補碼加法運算的結(jié)果不超出機器范圍時,可得到以下重要結(jié)論:①、用補碼表示的兩數(shù)進行加法運算,其結(jié)果仍為補碼。②、[X+Y]補=[X]補+[Y]補③、符號位與數(shù)值位一樣參與運算。而對于減法運算:

[X-Y]補=[X+(-Y)]補=[X]補+[-Y]補3、反碼表示法反碼通常用來作為由原碼求補碼或由補碼求原碼的中間過渡。小數(shù)反碼的定義為:[X]反=X0≤X<1(2-2-n)+X-1<X≤0例:X=+0.1011(n=4),則[X]反=01011X=-0.1011(n=4),則[X]反=2-2-4+X=2-2-4+(-0.1011)=10100反碼零有兩種表示形式:

[+0]反=00000[-0]反=11111實際上,反碼也可看作是mod(2-2-n)的補碼。與模2補碼相比,僅在末位差1,因此有些書上稱小數(shù)的反碼為1的補碼。反碼在運算時,要考慮修正,即在最高位有進位時,要舍去此進位,同時在最低位加1,多進行了一次加法運算,增加了復雜性,因此在實際機器中很少采用。對上面的三種編碼,可歸納出具有如下特點:(1)最高位都作為符號位。(2)如果真值為正,則原碼、補碼和反碼的表示形式都相同,符號位都為0,且數(shù)值部分與真值相同。(3)如果真值為負,則原碼、補碼和反碼的表示形式各不相同,但是符號位都為1,且數(shù)值部分的關(guān)系為:原碼數(shù)值部分與真值相同,補碼數(shù)值部分為原碼的取反加1,反碼數(shù)值部分為原碼的每位取反。由上述特點,可看出對同一數(shù)據(jù)在幾種機器數(shù)編碼表示間的轉(zhuǎn)換關(guān)系:(1)當數(shù)據(jù)為正數(shù)時:轉(zhuǎn)換方法:符號位、數(shù)值位都保持不變,即:[X]原=[X]補=[X]反。(2)當數(shù)據(jù)為負數(shù)時:原碼與反碼間轉(zhuǎn)換方法:符號位保持不變,數(shù)值位按位取反。原碼與補碼間轉(zhuǎn)換方法:符號位保持不變,數(shù)值位按位取反后末位加1。反碼與補碼間轉(zhuǎn)換方法:符號位保持不變,數(shù)值位在末位加1或減1。在計算機中,當用串行電路將負數(shù)原碼轉(zhuǎn)換成補碼形式時(或反之),也經(jīng)常采用以下方法:自低位開始轉(zhuǎn)換,從低位向高位,在遇到第1個“1”之前,保持各位的“0”不變,第1個“1”也不變,以后的各位按位取反,最后保持符號位不變。例:設機器數(shù)字長8位,對于整數(shù),當其代表無符號數(shù)時對應的真值范圍為多少?分別代表原碼、補碼和反碼時(其中有一位符號位),對應的真值范圍又各為多少?二進制代碼無符號數(shù)對應的真值原碼對應的真值補碼對應的真值反碼對應的真值000000000000000100000010

┇0111111001111111100000001000000110000010

┇111111011111111011111111012┇126127128129130┇253254255+0+1+2┇+126+127-0-1-2┇-125-126-127+0+1+2┇+126+127-128-127-126┇-3-2-1+0+1+2┇+126+127-127-126-125┇-2-1-0表3-98位二進制代碼與真值的關(guān)系4、移碼表示法當真值用補碼表示時,由于符號位和數(shù)值部分一起編碼,與習慣上的表示法不同,因此人們很難從補碼的二進制表示形式上直接判斷其真值的大小。為了方便的從數(shù)據(jù)機器數(shù)的二進制表示形式上看出數(shù)據(jù)真值的大小,在有些計算機中引入了移碼表示,通常用來表示整數(shù)數(shù)據(jù),它的定義如下:

[X]移=2n+X(2n>X≥-2n)式中X為真值,n為整數(shù)的位數(shù),即數(shù)值位個數(shù)。其實移碼就是在真值上加一個常數(shù)2n。在數(shù)軸上移碼所表示的范圍恰好對應于真值在數(shù)軸上的范圍向軸的正方向移動2n個單元。如圖3-2所示,這就是移碼名字的由來。其中2n可稱為偏移量。圖3-2移碼在數(shù)組上的表示由移碼的定義可見,當n=4時,其最小的真值為X=-24=-10000,則[-1000]移=24+X=10000-10000=00000,即最小真值的移碼為全0,這符合人們的習慣。利用移碼的這一特點,可以很方便的對兩個移碼數(shù)比較它們真值的大小。進一步觀察發(fā)現(xiàn),同一個真值的移碼和補碼之間僅差一個符號位,若將補碼的符號位由“0”改為“1”,或由“1”改為“0”,即得該真值的移碼。表3-10真值、補碼和移碼對照表真值X[X]補[X]移[X]移對應的十進制整數(shù)-100000-11111-11110┇-00001±00000+00001+00010┇+11110+11111100000100001100010┇111111000000000001000010┇011110011111000000000001000010┇011111100000100001100010┇111110111111012┇31323334┇62633.2.3定點表示和浮點表示在計算機中的數(shù)據(jù)有定點數(shù)和浮點數(shù)兩種表示方式。在這兩種方式中,小數(shù)點都不用專門的器件表示,而是按約定的方式標出。1、定點表示定點表示的數(shù)據(jù)把小數(shù)點固定在某個位置上,一般有兩種格式。如圖3-3所示。當小數(shù)點位于數(shù)符和第一數(shù)值位之間時,表示的為純小數(shù);當小數(shù)點位于數(shù)值位之后時,表示的為純整數(shù)。即我們前面所討論的數(shù)據(jù)。圖3-3定點數(shù)表示格式采用定點數(shù)表示數(shù)據(jù)的機器叫做定點機。數(shù)值部分的位數(shù)n決定了定點機中數(shù)據(jù)的表示范圍。若機器數(shù)采用原碼,小數(shù)定點機中數(shù)的表示范圍是-(1-2-n)~(1-2-n),整數(shù)定點機中數(shù)的表示范圍是-(2n-1)~(2n-1)。若機器數(shù)采用補碼,小數(shù)定點機中數(shù)的表示范圍是-1~(1-2-n),整數(shù)定點機中數(shù)的表示范圍是-2n~(2n-1)。2、浮點表示浮點數(shù)是指小數(shù)點位置可在數(shù)值位之間浮動的數(shù)據(jù),比如:12.34、1345.789。它們的小數(shù)點在數(shù)值位中的相對位置不是固定不變的。根據(jù)十進制數(shù)的表示中被人們常用的科學計數(shù)法可得到計算機中浮點數(shù)的表示:N=M×RE其中M稱為尾數(shù),可以是一個帶符號的純小數(shù),由它來確定浮點數(shù)的符號以及精度。所以尾數(shù)的數(shù)碼位越長,浮點數(shù)的精度(數(shù)據(jù)精度是指一個數(shù)的有效位數(shù))就越高。R稱為基數(shù),也叫階碼的底。在計算機中,基數(shù)可以取2、4、8或者16,它在計算機中通常是一個默認的固定值,不用明確表示出來。E為階碼,是一個帶符號的純整數(shù),由它來確定尾數(shù)的小數(shù)點的位置。階碼為正,尾數(shù)小數(shù)點向右移,浮點數(shù)增大;階碼為負,尾數(shù)的小數(shù)點向左移,浮點數(shù)減少。顯然,階碼位數(shù)越多,所能表示的浮點數(shù)的范圍(數(shù)值范圍是指機器所能表示的一個數(shù)的最大值和最小值之間的范圍)也就越大。按此表示,就可把一個浮點數(shù)轉(zhuǎn)換成階碼和尾數(shù)兩個定點數(shù)的形式。一個尾數(shù)為m+1位,階碼為p+1位(階碼和尾數(shù)各包括一個符號位)的二進制浮點數(shù)可以表示成如圖3-4所示。圖3-4浮點數(shù)格式浮點數(shù)的表示范圍里常常把“0”去掉。表示正數(shù)和負數(shù)兩個范圍。在機器字長一定的情況下,階碼越長,它所能表示的浮點數(shù)的范圍也就越大,但階碼加長之后,尾數(shù)必然會縮短,那浮點數(shù)的精度就會隨之降低,所以浮點數(shù)格式的設定中要合理考慮階碼與尾數(shù)的位數(shù)分配。另外,對于尾數(shù)和階碼還牽涉到用什么機器碼來表示的問題,通常尾數(shù)可用原碼或補碼表示,而階碼可用原碼、補碼或移碼表示。在浮點數(shù)實際階碼大于階碼位所能表示的最大值時,機器會停止運算,進行中斷溢出處理,這種情況稱為“上溢”;當浮點數(shù)實際階碼小于階碼位所能表示的最小值時,稱為“下溢”。對下溢來說,實際數(shù)據(jù)的絕對值非常小,此時通常可將尾數(shù)各位強行置為0,按0來繼續(xù)處理,這種0值稱為機器零。由于浮點數(shù)的精度是由尾數(shù)的位數(shù)來確定的,所以通??傁M斜M可能長的尾數(shù)。但實際上在尾數(shù)的小數(shù)點后經(jīng)常有許多位為“0”,這樣盡管尾數(shù)位數(shù)較多,尾數(shù)的有效位也會縮短,為了提高浮點數(shù)的精度,可以用規(guī)格化數(shù)表示尾數(shù)。當尾數(shù)不是規(guī)格化數(shù)時,可以通過修改階碼并同時對尾數(shù)左右移位的辦法使其變成規(guī)格化數(shù),這個過程稱為尾數(shù)的規(guī)格化。當基數(shù)為2時,規(guī)格化尾數(shù)的絕對值要大于等于1/2,即尾數(shù)最高位為1。在規(guī)格化時,尾數(shù)左移一位,階碼減1(這種規(guī)格化稱為向左規(guī)格化,簡稱左規(guī));尾數(shù)右移一位,階碼加1(這種規(guī)格化稱為向右規(guī)格化,簡稱右規(guī))?,F(xiàn)實生活中我們常說對小數(shù)點左右移位,但在計算機中數(shù)據(jù)的表示只表示出了數(shù)值位,所以要考慮對尾數(shù)數(shù)值位左右移位。當基數(shù)為4時,規(guī)格化尾數(shù)的絕對值要大于等于1/4,即尾數(shù)最高兩位不全為0。規(guī)格化時,尾數(shù)左移兩位,階碼減1;尾數(shù)右移兩位,階碼加1。當基數(shù)為8時,規(guī)格化尾數(shù)的絕對值要大于等于1/8,即尾數(shù)最高三位不全為0。在規(guī)格化時,尾數(shù)左移三位,階碼減1;尾數(shù)右移三位,階碼加1。在浮點機中基數(shù)一旦被確定之后就不再改變,并且基數(shù)是隱含的,所以對于不同的基數(shù)的浮點數(shù)的表示形式是相同的。但是基數(shù)不同,對數(shù)的表示范圍和精度等都受影響。一般來說,基數(shù)R越大,可表示的浮點數(shù)范圍越寬,而且所表示的數(shù)的個數(shù)越多。但R越大,浮點數(shù)的精度反而下降。最后,對定點數(shù)和浮點數(shù)可作出比較如下:(1)當浮點數(shù)和定點數(shù)的位數(shù)相同時,浮點數(shù)的表示范圍要比定點數(shù)的范圍大得多。(2)當浮點數(shù)表示為規(guī)格化數(shù)時,其精度也要比定點數(shù)高。(3)浮點數(shù)分成了階碼和尾數(shù)兩個部分,二者都要參與運算,且運算結(jié)果要規(guī)格化。比起定點運算,浮點運算的步驟更復雜,運算的速度也慢。(4)浮點數(shù)是通過對規(guī)格化數(shù)的階碼的判斷來決定是否溢出的,而定點數(shù)是對其本身進行判斷。如小數(shù)定點機中的數(shù)其絕對值必須小于1,否則即是溢出,此時要求機器停止運算,進行處理。而浮點數(shù)的表示范圍遠比定點數(shù)大,僅當“上溢”時機器才停止運算。總之,浮點數(shù)在數(shù)的表示范圍、運算精度、溢出處理和程序編程方面均優(yōu)于定點數(shù)。但在運算規(guī)則、運算速度及硬件成本等方面又不如定點數(shù)。因此,究竟選用定點數(shù)還是浮點數(shù),應根據(jù)具體應用綜合考慮。不過,現(xiàn)代的計算機通常是同時采用定點數(shù)和浮點數(shù)。例:將十進制數(shù)+13/128寫成二進制定點數(shù)和浮點數(shù)(字長取16位,浮點表示時,數(shù)值部分取10位,階碼部分取4位,階符和數(shù)符各取1位),分別寫出它在定點機和浮點機中的機器數(shù)形式。例:將十進制數(shù)-54表示成二進制

溫馨提示

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

最新文檔

評論

0/150

提交評論