第二章數(shù)據(jù)的機(jī)器級(jí)表示與處理數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù)的_第1頁
第二章數(shù)據(jù)的機(jī)器級(jí)表示與處理數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù)的_第2頁
第二章數(shù)據(jù)的機(jī)器級(jí)表示與處理數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù)的_第3頁
第二章數(shù)據(jù)的機(jī)器級(jí)表示與處理數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù)的_第4頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第二章第二章 數(shù)據(jù)的機(jī)器級(jí)表示與處理數(shù)據(jù)的機(jī)器級(jí)表示與處理數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù)的表示數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)的運(yùn)算數(shù)據(jù)的表示和運(yùn)算數(shù)據(jù)的表示和運(yùn)算主要教學(xué)目標(biāo)主要教學(xué)目標(biāo) 掌握計(jì)算機(jī)內(nèi)部各種數(shù)據(jù)的編碼表示及其運(yùn)算方法 了解高級(jí)語言程序中的各種類型變量對(duì)應(yīng)的表示形式 在高級(jí)語言程序中的變量、機(jī)器數(shù)和底層硬件(寄存器、加法器、ALU等)之間建立關(guān)聯(lián) 綜合運(yùn)用所學(xué)知識(shí),分析高級(jí)語言和機(jī)器級(jí)語言程序設(shè)計(jì)中遇到的各種與數(shù)據(jù)表示和運(yùn)算相關(guān)的問題,解釋相應(yīng)的執(zhí)行結(jié)果C語言參考網(wǎng)站:http:/ 第一講:數(shù)值數(shù)據(jù)的表示 定點(diǎn)數(shù)的編碼表示、整數(shù)的表示、無符號(hào)整數(shù)、帶符號(hào)整數(shù)、浮點(diǎn)數(shù)的表示 C語言程序的整數(shù)類型和浮點(diǎn)數(shù)

2、類型 第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存儲(chǔ) 邏輯值、西文字符、漢字字符 數(shù)據(jù)寬度單位、大端/小端、對(duì)齊存放 第三講:數(shù)據(jù)的運(yùn)算 按位運(yùn)算邏輯運(yùn)算移位運(yùn)算 位擴(kuò)展和位截?cái)噙\(yùn)算 無符號(hào)和帶符號(hào)整數(shù)的加減運(yùn)算 無符號(hào)和帶符號(hào)整數(shù)的乘除運(yùn)算 變量與常數(shù)之間的乘除運(yùn)算 浮點(diǎn)數(shù)的加減乘除運(yùn)算圍繞C語言中的運(yùn)算,解釋其在底層機(jī)器級(jí)的實(shí)現(xiàn)從C程序的表達(dá)式出發(fā),用機(jī)器數(shù)在電路中的執(zhí)行來解釋表達(dá)式的執(zhí)行結(jié)果課程內(nèi)容概要課程內(nèi)容概要/*-sum.c-*/int sum(int a , unsigned len)int i,sum = 0;for (i = 0; i = len1; i+) sum += ai;ret

3、urn sum;/*-main.c-*/int main()int a1=100;int sum; sum=sum(a,0); printf(“%d”,sum);數(shù)據(jù)的表示數(shù)據(jù)的運(yùn)算如果程序處理的是圖像、視頻、聲音、文字等數(shù)據(jù),那么,(1)如何獲得這些數(shù)據(jù)?(2)如何表示這些數(shù)據(jù)?(3)如何處理這些數(shù)據(jù)?“轉(zhuǎn)換轉(zhuǎn)換”的概念在數(shù)據(jù)表示中的反映的概念在數(shù)據(jù)表示中的反映具體實(shí)現(xiàn)抽象概括感覺媒體信息樹、鏈表等結(jié)構(gòu)化數(shù)據(jù)描述int, float, array, struct等類型指令指定寄存器或內(nèi)存中數(shù)據(jù)ALU中運(yùn)算或總線上傳輸?shù)臄?shù)據(jù)邏輯門位信息問題(應(yīng)用) 算法程序(語言)指令集體系結(jié)構(gòu)(ISA)微體

4、系結(jié)構(gòu)電路器件(晶體管)各類數(shù)據(jù)之間的轉(zhuǎn)換關(guān)系對(duì)連續(xù)信息采樣,以使信息離散化對(duì)離散樣本用0和1進(jìn)行編碼定點(diǎn)運(yùn)算指令浮點(diǎn)運(yùn)算指令邏輯、位操作或字符處理指令數(shù)值數(shù)據(jù)的表示數(shù)值數(shù)據(jù)的表示 數(shù)值數(shù)據(jù)表示的三要素進(jìn)位記數(shù)制定、浮點(diǎn)表示如何用二進(jìn)制編碼即:要確定一個(gè)數(shù)值數(shù)據(jù)的值必須先確定這三個(gè)要素。例如,機(jī)器數(shù) 01011001的值是多少? 進(jìn)位記數(shù)制十進(jìn)制、二進(jìn)制、十六進(jìn)制、八進(jìn)制數(shù)及其相互轉(zhuǎn)換 定/浮點(diǎn)表示(解決小數(shù)點(diǎn)問題)定點(diǎn)整數(shù)、定點(diǎn)小數(shù)浮點(diǎn)數(shù)(可用一個(gè)定點(diǎn)小數(shù)和一個(gè)定點(diǎn)整數(shù)來表示) 定點(diǎn)數(shù)的編碼(解決正負(fù)號(hào)問題)原碼、補(bǔ)碼、反碼、移碼 (反碼很少用)答案是:不知道!答案是:不知道! Sign a

5、nd Magnitude (原碼的表示)(原碼的表示)BinaryDecimal0123456700000001001000110100010101100111u 容易理解容易理解, , 但是:但是: 0 0 的表示不唯一,故不利于程序員編程的表示不唯一,故不利于程序員編程 加、減運(yùn)算方式不統(tǒng)一加、減運(yùn)算方式不統(tǒng)一 需額外對(duì)符號(hào)位進(jìn)行處理,故不利于硬件設(shè)計(jì)需額外對(duì)符號(hào)位進(jìn)行處理,故不利于硬件設(shè)計(jì) 特別當(dāng)特別當(dāng) ab ab時(shí),實(shí)現(xiàn)時(shí),實(shí)現(xiàn) a-b a-b比較困難比較困難從從 5050年代開始,整數(shù)都采用補(bǔ)碼來表示年代開始,整數(shù)都采用補(bǔ)碼來表示但浮點(diǎn)數(shù)的尾數(shù)用原碼定點(diǎn)小數(shù)表示但浮點(diǎn)數(shù)的尾數(shù)用原碼定

6、點(diǎn)小數(shù)表示BinaryDecimal-0-1-2-3-4-5-6-710001001101010111100110111101111補(bǔ)碼補(bǔ)碼 - - 模運(yùn)算(模運(yùn)算(modularmodular運(yùn)算)運(yùn)算)時(shí)鐘是一種模時(shí)鐘是一種模12系統(tǒng)系統(tǒng) 假定鐘表時(shí)針指向假定鐘表時(shí)針指向10點(diǎn),要將它撥向點(diǎn),要將它撥向6點(diǎn),點(diǎn), 則有兩種撥法:則有兩種撥法: 倒撥倒撥4格:格:10- 4 = 6 順撥順撥8格:格:10+8 = 18 6 (mod 12) 模模12系統(tǒng)中:系統(tǒng)中: 10- 4 10+8 (mod 12) - 4 8 (mod 12) 則,稱則,稱8是是- 4對(duì)模對(duì)模12的補(bǔ)碼的補(bǔ)碼 (即:

7、(即:- 4的模的模12補(bǔ)碼等于補(bǔ)碼等于8)。)。 同樣有同樣有 -3 9 (mod 12) -5 7 (mod 12)等等結(jié)論結(jié)論2 2: 對(duì)于某一確定的模,某數(shù)減去小于模的另一數(shù),總可對(duì)于某一確定的模,某數(shù)減去小于模的另一數(shù),總可以用該數(shù)加上另一數(shù)負(fù)數(shù)的補(bǔ)碼來代替。以用該數(shù)加上另一數(shù)負(fù)數(shù)的補(bǔ)碼來代替。補(bǔ)碼(補(bǔ)碼(modular運(yùn)算):運(yùn)算):+ 和和 的統(tǒng)一的統(tǒng)一 重要概念:重要概念:在一個(gè)模運(yùn)算系統(tǒng)中,一個(gè)數(shù)與它除以在一個(gè)模運(yùn)算系統(tǒng)中,一個(gè)數(shù)與它除以“模?!焙蟮挠鄶?shù)等價(jià)。后的余數(shù)等價(jià)。結(jié)論結(jié)論1 1: 一個(gè)負(fù)數(shù)的補(bǔ)碼等于模減該負(fù)數(shù)的絕對(duì)值。一個(gè)負(fù)數(shù)的補(bǔ)碼等于模減該負(fù)數(shù)的絕對(duì)值?,F(xiàn)實(shí)世界中

8、的模運(yùn)算系統(tǒng)補(bǔ)碼的表示補(bǔ)碼的表示現(xiàn)實(shí)世界的模運(yùn)算系統(tǒng)舉例例例1:“鐘表鐘表”模運(yùn)算系統(tǒng)模運(yùn)算系統(tǒng) 假定時(shí)針只能順撥,從假定時(shí)針只能順撥,從10點(diǎn)倒撥點(diǎn)倒撥4格后是幾點(diǎn)?格后是幾點(diǎn)?10- 4 = 10+(12- 4) = 10+8 = 6 (mod 12)例例2:“4位十進(jìn)制數(shù)位十進(jìn)制數(shù)” 模運(yùn)算系統(tǒng)模運(yùn)算系統(tǒng) 假定算盤只有四檔,且只能做加法,則在算盤上計(jì)算假定算盤只有四檔,且只能做加法,則在算盤上計(jì)算 9828-1928等于多少?等于多少?9828-1928=9828+(104-1928) =9828+8072 = 1 7900 =7900(mod 104)取模即只留余數(shù),高位取模即只留余數(shù)

9、,高位“1”1”被丟棄!被丟棄!相當(dāng)于只有低相當(dāng)于只有低4 4位留在算盤上。位留在算盤上。計(jì)算機(jī)中的運(yùn)算器是模運(yùn)算系統(tǒng)計(jì)算機(jī)中的運(yùn)算器是模運(yùn)算系統(tǒng) 8位二進(jìn)制加法器模運(yùn)算系統(tǒng)位二進(jìn)制加法器模運(yùn)算系統(tǒng) 計(jì)算計(jì)算0111 1111 - 0100 0000 = ? 0111 1111 - 0100 0000 = 0111 1111 + (28- 0100 0000) =0111 1111 + 1100 0000 = 1 0011 1111 (mod 28) = 0011 1111只留余數(shù),只留余數(shù),“1”1”被丟棄被丟棄結(jié)論結(jié)論1 1: 一個(gè)負(fù)數(shù)的補(bǔ)碼等于對(duì)應(yīng)正數(shù)補(bǔ)碼的一個(gè)負(fù)數(shù)的補(bǔ)碼等于對(duì)應(yīng)正數(shù)補(bǔ)碼

10、的“各位取各位取反、末位加反、末位加1 1”運(yùn)算器適合用補(bǔ)碼表示和運(yùn)算運(yùn)算器適合用補(bǔ)碼表示和運(yùn)算0000000110000010010011101111011101011010101111001101001101101001運(yùn)算器只有有限位,假設(shè)為運(yùn)算器只有有限位,假設(shè)為n位,則運(yùn)算結(jié)果只能保留低位,則運(yùn)算結(jié)果只能保留低n位,位,故可看成是個(gè)只有故可看成是個(gè)只有n檔的二進(jìn)制算盤,因此,其模為檔的二進(jìn)制算盤,因此,其模為2n 。當(dāng)當(dāng)n=4時(shí),共有時(shí),共有16個(gè)個(gè)機(jī)器數(shù)機(jī)器數(shù):0000 1111,可看成是模為,可看成是模為24 的鐘表系統(tǒng)。的鐘表系統(tǒng)。真值真值的范圍為的范圍為 -8 +7補(bǔ)碼的定義

11、補(bǔ)碼的定義 假定補(bǔ)碼有假定補(bǔ)碼有n位,則:位,則:X補(bǔ)補(bǔ)= 2n + X (- -2nX 2n ,mod 2n)X是真值,x補(bǔ)是機(jī)器數(shù)真值和機(jī)器數(shù)的含義是什么?求特殊數(shù)的補(bǔ)碼求特殊數(shù)的補(bǔ)碼 -1補(bǔ)補(bǔ)= 2n - 001 = 111(n個(gè)個(gè)1) (mod 2n)假定機(jī)器數(shù)有假定機(jī)器數(shù)有n位位 -2n-1補(bǔ)補(bǔ)= 2n - 2n-1 = 100(n-1個(gè)個(gè)0) (mod 2n) +0補(bǔ)補(bǔ)= -0補(bǔ)補(bǔ)= 000(n個(gè)個(gè)0) 32位機(jī)器中,int、short、char型數(shù)據(jù)的機(jī)器數(shù)各占幾位?補(bǔ)碼與真值之間的簡便轉(zhuǎn)換補(bǔ)碼與真值之間的簡便轉(zhuǎn)換例例: 設(shè)機(jī)器數(shù)有設(shè)機(jī)器數(shù)有8位,求位,求123和和-123的補(bǔ)碼

12、表示。的補(bǔ)碼表示。解解: 123 = 127 4 = 01111111B 100B = 01111011B 123= 01111011B 01111011補(bǔ)補(bǔ)= 28 + 01111011 = 100000000 + 01111011 = 01111011 (mod 28),即,即 7BH。 01111011補(bǔ)補(bǔ)= 28 01111011 = 10000 0000 01111011 = 1111 1111 0111 1011 +1 = 1000 0100 +1 = 1000 0101,即,即 85H。如何快速得到如何快速得到123的二進(jìn)制表示?的二進(jìn)制表示?各位取反,末位加各位取反,末位加1當(dāng)

13、機(jī)器數(shù)為16位時(shí),結(jié)果怎樣? Unsigned integer(無符號(hào)整數(shù)無符號(hào)整數(shù))機(jī)器中字的位排列順序有兩種方式:(例:機(jī)器中字的位排列順序有兩種方式:(例:32位字位字: 0010112) 高到低位從左到右:高到低位從左到右:0000 0000 0000 0000 0000 0000 0000 1011 高到低位從右到左:高到低位從右到左:1101 0000 0000 0000 0000 0000 0000 0000 Leftmost和和rightmost這兩個(gè)詞有歧義,故用這兩個(gè)詞有歧義,故用LSB(Least Significant Bit)來表示最低有效位,用來表示最低有效位,用M

14、SB來表示最高有效位來表示最高有效位 高位到低位多采用從左往右排列高位到低位多采用從左往右排列一般在全部是正數(shù)運(yùn)算且不出現(xiàn)負(fù)值結(jié)果的場合下,可使用無符一般在全部是正數(shù)運(yùn)算且不出現(xiàn)負(fù)值結(jié)果的場合下,可使用無符號(hào)數(shù)表示。例如,地址運(yùn)算,編號(hào)表示,等等號(hào)數(shù)表示。例如,地址運(yùn)算,編號(hào)表示,等等無符號(hào)整數(shù)的編碼中無符號(hào)整數(shù)的編碼中沒有符號(hào)位沒有符號(hào)位能表示的最大值大于位數(shù)相同的帶符號(hào)整數(shù)的最大值(能表示的最大值大于位數(shù)相同的帶符號(hào)整數(shù)的最大值(Why?)?) 例如,例如,8位無符號(hào)整數(shù)最大是位無符號(hào)整數(shù)最大是255(1111 1111) 而而8位帶符號(hào)整數(shù)最大為位帶符號(hào)整數(shù)最大為127(0111 111

15、1)總是整數(shù),所以很多時(shí)候就總是整數(shù),所以很多時(shí)候就簡稱為簡稱為“無符號(hào)數(shù)無符號(hào)數(shù)”MSB LSBSigned integer(帶符號(hào)整數(shù),定點(diǎn)整數(shù))(帶符號(hào)整數(shù),定點(diǎn)整數(shù)) 計(jì)算機(jī)必須能處理正數(shù)計(jì)算機(jī)必須能處理正數(shù)(positive) 和負(fù)數(shù)和負(fù)數(shù)(negative),MSB表表示數(shù)符示數(shù)符 有三種定點(diǎn)編碼方式有三種定點(diǎn)編碼方式 Signed magnitude (原碼)原碼) 現(xiàn)用來表示浮點(diǎn)(實(shí))數(shù)的尾數(shù)現(xiàn)用來表示浮點(diǎn)(實(shí))數(shù)的尾數(shù) Ones complement (反碼)反碼) 現(xiàn)已不用于表示數(shù)值數(shù)據(jù)現(xiàn)已不用于表示數(shù)值數(shù)據(jù) Twos complement (補(bǔ)碼)補(bǔ)碼) 50年代以來,所

16、有計(jì)算機(jī)都用補(bǔ)碼來表示定點(diǎn)整數(shù)年代以來,所有計(jì)算機(jī)都用補(bǔ)碼來表示定點(diǎn)整數(shù) 為什么用補(bǔ)碼表示帶符號(hào)整數(shù)?為什么用補(bǔ)碼表示帶符號(hào)整數(shù)? 補(bǔ)碼運(yùn)算系統(tǒng)是模運(yùn)算系統(tǒng),加、減運(yùn)算統(tǒng)一補(bǔ)碼運(yùn)算系統(tǒng)是模運(yùn)算系統(tǒng),加、減運(yùn)算統(tǒng)一 數(shù)數(shù)0的表示唯一,方便使用的表示唯一,方便使用 比原碼和反碼多表示一個(gè)最小負(fù)數(shù)比原碼和反碼多表示一個(gè)最小負(fù)數(shù)C語言程序中的整數(shù)語言程序中的整數(shù)關(guān)系表達(dá)式關(guān)系表達(dá)式運(yùn)算類型運(yùn)算類型結(jié)果結(jié)果說明說明0 = 0U-1 0-1 -2147483647-12147483647U -2147483647-12147483647 (int) 2147483648U-1 -2(unsigned) -

17、1 -2無符號(hào)數(shù):無符號(hào)數(shù):unsigned int ( short / long);帶符號(hào)整數(shù):;帶符號(hào)整數(shù): int ( short / long)常在一個(gè)數(shù)的后面加一個(gè)常在一個(gè)數(shù)的后面加一個(gè)“u u”或或“U U”表示無符號(hào)數(shù)表示無符號(hào)數(shù)若同時(shí)有無符號(hào)和帶符號(hào)整數(shù),則若同時(shí)有無符號(hào)和帶符號(hào)整數(shù),則C編譯器將帶符號(hào)整數(shù)強(qiáng)制轉(zhuǎn)換為無符號(hào)數(shù)編譯器將帶符號(hào)整數(shù)強(qiáng)制轉(zhuǎn)換為無符號(hào)數(shù)假定以下關(guān)系表達(dá)式在假定以下關(guān)系表達(dá)式在3232位用補(bǔ)碼表示的機(jī)器上執(zhí)行,結(jié)果是什么?位用補(bǔ)碼表示的機(jī)器上執(zhí)行,結(jié)果是什么?C語言程序中的整數(shù)語言程序中的整數(shù)關(guān)系關(guān)系表達(dá)式表達(dá)式類類型型結(jié)結(jié)果果說明說明0 = = 0U-1

18、 0-1 -2147483647 - 12147483647U -2147483647 - 12147483647 (int) 2147483648U-1 -2(unsigned) -1 -2無無帶帶無無帶帶無無帶帶帶帶無無11 0*1 0* 1*11000B = 000B111B (-1) 000B(0)0111B (231-1) 1000B (-231)0111B (231-1) 1000B (-231)111B (-1) 1110B (-2)111B (232-1) 1110B (232-2)帶帶* *的結(jié)果與常規(guī)預(yù)想的相反!的結(jié)果與常規(guī)預(yù)想的相反!C語言程序中的整數(shù)語言程序中的整數(shù)例如

19、,考慮以下C代碼:1 int x = 1;2 unsigned u = 2147483648;34 printf ( “x = %u = %dn”, x, x);5 printf ( “u = %u = %dn”, u, u);在32位機(jī)器上運(yùn)行上述代碼時(shí),它的輸出結(jié)果是什么?為什么?x = 4294967295 = 1u = 2147483648 = 2147483648u 因?yàn)?的補(bǔ)碼整數(shù)表示為“111”,作為32位無符號(hào)數(shù)解釋時(shí),其值為2321= 4 294 967 2961 = 4 294 967 295。u 231的無符號(hào)數(shù)表示為“1000”,被解釋為32位帶符號(hào)整數(shù)時(shí),其值為最小負(fù)

20、數(shù):232-1 = 231 = 2 147 483 648。C語言程序中的整數(shù)語言程序中的整數(shù)1)在有些32位系統(tǒng)上,C表達(dá)式-2147483648 2147483647的執(zhí)行結(jié)果為false。Why?2)若定義變量“int i=-2147483648;”,則“i 2147483647”的執(zhí)行結(jié)果為true。Why?3)如果將表達(dá)式寫成“-2147483647-1 2147483647”,則結(jié)果會(huì)怎樣呢?Why?1)在)在ISO C90標(biāo)準(zhǔn)下標(biāo)準(zhǔn)下 ,2147483648為unsigned int型,因此 “-2147483648 2147483647”按無符號(hào)數(shù)比較, 100B比011大,結(jié)

21、果為false。 在在ISO C99標(biāo)準(zhǔn)下標(biāo)準(zhǔn)下 ,2147483648為long long型,因此 “-2147483648 2147483647”按帶符號(hào)整數(shù)比較, 100B比011小,結(jié)果為true。2)i 2147483647 按int型數(shù)比較,結(jié)果為true。3)-2147483647-1 negativeExponent: 0111 1101two = 125ten Bias adjustment: 125 - 127 = -2Significand: 1 + 1x2-1+ 1x2-2 + 0 x2-3 + 0 x2-4 + 0 x2-5 +. =1+2-1 +2-2 = 1+0.

22、5 +0.25 = 1.75Represents: -1.75tenx2-2 = - 0.4375(-1)S x (1 + Significand) x 2(Exponent-127)BEE00000H is the hex. Rep. Of an IEEE 754 SP FP number關(guān)于浮點(diǎn)數(shù)精度的一個(gè)例子關(guān)于浮點(diǎn)數(shù)精度的一個(gè)例子 61.419998和61.420002是兩個(gè)可表示數(shù),兩者之間相差0.000004。當(dāng)輸入數(shù)據(jù)是一個(gè)不可表示數(shù)時(shí),機(jī)器將其轉(zhuǎn)換為最鄰近的可表示數(shù)。第一講小結(jié)第一講小結(jié)在機(jī)器內(nèi)部編碼后的數(shù)稱為機(jī)器數(shù),其值稱為真值在機(jī)器內(nèi)部編碼后的數(shù)稱為機(jī)器數(shù),其值稱為真值定義

23、數(shù)值數(shù)據(jù)有三個(gè)要素:進(jìn)制、定點(diǎn)定義數(shù)值數(shù)據(jù)有三個(gè)要素:進(jìn)制、定點(diǎn)/浮點(diǎn)、編碼浮點(diǎn)、編碼整數(shù)的表示整數(shù)的表示 無符號(hào)數(shù):無符號(hào)數(shù):正整數(shù),用來表示地址等正整數(shù),用來表示地址等;帶符號(hào)整數(shù):;帶符號(hào)整數(shù):用補(bǔ)碼表示用補(bǔ)碼表示C語言中的整數(shù)語言中的整數(shù) 無符號(hào)數(shù):無符號(hào)數(shù):unsigned int ( short / long);帶符號(hào)數(shù):;帶符號(hào)數(shù): int ( short / long)浮點(diǎn)數(shù)的表示浮點(diǎn)數(shù)的表示 符號(hào)符號(hào);尾數(shù)尾數(shù):定點(diǎn)小數(shù);:定點(diǎn)小數(shù);指數(shù)(階):指數(shù)(階):定點(diǎn)整數(shù)(基不用表示)定點(diǎn)整數(shù)(基不用表示)浮點(diǎn)數(shù)的范圍浮點(diǎn)數(shù)的范圍 正上溢、正下溢、負(fù)上溢、負(fù)下溢;與階碼的位數(shù)和基的

24、大小有關(guān)正上溢、正下溢、負(fù)上溢、負(fù)下溢;與階碼的位數(shù)和基的大小有關(guān)浮點(diǎn)數(shù)的精度:浮點(diǎn)數(shù)的精度:與尾數(shù)的位數(shù)和是否規(guī)格化有關(guān)與尾數(shù)的位數(shù)和是否規(guī)格化有關(guān)浮點(diǎn)數(shù)的表示(浮點(diǎn)數(shù)的表示(IEEE 754標(biāo)準(zhǔn)):標(biāo)準(zhǔn)):單精度單精度SP(float)和雙精度)和雙精度DP(double) 規(guī)格化數(shù)規(guī)格化數(shù)(SP):階碼:階碼1254,尾數(shù)最高位隱含為,尾數(shù)最高位隱含為1 “零零” (階為全階為全0,尾為全,尾為全0) (階為全階為全1,尾為全,尾為全0) NaN (階為全階為全1,尾為非,尾為非0) 非規(guī)非規(guī)格化格化數(shù)數(shù) (階為全階為全0,尾為非,尾為非0,隱藏位為,隱藏位為0)十進(jìn)制數(shù)的表示:十進(jìn)制數(shù)

25、的表示:用用ASCII碼或碼或BCD碼表示碼表示1010在計(jì)算機(jī)中在計(jì)算機(jī)中有幾種可能的有幾種可能的表示?表示? -10呢?呢?數(shù)據(jù)的表示和運(yùn)算數(shù)據(jù)的表示和運(yùn)算 分以下三個(gè)部分介紹 第一講:數(shù)值數(shù)據(jù)的表示 定點(diǎn)數(shù)的編碼表示 整數(shù)的表示 無符號(hào)整數(shù)、帶符號(hào)整數(shù) 浮點(diǎn)數(shù)的表示 C語言程序的整數(shù)類型和浮點(diǎn)數(shù)類型 第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存儲(chǔ) 邏輯值、西文字符、漢字字符 數(shù)據(jù)寬度單位 大端/小端、對(duì)齊存放 表示表示用一位表示用一位表示 。例如,真:。例如,真:1 / 假:假:0N位二進(jìn)制數(shù)可表示位二進(jìn)制數(shù)可表示N個(gè)邏輯數(shù)據(jù),或一個(gè)位串個(gè)邏輯數(shù)據(jù),或一個(gè)位串 運(yùn)算運(yùn)算按位進(jìn)行按位進(jìn)行如如:按位與

26、按位與 / 按位或按位或 / 邏輯左移邏輯左移 / 邏輯右移邏輯右移 等等 識(shí)別識(shí)別邏輯數(shù)據(jù)和數(shù)值數(shù)據(jù)在形式上并無差別,也是一串邏輯數(shù)據(jù)和數(shù)值數(shù)據(jù)在形式上并無差別,也是一串0/1序序列,機(jī)器靠指令來識(shí)別。列,機(jī)器靠指令來識(shí)別。 位串位串用來表示若干個(gè)狀態(tài)位或控制位(用來表示若干個(gè)狀態(tài)位或控制位(OS中使用較多)中使用較多) 例如,例如,x86的標(biāo)志寄存器含義如下:的標(biāo)志寄存器含義如下: 邏輯數(shù)據(jù)的編碼表示邏輯數(shù)據(jù)的編碼表示CFPFAFZFSFTFIFDFOF 特點(diǎn)特點(diǎn)是一種拼音文字,用有限幾個(gè)字母可拼寫出所有單詞是一種拼音文字,用有限幾個(gè)字母可拼寫出所有單詞只對(duì)有限個(gè)字母和數(shù)學(xué)符號(hào)、標(biāo)點(diǎn)符號(hào)等

27、輔助字符編碼只對(duì)有限個(gè)字母和數(shù)學(xué)符號(hào)、標(biāo)點(diǎn)符號(hào)等輔助字符編碼所有字符總數(shù)不超過所有字符總數(shù)不超過256個(gè),使用個(gè),使用7或或8個(gè)二進(jìn)位可表示個(gè)二進(jìn)位可表示 表示(表示(常用編碼為常用編碼為7位位ASCII碼)碼)十進(jìn)制數(shù)字:十進(jìn)制數(shù)字:0/1/2/9英文字母:英文字母:A/B/Z/a/b/z專用符號(hào):專用符號(hào):+/-/%/*/&/ 控制字符(不可打印或顯示)控制字符(不可打印或顯示) 操作操作字符串操作,如字符串操作,如:傳送傳送/比較等比較等 西文字符的編碼表示西文字符的編碼表示必須熟悉對(duì)應(yīng)必須熟悉對(duì)應(yīng)的的ASCII碼!碼! 特點(diǎn)特點(diǎn)漢字是表意文字,一個(gè)字就是一個(gè)方塊圖形。漢字是表意

28、文字,一個(gè)字就是一個(gè)方塊圖形。漢字?jǐn)?shù)量巨大,總數(shù)超過漢字?jǐn)?shù)量巨大,總數(shù)超過6萬字,給漢字在計(jì)算機(jī)內(nèi)部的表示、漢萬字,給漢字在計(jì)算機(jī)內(nèi)部的表示、漢字的傳輸與交換、漢字的輸入和輸出等帶來了一系列問題。字的傳輸與交換、漢字的輸入和輸出等帶來了一系列問題。 編碼形式編碼形式有以下幾種漢字代碼:有以下幾種漢字代碼: 輸入碼:輸入碼:對(duì)漢字用相應(yīng)按鍵進(jìn)行編碼表示,用于輸入對(duì)漢字用相應(yīng)按鍵進(jìn)行編碼表示,用于輸入 內(nèi)碼:內(nèi)碼:用于在系統(tǒng)中進(jìn)行存儲(chǔ)、查找、傳送等處理用于在系統(tǒng)中進(jìn)行存儲(chǔ)、查找、傳送等處理 字模點(diǎn)陣或輪廓描述字模點(diǎn)陣或輪廓描述: 描述漢字字模點(diǎn)陣或輪廓,用于顯示描述漢字字模點(diǎn)陣或輪廓,用于顯示/打

29、印打印 漢字及國際字符的編碼表示漢字及國際字符的編碼表示問題:西文字符有沒有輸入碼?有沒有內(nèi)碼?問題:西文字符有沒有輸入碼?有沒有內(nèi)碼?有沒有字模點(diǎn)陣或輪廓描述?有沒有字模點(diǎn)陣或輪廓描述?漢字漢字內(nèi)碼內(nèi)碼 至少需至少需2個(gè)字節(jié)才能表示一個(gè)漢字內(nèi)碼。為什么?個(gè)字節(jié)才能表示一個(gè)漢字內(nèi)碼。為什么?由漢字的總數(shù)決定!由漢字的總數(shù)決定! 可在可在GB2312國標(biāo)碼的基礎(chǔ)上產(chǎn)生漢字內(nèi)碼國標(biāo)碼的基礎(chǔ)上產(chǎn)生漢字內(nèi)碼為與為與ASCII碼區(qū)別,將國標(biāo)碼的兩個(gè)字節(jié)的第一位置碼區(qū)別,將國標(biāo)碼的兩個(gè)字節(jié)的第一位置“1”后后得到得到一種一種漢字內(nèi)碼漢字內(nèi)碼例如,例如,漢字漢字“大大”在碼表中位于第在碼表中位于第20行、第

30、行、第83列。因此區(qū)位列。因此區(qū)位碼為碼為0010100 1010011,國標(biāo)碼為,國標(biāo)碼為00110100 01110011,即,即3473H。前面的。前面的34H和字符和字符“4”的的ACSII碼相同,后面的碼相同,后面的73H和字符和字符“s”的的ACSII碼相同,將每個(gè)字節(jié)的最高位各設(shè)為碼相同,將每個(gè)字節(jié)的最高位各設(shè)為“1”后,就得到其內(nèi)碼:后,就得到其內(nèi)碼:B4F3H (1011 0100 1111 0011B),因而不會(huì)和,因而不會(huì)和ASCII碼混淆。碼混淆。為便于打印、顯示漢字,漢字字形必須預(yù)先存在機(jī)內(nèi)為便于打印、顯示漢字,漢字字形必須預(yù)先存在機(jī)內(nèi)字庫字庫 (font):所有漢字

31、形狀的描述信息集合:所有漢字形狀的描述信息集合不同字體不同字體 (如宋體、仿宋、楷體、黑體等如宋體、仿宋、楷體、黑體等) 對(duì)應(yīng)不同字庫對(duì)應(yīng)不同字庫從字庫中找到字形描述信息,然后送設(shè)備輸出從字庫中找到字形描述信息,然后送設(shè)備輸出問題:如何知道到哪里找相應(yīng)的字形信息?問題:如何知道到哪里找相應(yīng)的字形信息?漢字內(nèi)碼與其在字庫中的位置有關(guān)!漢字內(nèi)碼與其在字庫中的位置有關(guān)!字形主要有兩種描述方法:字形主要有兩種描述方法:字模點(diǎn)陣描述(圖像方式)字模點(diǎn)陣描述(圖像方式)輪廓描述(圖形方式)輪廓描述(圖形方式)直線向量輪廓直線向量輪廓曲線輪廓(曲線輪廓(True Type字形)字形)漢字的字模點(diǎn)陣碼和輪廓描

32、述漢字的字模點(diǎn)陣碼和輪廓描述數(shù)據(jù)的基本寬度數(shù)據(jù)的基本寬度 比特(比特(bit)是計(jì)算機(jī)中處理、存儲(chǔ)、傳輸信息的最小單位)是計(jì)算機(jī)中處理、存儲(chǔ)、傳輸信息的最小單位 二進(jìn)制信息的計(jì)量單位是二進(jìn)制信息的計(jì)量單位是“字節(jié)字節(jié)”(Byte),也稱也稱“位組位組”現(xiàn)代計(jì)算機(jī)中,存儲(chǔ)器現(xiàn)代計(jì)算機(jī)中,存儲(chǔ)器按字節(jié)編址按字節(jié)編址字節(jié)是最小可尋址單位字節(jié)是最小可尋址單位 (addressable unit ) 如果以字節(jié)為一個(gè)排列單位,則如果以字節(jié)為一個(gè)排列單位,則LSB表示最低有效字節(jié),表示最低有效字節(jié),MSB表示最高有效字節(jié)表示最高有效字節(jié) 除比特和字節(jié)外,還經(jīng)常使用除比特和字節(jié)外,還經(jīng)常使用“字字”(wor

33、d)作為單位作為單位 “字字”和和 “字長字長”的概念不同的概念不同 IA-32中的中的“字字”有多少位?字長多少位呢?有多少位?字長多少位呢?DWORD :32位位QWORD:64位位16位位32位位數(shù)據(jù)的基本寬度數(shù)據(jù)的基本寬度 “字字”和和 “字長字長”的概念不同的概念不同 “字長字長”指數(shù)據(jù)通路的寬度。指數(shù)據(jù)通路的寬度。(數(shù)據(jù)通路指(數(shù)據(jù)通路指CPU內(nèi)部數(shù)據(jù)流經(jīng)的路徑以及路徑上的部件,內(nèi)部數(shù)據(jù)流經(jīng)的路徑以及路徑上的部件,主要是主要是CPU內(nèi)部進(jìn)行數(shù)據(jù)運(yùn)算、存儲(chǔ)和傳送的部件,這些內(nèi)部進(jìn)行數(shù)據(jù)運(yùn)算、存儲(chǔ)和傳送的部件,這些部件的寬度基本上要一致,才能相互匹配。因此,部件的寬度基本上要一致,才能

34、相互匹配。因此,”字字長長”等于等于CPU內(nèi)部總線的寬度、運(yùn)算器的位數(shù)、通用寄存器的內(nèi)部總線的寬度、運(yùn)算器的位數(shù)、通用寄存器的寬度等寬度等。 )“字字”表示被處理信息的單位,用來度量數(shù)據(jù)類型的寬度。表示被處理信息的單位,用來度量數(shù)據(jù)類型的寬度。字和字長的寬度可以一樣,也可不同。字和字長的寬度可以一樣,也可不同。 例如,例如,x86體系結(jié)構(gòu)定義體系結(jié)構(gòu)定義“字字”的寬度為的寬度為16位,但從位,但從386開開始字長就是始字長就是32位了。位了。數(shù)據(jù)量的度量單位數(shù)據(jù)量的度量單位 存儲(chǔ)二進(jìn)制信息時(shí)的度量單位要比字節(jié)或字大得多存儲(chǔ)二進(jìn)制信息時(shí)的度量單位要比字節(jié)或字大得多 容量經(jīng)常使用的單位有:容量經(jīng)常

35、使用的單位有: “千字節(jié)千字節(jié)”(KB),1KB=210字節(jié)字節(jié)=1024B “兆字節(jié)兆字節(jié)”(MB),1MB=220字節(jié)字節(jié)=1024KB “千兆字節(jié)千兆字節(jié)”(GB),1GB=230字節(jié)字節(jié)=1024MB “兆兆字節(jié)兆兆字節(jié)”(TB),1TB=240字節(jié)字節(jié)=1024GB 通信中的帶寬使用的單位有:通信中的帶寬使用的單位有: “千比特千比特/秒秒”(kb/s),1kbps=103 b/s=1000 bps “兆比特兆比特/秒秒”(Mb/s),1Mbps=106 b/s =1000 kbps “千兆比特千兆比特/秒秒”(Gb/s),1Gbps=109 b/s =1000 Mbps “兆兆比特

36、兆兆比特/秒秒”(Tb/s),1Tbps=1012 b/s =1000 Gbps如果把如果把b換成換成B,則表示字節(jié)而不是比特(位),則表示字節(jié)而不是比特(位)例如,例如,10MBps表示表示 10兆字節(jié)兆字節(jié)/秒秒程序中數(shù)據(jù)類型的寬度程序中數(shù)據(jù)類型的寬度 高級(jí)語言支持多種類型、多種高級(jí)語言支持多種類型、多種長度的數(shù)據(jù)長度的數(shù)據(jù)例如,例如,C語言中語言中char類型的寬類型的寬度為度為1個(gè)字節(jié),可表示一個(gè)字個(gè)字節(jié),可表示一個(gè)字符(非數(shù)值數(shù)據(jù)),也可表示符(非數(shù)值數(shù)據(jù)),也可表示一個(gè)一個(gè)8位的整數(shù)(數(shù)值數(shù)據(jù))位的整數(shù)(數(shù)值數(shù)據(jù))不同機(jī)器上表示的同一種類型不同機(jī)器上表示的同一種類型的數(shù)據(jù)可能寬度不

37、同的數(shù)據(jù)可能寬度不同 必須確定相應(yīng)的機(jī)器級(jí)數(shù)據(jù)表必須確定相應(yīng)的機(jī)器級(jí)數(shù)據(jù)表示方式和相應(yīng)的處理指令示方式和相應(yīng)的處理指令 C聲明聲明典型典型32位位機(jī)器機(jī)器Compaq Alpha機(jī)器機(jī)器charshort intintlong int12441248char*48floatdouble4848C語言中數(shù)值數(shù)據(jù)類型的寬度語言中數(shù)值數(shù)據(jù)類型的寬度 (單位:字節(jié)單位:字節(jié))從表中看出:同類型數(shù)據(jù)并不是從表中看出:同類型數(shù)據(jù)并不是所有機(jī)器都采用相同的寬度,分所有機(jī)器都采用相同的寬度,分配的字節(jié)數(shù)配的字節(jié)數(shù)隨機(jī)器字長和編譯器隨機(jī)器字長和編譯器的不同而不同。的不同而不同。 Compaq Alpha是一個(gè)針

38、對(duì)高端是一個(gè)針對(duì)高端應(yīng)用的應(yīng)用的64位機(jī)器,即字長為位機(jī)器,即字長為64位位 數(shù)據(jù)的存儲(chǔ)和排列順序數(shù)據(jù)的存儲(chǔ)和排列順序 80年代開始,幾乎所有機(jī)器都用年代開始,幾乎所有機(jī)器都用字節(jié)編址字節(jié)編址 ISA設(shè)計(jì)時(shí)要考慮的兩個(gè)問題:設(shè)計(jì)時(shí)要考慮的兩個(gè)問題:如何根據(jù)一個(gè)字節(jié)地址取到一個(gè)如何根據(jù)一個(gè)字節(jié)地址取到一個(gè)32位的字?位的字?- 字的存放問題字的存放問題一個(gè)字能否存放在任何字節(jié)邊界?一個(gè)字能否存放在任何字節(jié)邊界?- 字的邊界對(duì)齊問題字的邊界對(duì)齊問題若 int i = -65535,存放在100號(hào)單元(占100103),則用“取數(shù)”指令訪問100號(hào)單元取出 i 時(shí),必須清楚 i 的4個(gè)字節(jié)是如何存放

39、的。msblsb103 102 101 100little endian word 100#100 101 102 103big endian word 100#Word: FF FF 00 01大端方式(Big Endian): MSB所在的地址是數(shù)的地址 e.g. IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA小端方式( Little Endian): LSB所在的地址是數(shù)的地址 e.g. Intel 80 x86, DEC VAX 有些機(jī)器兩種方式都支持,可通過特定控制位來設(shè)定采用哪種方式。65535=216-1-65535補(bǔ)=FFFF0001

40、HBIG Endian versus Little Endian Ex3: Memory layout of a instruction located in 1000假定小端機(jī)器中指令:假定小端機(jī)器中指令:mov AX, 0 x12345(BX)其中操作碼其中操作碼mov為為40H,寄存器,寄存器AX和和BX的編號(hào)分別為的編號(hào)分別為0001B和和0010B,立即數(shù)占,立即數(shù)占32位,則存放順序?yàn)椋何?,則存放順序?yàn)椋?若在大端機(jī)器上,則存放順序如何?若在大端機(jī)器上,則存放順序如何?401200 01 23 45401245 23 01 00000123451240452301001240100

41、510041003100210011000地址地址只需要考慮指令中立即數(shù)的順序!只需要考慮指令中立即數(shù)的順序!即指令地址為1000Byte Swap Problem(字節(jié)交換問題)(字節(jié)交換問題)785634120123increasingbyteaddressBig Endian123456780123Little Endianu 每個(gè)系統(tǒng)內(nèi)部是一致的,但在系統(tǒng)間通信時(shí)可能會(huì)發(fā)生問題!每個(gè)系統(tǒng)內(nèi)部是一致的,但在系統(tǒng)間通信時(shí)可能會(huì)發(fā)生問題!u 因?yàn)轫樞虿煌枰M(jìn)行順序轉(zhuǎn)換因?yàn)轫樞虿煌?,需要進(jìn)行順序轉(zhuǎn)換音、視頻和圖像等文件格式或處理程序都涉及到字節(jié)順序問題音、視頻和圖像等文件格式或處理程序都涉

42、及到字節(jié)順序問題 ex. Little endian: GIF, PC Paintbrush, Microsoft RTF,etc Big endian: Adobe Photoshop, JPEG, MacPaint, etc 上述存放在上述存放在0 0號(hào)單元的數(shù)據(jù)(字)是什么?號(hào)單元的數(shù)據(jù)(字)是什么?12345678H? 78563412H?存放方式不同的機(jī)器間程序移植或數(shù)據(jù)通信時(shí),會(huì)發(fā)生什么問題?存放方式不同的機(jī)器間程序移植或數(shù)據(jù)通信時(shí),會(huì)發(fā)生什么問題? 00040812160 字節(jié) 1字節(jié) 2字節(jié) 3字節(jié)0004081216字節(jié)0 字節(jié)1 字節(jié)2 字節(jié)3Alignment(對(duì)齊對(duì)齊)

43、 如:如:int i, short k, double x, char c, short j, 則:則:&i=0; &k=4; &x=8; &c=16; &j=18; 則:則: &i=0; &k=4; &x=6; &c=14; &j=15;x:3個(gè)周期個(gè)周期j:2個(gè)周期個(gè)周期x:2個(gè)周期個(gè)周期j:1個(gè)周期個(gè)周期雖節(jié)省了空間,雖節(jié)省了空間,但增加了訪存次但增加了訪存次數(shù)!數(shù)!需要權(quán)衡,目前需要權(quán)衡,目前來看,浪費(fèi)一點(diǎn)來看,浪費(fèi)一點(diǎn)存儲(chǔ)空間沒有關(guān)存儲(chǔ)空間沒有關(guān)系!系! 存儲(chǔ)器按字節(jié)存儲(chǔ)器按字節(jié)編址編址每次只能讀寫每次只

44、能讀寫某個(gè)字地址開某個(gè)字地址開始的始的4個(gè)單元中個(gè)單元中連續(xù)的連續(xù)的1個(gè)、個(gè)、2個(gè)、個(gè)、3個(gè)或個(gè)或4個(gè)個(gè)字節(jié)字節(jié)Alignment(對(duì)齊對(duì)齊) 舉例舉例例如,考慮下列兩個(gè)結(jié)構(gòu)聲明:例如,考慮下列兩個(gè)結(jié)構(gòu)聲明:struct S1 int i;charc;intj;struct S2 int i;intj;charc;在要求對(duì)齊的情況下,哪種結(jié)構(gòu)聲明更好?在要求對(duì)齊的情況下,哪種結(jié)構(gòu)聲明更好?S1:icX X Xj048S2:icj048需要12個(gè)字節(jié)只需要9個(gè)字節(jié)對(duì)于對(duì)于“struct S2 d4”,只分配,只分配9個(gè)字節(jié)能否滿足對(duì)齊要求?個(gè)字節(jié)能否滿足對(duì)齊要求?S2:icX X Xj048不能

45、!也需要12個(gè)字節(jié)S2比S1好第二講小結(jié)第二講小結(jié) 非數(shù)值數(shù)據(jù)的表示 邏輯數(shù)據(jù)用來表示真/假或N位位串,按位運(yùn)算 西文字符:用ASCII碼表示 漢字:漢字輸入碼、漢字內(nèi)碼、漢字字模碼 數(shù)據(jù)的寬度 位、字節(jié)、字(不一定等于字長) k /K / M / G / T / P / E / Z / Y 有不同的含義 數(shù)據(jù)的存儲(chǔ)排列 數(shù)據(jù)的地址:連續(xù)若干單元中最小的地址,即:從小地址開始存放數(shù)據(jù) 問題:若一個(gè)short型數(shù)據(jù)si存放在單元0 x08000100和0 x08000101中,那么si的地址是什么? 大端方式:用MSB存放的地址表示數(shù)據(jù)的地址 小端方式:用LSB存放的地址表示數(shù)據(jù)的地址 按邊界對(duì)

46、齊可減少訪存次數(shù)數(shù)據(jù)的表示和運(yùn)算數(shù)據(jù)的表示和運(yùn)算 分以下三個(gè)部分介紹(續(xù)) 第三講:數(shù)據(jù)的運(yùn)算 按位運(yùn)算和邏輯運(yùn)算 移位運(yùn)算 位擴(kuò)展和位截?cái)噙\(yùn)算 無符號(hào)和帶符號(hào)整數(shù)的加減運(yùn)算 無符號(hào)和帶符號(hào)整數(shù)的乘除運(yùn)算 變量與常數(shù)之間的乘除運(yùn)算 浮點(diǎn)數(shù)的加減乘除運(yùn)算 從高級(jí)語言程序中的表達(dá)式出發(fā),用機(jī)器數(shù)在具體電路中的執(zhí)行過程,來解釋表達(dá)式的執(zhí)行結(jié)果圍繞C語言中的運(yùn)算,解釋其在底層機(jī)器級(jí)的實(shí)現(xiàn)方法數(shù)據(jù)的運(yùn)算數(shù)據(jù)的運(yùn)算高級(jí)語言程序中涉及的運(yùn)算(以高級(jí)語言程序中涉及的運(yùn)算(以C語言為例)語言為例) 整數(shù)算術(shù)運(yùn)算、浮點(diǎn)數(shù)算術(shù)運(yùn)算整數(shù)算術(shù)運(yùn)算、浮點(diǎn)數(shù)算術(shù)運(yùn)算 按位、邏輯、移位、位擴(kuò)展和位截?cái)喟次?、邏輯、移位、位擴(kuò)展

47、和位截?cái)嘀噶罴猩婕暗降倪\(yùn)算指令集中涉及到的運(yùn)算 涉及到的定點(diǎn)數(shù)運(yùn)算涉及到的定點(diǎn)數(shù)運(yùn)算 算術(shù)運(yùn)算算術(shù)運(yùn)算 帶符號(hào)整數(shù)運(yùn)算:帶符號(hào)整數(shù)運(yùn)算:取負(fù)取負(fù) / 符號(hào)擴(kuò)展符號(hào)擴(kuò)展 / 加加 / 減減 / 乘乘 / 除除 / 算術(shù)移位算術(shù)移位 無符號(hào)整數(shù)運(yùn)算:無符號(hào)整數(shù)運(yùn)算:0擴(kuò)展擴(kuò)展 / 加加 / 減減 / 乘乘 / 除除 邏輯運(yùn)算邏輯運(yùn)算 邏輯操作:邏輯操作:與與 / 或或 / 非非 / 移位操作:移位操作:邏輯左移邏輯左移 / 邏輯右移邏輯右移 涉及到的浮點(diǎn)數(shù)運(yùn)算:加、減、乘、除涉及到的浮點(diǎn)數(shù)運(yùn)算:加、減、乘、除基本運(yùn)算部件基本運(yùn)算部件ALU的設(shè)計(jì)的設(shè)計(jì)C語言程序中涉及的運(yùn)算語言程序中涉及的運(yùn)算 算

48、術(shù)運(yùn)算(最基本的運(yùn)算)算術(shù)運(yùn)算(最基本的運(yùn)算)無符號(hào)數(shù)、帶符號(hào)整數(shù)、浮點(diǎn)數(shù)的無符號(hào)數(shù)、帶符號(hào)整數(shù)、浮點(diǎn)數(shù)的+、-、*、/ 運(yùn)算等運(yùn)算等 按位運(yùn)算按位運(yùn)算用途用途對(duì)對(duì)位串位串實(shí)現(xiàn)實(shí)現(xiàn)“掩碼掩碼”(mask)操作或相應(yīng)的其他處理)操作或相應(yīng)的其他處理(主要用于對(duì)(主要用于對(duì)多媒體數(shù)據(jù)或狀態(tài)多媒體數(shù)據(jù)或狀態(tài)/控制信息控制信息進(jìn)行處理)進(jìn)行處理)操作操作按位或:按位或:“|” 按位與:按位與:“&”按位取反:按位取反:“”按位異或:按位異或:“”問題:如何從問題:如何從16位采樣數(shù)據(jù)位采樣數(shù)據(jù)y中提取高位字節(jié),并使低字節(jié)為中提取高位字節(jié),并使低字節(jié)為0?可用可用“&”實(shí)現(xiàn)實(shí)現(xiàn)“掩碼掩碼

49、”操作:操作:y & 0 xFF00例如,當(dāng)例如,當(dāng)y=0 x2C0B時(shí),得到結(jié)果為:時(shí),得到結(jié)果為:0 x2C00C語言程序中涉及的運(yùn)算語言程序中涉及的運(yùn)算 邏輯運(yùn)算邏輯運(yùn)算用途用途用于關(guān)系表達(dá)式的運(yùn)算用于關(guān)系表達(dá)式的運(yùn)算例如,例如,if (xy and iy) & (i100) then “!”表示表示“NOT”運(yùn)算運(yùn)算 與按位運(yùn)算的差別與按位運(yùn)算的差別符號(hào)表示不同:符號(hào)表示不同:& & ;| ; 運(yùn)算過程不同:運(yùn)算過程不同:按位按位 整體整體結(jié)果類型不同:結(jié)果類型不同:位串位串 邏輯值邏輯值C語言程序中涉及的運(yùn)算語言程序中涉及的運(yùn)算 移位運(yùn)算移位運(yùn)算用途用

50、途提取部分信息提取部分信息擴(kuò)大或縮小數(shù)值的擴(kuò)大或縮小數(shù)值的2、4、8倍倍操作操作左移左移::xk不區(qū)分是邏輯移位還是算術(shù)移位,由不區(qū)分是邏輯移位還是算術(shù)移位,由x的類型確定的類型確定無符號(hào)數(shù):邏輯左移、邏輯右移無符號(hào)數(shù):邏輯左移、邏輯右移高(低)位移出,低(高)位補(bǔ)高(低)位移出,低(高)位補(bǔ)0,可能溢出!,可能溢出!問題:何時(shí)可能發(fā)生溢出?如何判斷溢出?問題:何時(shí)可能發(fā)生溢出?如何判斷溢出? 若高位移出的是若高位移出的是1,則左移時(shí)發(fā)生溢出,則左移時(shí)發(fā)生溢出帶符號(hào)整數(shù):算術(shù)左移、算術(shù)右移帶符號(hào)整數(shù):算術(shù)左移、算術(shù)右移左移:高位移出,低位補(bǔ)左移:高位移出,低位補(bǔ)0??赡芤绯?!??赡芤绯?! 溢出

51、判斷:溢出判斷:若移出的位不等于新的符號(hào)位,則溢出。若移出的位不等于新的符號(hào)位,則溢出。右移:低位移出,高位補(bǔ)符,可能發(fā)生有效數(shù)據(jù)丟失。右移:低位移出,高位補(bǔ)符,可能發(fā)生有效數(shù)據(jù)丟失。如何從如何從1616位數(shù)據(jù)位數(shù)據(jù)y y中提取高位字節(jié)?中提取高位字節(jié)?某字長為某字長為8 8的機(jī)器中,的機(jī)器中,x x、y y和和z z都是都是8 8位帶符號(hào)位帶符號(hào)整數(shù),已知整數(shù),已知x=-81x=-81,則,則y=x/2=y=x/2=?z=2x=z=2x=?(y8) 送送8位寄存器位寄存器移位!移位!y= 40? z= 162?C語言程序中涉及的運(yùn)算語言程序中涉及的運(yùn)算 位擴(kuò)展和位截?cái)噙\(yùn)算位擴(kuò)展和位截?cái)噙\(yùn)算用

52、途用途類型轉(zhuǎn)換時(shí)可能需要數(shù)據(jù)擴(kuò)展或截?cái)囝愋娃D(zhuǎn)換時(shí)可能需要數(shù)據(jù)擴(kuò)展或截?cái)嗖僮鞑僮鳑]有專門操作運(yùn)算符,根據(jù)類型轉(zhuǎn)換前沒有專門操作運(yùn)算符,根據(jù)類型轉(zhuǎn)換前后數(shù)據(jù)長短確定是擴(kuò)展還是截?cái)嗪髷?shù)據(jù)長短確定是擴(kuò)展還是截?cái)鄶U(kuò)展:短轉(zhuǎn)長擴(kuò)展:短轉(zhuǎn)長 無符號(hào)數(shù):無符號(hào)數(shù):0擴(kuò)展,前面補(bǔ)擴(kuò)展,前面補(bǔ)0 帶符號(hào)整數(shù):符號(hào)擴(kuò)展,前面補(bǔ)符帶符號(hào)整數(shù):符號(hào)擴(kuò)展,前面補(bǔ)符截?cái)啵洪L轉(zhuǎn)短截?cái)啵洪L轉(zhuǎn)短 強(qiáng)行將高位丟棄,故可能發(fā)生強(qiáng)行將高位丟棄,故可能發(fā)生“溢出溢出”例例1(擴(kuò)展操作):在大端機(jī)上輸出(擴(kuò)展操作):在大端機(jī)上輸出si, usi, i, ui的十進(jìn)制和十六進(jìn)制值是什么?的十進(jìn)制和十六進(jìn)制值是什么?short si = -3

53、2768;unsigned short usi = si;int i = si;unsingned ui = usi ;si = -32768 80 00usi = 32768 80 00i = -32768 FF FF 80 00 ui = 32768 00 00 80 00例例2(截?cái)嗖僮鳎海ń財(cái)嗖僮鳎篿和和j是否相等?是否相等?int i = 32768;short si = (short) i;int j = si;不相等!不相等!i = 32768 00 00 80 00si = -32768 80 00 j = -32768 FF FF 80 00原因:對(duì)原因:對(duì)i i截?cái)鄷r(shí)發(fā)

54、生截?cái)鄷r(shí)發(fā)生了了“溢出溢出”,即:,即:32768截?cái)酁榻財(cái)酁?6位數(shù)時(shí)位數(shù)時(shí),因其超出,因其超出16位能表位能表示的最大值,故無法示的最大值,故無法截?cái)酁檎_的截?cái)酁檎_的16位數(shù)位數(shù)!如何實(shí)現(xiàn)高級(jí)語言源程序中的運(yùn)算?如何實(shí)現(xiàn)高級(jí)語言源程序中的運(yùn)算? 總結(jié):總結(jié):C語言程序中的基本數(shù)據(jù)類型及其基本運(yùn)算類型語言程序中的基本數(shù)據(jù)類型及其基本運(yùn)算類型 基本數(shù)據(jù)類型基本數(shù)據(jù)類型無符號(hào)數(shù)、帶符號(hào)整數(shù)、浮點(diǎn)數(shù)、位串、字符(串)無符號(hào)數(shù)、帶符號(hào)整數(shù)、浮點(diǎn)數(shù)、位串、字符(串) 基本運(yùn)算類型基本運(yùn)算類型算術(shù)、按位、邏輯、移位、擴(kuò)展和截?cái)?、匹配算術(shù)、按位、邏輯、移位、擴(kuò)展和截?cái)唷⑵ヅ?計(jì)算機(jī)如何實(shí)現(xiàn)高級(jí)語言程序

55、中的運(yùn)算?計(jì)算機(jī)如何實(shí)現(xiàn)高級(jí)語言程序中的運(yùn)算? 將各類表達(dá)式編譯(轉(zhuǎn)換)為指令序列將各類表達(dá)式編譯(轉(zhuǎn)換)為指令序列 計(jì)算機(jī)直接執(zhí)行指令來完成運(yùn)算計(jì)算機(jī)直接執(zhí)行指令來完成運(yùn)算例:例:C語言賦值語句語言賦值語句“f = (g+h) (i+j);”中變量中變量i、j、f、g、h由編譯器分別由編譯器分別分配給分配給MIPS寄存器寄存器$t0$t4。寄存器。寄存器$t0$t7的編號(hào)對(duì)應(yīng)的編號(hào)對(duì)應(yīng)815,上述程序段對(duì),上述程序段對(duì)應(yīng)的應(yīng)的MIPS機(jī)器代碼和匯編表示(機(jī)器代碼和匯編表示(#后為注釋)如下:后為注釋)如下:000000 01011 01100 01101 00000 100000 add $

56、t5, $t3, $t4 # g+h000000 01000 01001 01110 00000 100000 add $t6, $t0, $t1 # i+j000000 01101 01110 01010 00000 100010 sub $t2, $t5, $t6 # f =(g+h)(i+j) 需要提供哪些運(yùn)算類指令才能支持高級(jí)語言需求呢?需要提供哪些運(yùn)算類指令才能支持高級(jí)語言需求呢?邏輯運(yùn)算、移位、擴(kuò)展和截?cái)嗟戎噶顚?shí)現(xiàn)較容易,算術(shù)運(yùn)算指令難!n位整數(shù)加位整數(shù)加/減運(yùn)算器減運(yùn)算器先看一個(gè)C程序段: int x=9, y=-6, z1, z2; z1=x+y; z2=x-y; 問題:上述程

57、序段中,x和y的機(jī)器數(shù)是什么?z1和z2的機(jī)器數(shù)是 什么?回答:x的機(jī)器數(shù)為x補(bǔ), y的機(jī)器數(shù)為y補(bǔ) ; z1的機(jī)器數(shù)為x+y補(bǔ) ; z2的機(jī)器數(shù)為x-y補(bǔ) 。因此,計(jì)算機(jī)中需要有一個(gè)電路,能夠?qū)崿F(xiàn)以下功能:已知 x補(bǔ) 和 y補(bǔ) ,計(jì)算x+y補(bǔ) 和 x-y補(bǔ) 。根據(jù)補(bǔ)碼定義,有如下公式:x+y補(bǔ) =2n+x+y= 2n+x+2n+y= x補(bǔ)+y補(bǔ) (mod 2n )x-y補(bǔ)=2n+x-y= 2n+x+2n-y= x補(bǔ)+-y補(bǔ) (mod 2n )補(bǔ)碼的定義 假定補(bǔ)碼有n位,則:X補(bǔ)=2n +X (-2nX2n ,mod 2n)y補(bǔ)=y補(bǔ)+1n位整數(shù)加位整數(shù)加/減運(yùn)算器減運(yùn)算器利用帶標(biāo)志加法器,可

58、構(gòu)造整數(shù)加/減運(yùn)算器,進(jìn)行以下運(yùn)算:無符號(hào)整數(shù)加、無符號(hào)整數(shù)減帶符號(hào)整數(shù)加、帶符號(hào)整數(shù)減當(dāng)Sub為1時(shí),做減法當(dāng)Sub為0時(shí),做加法 補(bǔ)碼加減運(yùn)算公式A+B補(bǔ) = A補(bǔ) + B 補(bǔ) ( mod 2n )AB補(bǔ) = A補(bǔ) + B 補(bǔ) ( mod 2n ) 實(shí)現(xiàn)減法的主要工作在于:求B 補(bǔ)問題:如何求B補(bǔ)?B補(bǔ)=B補(bǔ)+1在整數(shù)加/減運(yùn)算部件基礎(chǔ)上,加上寄存器、移位器以及控制邏輯,就可實(shí)現(xiàn)ALU、乘/除運(yùn)算以及浮點(diǎn)運(yùn)算電路Sum加法器444AZFCinCout4B401MUXSubBOF整數(shù)加/減運(yùn)算部件SFCFB算術(shù)邏輯部件(算術(shù)邏輯部件(ALU) 進(jìn)行基本算術(shù)運(yùn)算與邏輯運(yùn)算 無符號(hào)整數(shù)加、減 帶

59、符號(hào)整數(shù)加、減 與、或、非、異或等邏輯運(yùn)算 核心電路是整數(shù)加/減運(yùn)算部件輸出除和/差等,還有標(biāo)志信息有一個(gè)操作控制端(ALUop),用來決定ALU所執(zhí)行的處理功能。ALUop的位數(shù)k決定了操作的種類,例如,當(dāng)位數(shù)k為3時(shí),ALU最多只有23=8種操作。ALUop Result ALUop Result ALUop Result ALUop Result 0 0 0 A加B 0 1 0 A與B 1 0 0 A取反 1 1 0 A 0 0 1 A減B 0 1 1 A或B 1 0 1 A B 1 1 1 未用回顧:認(rèn)識(shí)計(jì)算機(jī)中最基本的部件回顧:認(rèn)識(shí)計(jì)算機(jī)中最基本的部件CPU:中央處理器;PC:程序計(jì)

60、數(shù)器;MAR:存儲(chǔ)器地址寄存器ALU:算術(shù)邏輯部件;IR:指令寄存器;MDR:存儲(chǔ)器數(shù)據(jù)寄存器GPRs:通用寄存器組(由若干通用寄存器組成) 控制器CPU PC輸入設(shè)備輸出設(shè)備 MAR MDRALU標(biāo)志寄存器 IR地址數(shù)據(jù)控制GPRs0123存儲(chǔ)器01234567整數(shù)加、減運(yùn)算整數(shù)加、減運(yùn)算 C語言程序中的整數(shù)有 帶符號(hào)整數(shù),如char、short、int、long型等 無符號(hào)整數(shù),如unsigned char、unsigned short、unsigned等 指針、地址等通常被說明為無符號(hào)整數(shù),因而在進(jìn)行指針或地址運(yùn)算時(shí),需要進(jìn)行無符號(hào)整數(shù)的加、減運(yùn)算 無符號(hào)整數(shù)和帶符號(hào)整數(shù)的加、減運(yùn)算電路完全一樣,這個(gè)運(yùn)算電路稱為整數(shù)加減運(yùn)算部件,基于帶標(biāo)志加法器實(shí)現(xiàn) 最基本的加法器,因?yàn)橹挥衝位,所以是一種模2n運(yùn)算系統(tǒng)!例

溫馨提示

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

評(píng)論

0/150

提交評(píng)論