《計算機組成原理》課后題答案清華大學出版秦磊華吳非··.doc
第一章 系統(tǒng)給概論 習 題 一1.l 解釋下列名詞摩爾定律:對集成電路上可容納的晶體管數(shù)目、性能和價格等發(fā)展趨勢的預(yù)測,其主要內(nèi)容是:成集電路上可容納的晶體管數(shù)量每18個月翻一番,性能將提高一倍,而其價格將降低一半。主存: 計算機中存放正在運行的程序和數(shù)據(jù)的存儲器,為計算機的主要工作存儲器,可隨機存取。 控制器:計算機的指揮中心,它使計算機各部件自動協(xié)調(diào)地工作。 時鐘周期:時鐘周期是時鐘頻率的倒數(shù),也稱為節(jié)拍周期或T周期,是處理操作最基本的時間單位。 多核處理器:多核處理器是指在一枚處理器中集成兩個或多個完整的計算引擎(內(nèi)核)。字長:運算器一次運算處理的二進制位數(shù)。 存儲容量: 存儲器中可存二進制信息的總量。CPI:指執(zhí)行每條指令所需要的平均時鐘周期數(shù)。 MIPS:用每秒鐘執(zhí)行完成的指令數(shù)量作為衡量計算機性能的一個指標,該指標以每秒鐘完成的百萬指令數(shù)作為單位。 CPU時間:計算某個任務(wù)時CPU實際消耗的時間,也即CPU真正花費在某程序上的時間。 計算機系統(tǒng)的層次結(jié)構(gòu):計算機系統(tǒng)的層次結(jié)構(gòu)由多級構(gòu)成,一般分成5級,由低到高分別是:微程序設(shè)計級,機器語言級,操作系統(tǒng)級,匯編語言級,高級語言級。 基準測試程序:把應(yīng)用程序中使用頻度最高的那那些核心程序作為評價計算機性能的標準程序。軟/硬件功能的等價性:從邏輯功能的角度來看,硬件和軟件在完成某項功能上是相同的,稱為軟/硬件功能是等價的,如浮點運算既可以由軟件實現(xiàn),也可以由專門的硬件實現(xiàn)。固件:是一種軟件的固化,其目的是為了加快軟件的執(zhí)行速度??煽啃裕嚎煽啃允侵赶到y(tǒng)或產(chǎn)品在規(guī)定的條件和規(guī)定的時間內(nèi),完成規(guī)定功能的能力。產(chǎn)品可靠性定義的要素是三個“規(guī)定”:“規(guī)定條件”、“規(guī)定時間”和“規(guī)定功能”。 MTTF:平均無故障時間,指系統(tǒng)自使用以來到第一次出故障的時間間隔的期望值。 MTTR:系統(tǒng)的平均修復(fù)時間。 MTBF:平均故障間隔時間,指相鄰兩次故障之間的平均工作時間。 可用性:指系統(tǒng)在任意時刻可使用的概率,可根據(jù)MTTF、MTTR和MTBF等指標計算處系統(tǒng)的可用性。 1.2 什么是計算機系統(tǒng)的硬件和軟件?為什么說計算機系統(tǒng)的硬件和軟件在邏輯功能上是等價的?答:計算機硬件系統(tǒng)是指構(gòu)成計算機系統(tǒng)的電子線路和電子元件等物理設(shè)備的總稱。硬件是構(gòu)成計算機的物質(zhì)基礎(chǔ),是計算機系統(tǒng)的核心。計算機的硬件系統(tǒng)包含運算器、控制器、存儲器、輸入設(shè)備和輸出設(shè)備等五大部件。計算機軟件是計算機中全部程序的集合。軟件按其功能分成應(yīng)用軟件和系統(tǒng)軟件兩大類。計算機硬件實現(xiàn)的往往是最基本的算術(shù)運算和邏輯運算功能,而其它功能大多是通過軟件的擴充得以實現(xiàn)的。有許多功能可以由硬件實現(xiàn),也可以由軟件實現(xiàn),即從用戶的角度來看它們在功能上是等價的,這一等價性被稱為軟/硬件邏輯功能的等價性。1.3 馮諾依曼型計算機的基本思想是什么?按此思想設(shè)計的計算機硬件系統(tǒng)應(yīng)由哪些部件組成?各起什么作用?答:馮諾依曼型計算機的基本思想是存儲程序和程序控制,其中的“存儲程序”是指將解題的步驟編寫成程序,然后把存儲存放到計算機的內(nèi)存中,而“程序控制”是指控制器讀出存放在存儲器中的程序并根據(jù)該程序控制全機協(xié)調(diào)工作以完成程序的功能。 根據(jù)馮諾依曼型計算機的基本思想,計算機的硬件應(yīng)該由運算器、控制器、存儲器、輸入/輸出設(shè)備和總線組成。各部件的作用:運算器:對數(shù)據(jù)進行運算的部件。 存儲器:存放程序和數(shù)據(jù)。 控制器:根據(jù)指令的功能控制構(gòu)成計算機的各大功能部件協(xié)調(diào)工作,共同完成指令的功能。 輸入設(shè)備:將外部信息輸送到主機內(nèi)部的設(shè)備。 輸出設(shè)備:能將計算機內(nèi)部的信息以不同并且相應(yīng)的形式反饋給人們的設(shè)備。總線:連接兩個或多個設(shè)備(部件)的公共信息通路。1.4 什么是計算機字長?它取決于什么?計算機字長統(tǒng)一了哪些部件的長度?答:計算機的字長一般指一次參與運算數(shù)據(jù)的基本長度,用二進制數(shù)位的長度來衡量。它取決于運算器一次運算處理的二進制位數(shù)。它是計算機的重要性能指標。常用的計算機字長有8位、16位、32位及64位。一般與計算機內(nèi)部寄存器、加法器、數(shù)據(jù)總線的位數(shù)以及存儲器字長等長,因此,字長直接影響硬件的代價。1.5 計算機系統(tǒng)從功能上可劃分為哪些層次?各層次在計算機系統(tǒng)中起什么作用?答:計算機系統(tǒng)分成五級層次結(jié)構(gòu),第1級為微程序設(shè)計級、第2級為機器語言級、第3級為操作系統(tǒng)級、第4級為匯編語言級、第5級為高級語言級。各層次的作用:微程序級:為機器指令級提供機器指令的解釋指行功能。 機器指令級:是軟件系統(tǒng)和硬件系統(tǒng)的界面,一條機器指令的功能由微程序機器級的一段微型程序的功能實現(xiàn)。 操作系統(tǒng)級:調(diào)度計算機中的軟件和硬件資源。 匯編語言級:它將用戶編寫的接近人類語言的程序,翻譯成能在機器上運行的目標程序。高級語言級:完全面向用戶,是用戶關(guān)心的目標,可執(zhí)行各種用途的程序。1.6 計算機內(nèi)部有哪兩股信息在流動?它們彼此有什么關(guān)系?答:計算機中有兩股信息在流動:一股是控制信息,即操作命令,它分散流向各個部件;一股是數(shù)據(jù)信息,它受控制信息的控制,從一個部件流向另一個部件,在流動的過程被相應(yīng)的部件加工處理。1.7 為什么說計算機系統(tǒng)的軟件與硬件可以互相轉(zhuǎn)化?答:計算機硬件實現(xiàn)的往往是最基本的算術(shù)運算和邏輯運算功能,而其它功能大多是通過軟件的擴充得以實現(xiàn)的。有許多功能可以由硬件實現(xiàn),也可以由軟件實現(xiàn),即從用戶的角度來看它們在功能上是等價的,這一等價性被稱為軟/硬件邏輯功能的等價性。由于這樣的等價性,所以可以說計算機系統(tǒng)的軟件與硬件是可以互相轉(zhuǎn)化的。1.8 什么叫軟件系統(tǒng)?它包含哪些內(nèi)容?答:一臺計算機中全部程序的集合,統(tǒng)稱為這臺計算機的軟件系統(tǒng)。軟件按其功能分成應(yīng)用軟件和系統(tǒng)軟件兩大類。應(yīng)用軟件是用戶為解決某種應(yīng)用問題而編制的一些程序。系統(tǒng)軟件用于對計算機系統(tǒng)的管理、調(diào)度、監(jiān)視和服務(wù)等功能,常將系統(tǒng)軟件分為以下六類:操作系統(tǒng),言處理程序,標準程序庫,服務(wù)性程序,數(shù)據(jù)庫管理系統(tǒng)和算機網(wǎng)絡(luò)軟件。1.9 說明高級語言、匯編語言和機器語言三者之間的差別和聯(lián)系。答:機器語言是直接用二進制代碼指令表達的計算機語言,是一種面向機器的編程語言,屬于低級語言。匯編語言是用助記符號來表示計算機指令的語言,也是低級的語言。高級語言是一類接近于人類自然語言和數(shù)學語言的程序設(shè)計語言的統(tǒng)稱,分為面向過程的語言和面向?qū)ο蟮恼Z言。它們都是計算機的編程語言,并且是計算機編程語言發(fā)展的三個階段。三者各自的特點:使用機器語言編寫的程序,占用內(nèi)存少、執(zhí)行效率高。缺點:編程工作量大,容易出錯;依賴具體的計算機體系,因而程序的通用性、移植性都很差。使用匯編語言編寫計算機程序,能夠根據(jù)特定的應(yīng)用對代碼做最佳的優(yōu)化,提高運行速度;能夠最大限度地發(fā)揮硬件的功能。但是編寫的代碼非常難懂,不好維護;開發(fā)效率很低,時間長且單調(diào)。高級語言的優(yōu)點是:編程相對簡單、直觀、易理解、不容易出錯;編寫的計算機程序通用性好,具有較好的移植性。1.10 什么是系統(tǒng)的可靠性?衡量系統(tǒng)可靠性的指標有哪些?如何提高系統(tǒng)的可靠性?答:系統(tǒng)的可靠性是指系統(tǒng)在規(guī)定的條件和規(guī)定的時間內(nèi),完成規(guī)定功能的能力。衡量系統(tǒng)可靠性的指標有三個:平均無故障時間、平均故障間隔時間和可用性。提高系統(tǒng)可靠性的常用方法包括避錯和容錯。前者即避免錯誤的出現(xiàn),從而提高系統(tǒng)的平均無故障時間;后者容許錯誤的出現(xiàn),但采取有效的方法來防止其造成的不利影響。1.11 假定某計算機1和計算機2以不同的方式實現(xiàn)了相同的指令集,該指令集中共有A、B、C、D四類指令,它們在程序中所占比例分別為40%、20%、20%、20%,機器1和機器2的時鐘周期為600MHZ和800MHZ,各類指令在兩機器上的CPI如表1.5所示,求兩機器的MIPS各為多少?表1.5 兩臺計算機不同指令的CPI ABCDCPI12345CPI22234解:CPI1= 2*0.4+ 0.2*(3+4+5)= 3.2 MIPS1= f/(CPI1106) = 600106/(3.2106)=187.5 CPI2= 2*0.4+ 0.2*(2+3+4)= 2.6 MIPS2= f/(CPI1106) = 800106/(2.6106)=307.71.12 若某程序編譯后生成的目標代碼由A、B、C、D四類指令組成,它們在程序中所占比例分別為40%、20%、15%、25%。已知A、B、C、D四類指令的CPI分別為1、2、2、2?,F(xiàn)需要對程序進行編譯優(yōu)化,優(yōu)化后的程序中A類指令條數(shù)減少了一半,而其它指令數(shù)量未發(fā)生變化。假設(shè)運行該程序的計算機CPU主頻為500MHZ。完成下列各題:1)優(yōu)化前后程序的CPI各為多少?2)優(yōu)化前后程序的MIPS各為多少?3)通過上面的計算結(jié)果你能得出什么結(jié)論?解:1)優(yōu)化前:CPI= = 1 0.4 + 2 0.2 + 2 0.15 + 2 0.25= 1.6優(yōu)化后:A、B、C、D四類指令在程序中所占比例分別為1/4、1/4、3/16、5/16, CPI= = 1 1/4 + 2 1/4 + 2 3/16 + 2 5/16= 1.752)根據(jù) 公式MIPS =得優(yōu)化前:MIPS = (500106)/(1.6106) = 312.5優(yōu)化后:MIPS = (500106)/(1.75106) = 285.73)優(yōu)化后,A類指令條數(shù)減少,造成計算機的CPI增加,MIPS減少。這樣的優(yōu)化雖然減少了A類指令條數(shù),卻降低了程序的執(zhí)行速度。第二章 數(shù)據(jù)表示方法 習 題 二2.1解釋下列名詞真值:正號和負號分別用“+”和“-”表示,數(shù)據(jù)位保持二進制值不變的數(shù)據(jù)表示方法。數(shù)值數(shù)據(jù):計算機所支持的一種數(shù)據(jù)類型,用于科學計算,常見的數(shù)值數(shù)據(jù)類型包括小數(shù)、整數(shù)、浮點數(shù)數(shù)等。 非數(shù)值數(shù)據(jù):計算機所支持的一種數(shù)據(jù)類型,一般用來表示符號或文字等沒有數(shù)值值的數(shù)據(jù)。 機器數(shù):數(shù)據(jù)在機器中的表示形式,是正負符號數(shù)碼化后的二進制數(shù)據(jù)。 變形補碼:用兩個二進制位來表示數(shù)字的符號位,其余與補碼相同。即“00”表示正,“11”表示負。 規(guī)格化:將非規(guī)格化的數(shù)處理成規(guī)格化數(shù)的過程。規(guī)格化數(shù)規(guī)定尾數(shù)用純小數(shù)表示,且真值表示時小數(shù)點后第一位不為0(以機器數(shù)表示時對小數(shù)點后第一位的規(guī)定與具體的機器數(shù)的形式有關(guān))。 機器零:計算機保存數(shù)字的位有限,所能表示最小的數(shù)也有范圍,其中有一個范圍之中的數(shù)據(jù)無法精確表示,當實際的數(shù)據(jù)處在這個無法精確表示的數(shù)據(jù)范圍時計算機就將該數(shù)作為機器零來處理,因此,計算機中的機器零其實對應(yīng)的不是一個固定的數(shù),而是一個數(shù)據(jù)表示范圍。 BCD碼:用4位二進制數(shù)來表示1位十進制數(shù)中的09這10個數(shù)碼,即二進制表示的十進制數(shù)。 漢字內(nèi)碼:計算機內(nèi)部存儲、處理加工和傳輸漢字時所用的由0和1符號組成的代碼。碼距:一組編碼中對應(yīng)位上數(shù)字位不同的最小個數(shù)。 奇偶校驗:通過檢測校驗碼中1的個數(shù)的奇/偶性是否改變來判斷數(shù)據(jù)是否出錯的一種數(shù)據(jù)校驗方法。 海明校驗:是一種基于多重奇校驗且具有檢測與糾正錯誤的校驗方法。其基本原理是將有效信息按某種規(guī)律分成若干組,每組安排一個校驗位進行奇偶測試,就能提供多位檢錯信息,以指出最大可能是哪位出錯,從而將其糾正。循環(huán)冗余校驗:是數(shù)據(jù)通信領(lǐng)域中最常用的一種具有檢測與糾正錯誤能力差錯校驗碼,基利用生成多項式并基于模2運算建立編碼規(guī)則。檢錯:檢測被傳送的信息中是否發(fā)生差錯。 糾錯:糾正信息在傳送或存儲過程中所發(fā)生的錯誤。2.2回答下列問題1)為什么計算機中采用二進制?答:因為二進制具有運算簡單和表示簡單的優(yōu)點,除此之外還有可靠和容易實現(xiàn)等特點。具體來說,是因為:(1)技術(shù)實現(xiàn)簡單,計算機是由邏輯電路組成,邏輯電話通常只有兩個狀態(tài),開關(guān)的接通與斷開,這兩種狀態(tài)正好可以用“1”和“0”表示。 (2)簡化運算規(guī)則:兩個二進制數(shù)和、積運算組合各有三種,運算規(guī)則簡單,有利于簡化計算機內(nèi)部結(jié)構(gòu),提高運算速度。 (3)適合邏輯運算:邏輯代數(shù)是邏輯運算的理論依據(jù),二進制只有兩個數(shù)碼,正好與邏輯代數(shù)中的“真”和“假”相吻合。 (4)易于進行轉(zhuǎn)換,二進制與十進制數(shù)易于互相轉(zhuǎn)換。2)為什么計算機中采用補碼表示帶符號的整數(shù)?答:采用補碼運算具有如下兩個特征:(1)因為使用補碼可以將符號位和其他位統(tǒng)一處理,同時,減法也可以按加法來處理,即如果是補碼表示的數(shù),不管是加減法都直接用加法運算即可實現(xiàn)。(2)兩個用補碼表示的數(shù)相加時,如果最高位(符號位)有進位,則進位被舍棄。這樣的運算有兩個好處:(a)使符號位能與有效值部分一起參加運算,從而簡化運算規(guī)則。從而可以簡化運算器的結(jié)構(gòu),提高運算速度;(減法運算可以用加法運算表示出來。)(b)加法運算比減法運算更易于實現(xiàn)。使減法運算轉(zhuǎn)換為加法運算,進一步簡化計算機中運算器的線路設(shè)計。3)浮點數(shù)的表示范圍和精確度分別由什么決定?字長一定時浮點數(shù)的表示范圍與精確度之間有和關(guān)系?答:浮點數(shù)的表示范圍由階碼的位數(shù)決定,精確度由尾數(shù)的位數(shù)決定。當機器字長一定時,分給階碼的位數(shù)越多,尾數(shù)占用的位數(shù)就越少,則數(shù)的表示范圍越大。而尾數(shù)占用的位數(shù)減少,必然會減少數(shù)的有效數(shù)位,即影響數(shù)的精度。4)漢字輸入碼、機內(nèi)碼和字型碼在漢字處理過程中各有何作用?答:漢字輸入碼、機內(nèi)碼和字型碼,分別用于漢字的輸入、漢字在計算機內(nèi)的處理以及漢字的顯示和打印。具體來說,計算機要對漢字信息進行處理,首先要將漢字轉(zhuǎn)換成計算機可以識別的二進制形式并輸入到計算機,這是由漢字輸入碼完成的;漢字輸入到計算機后,還需要轉(zhuǎn)換成內(nèi)碼才能被計算機處理,顯然,漢字內(nèi)碼也應(yīng)該是二進制形式。如果需要顯示和打印漢字,還要將漢字的內(nèi)碼轉(zhuǎn)換成字形碼。5)在機內(nèi)碼中如何區(qū)分兩個ASCII碼字符和一個漢字?答:將一個漢字看成是兩個擴展ASCII碼,使表示GB2312漢字的兩個字節(jié)的最高位都為1,而每個ASCII碼字符中每個字節(jié)的最高位為0。這樣就能區(qū)別一個機內(nèi)碼到底對應(yīng)一個漢字還是兩個西文字符。6)“8421碼就是二進制數(shù)”。這種說法對嗎?為什么?答:這種說法是不對的。8421碼是一種最簡單的有權(quán)碼,它選取4位二進制數(shù)的前10個代碼00001001分別對應(yīng)表示十進制數(shù)的10個數(shù)碼。若按權(quán)求和,和數(shù)就等于該代碼所對應(yīng)的十進制數(shù)。8421碼是一種編碼方式,用于十進位制與二進制數(shù)之間的轉(zhuǎn)換。而二進制數(shù)是用0和1兩個數(shù)碼來表示的數(shù)。二者是不同的概念,不能等同。7)如何識別浮點數(shù)的正負?浮點數(shù)能表示的數(shù)值范圍和數(shù)值的精確度取決于什么?答:當采用一般浮點數(shù)格式表示浮點數(shù)時,階碼和尾數(shù)都各包含一位符號位。浮點數(shù)的正負由尾數(shù)的的符號位決定。當采用IEEE754格式時,通過數(shù)符就能判斷出浮點數(shù)的正負。浮點數(shù)能表示的數(shù)值范圍和數(shù)值的精確度,分別取決于階碼的位數(shù)和尾數(shù)的位數(shù)。8)簡述CRC的糾錯原理。答:發(fā)送部件將某信息的CRC碼傳送至接收部件,接收部件收到CRC碼后,仍用約定的生成多項式G(x)去除,若余數(shù)為0,表示傳送正確;若余數(shù)不為0,表示出錯,再由余數(shù)的值來確定哪一位出錯,從而加以糾正。具體的糾錯原理如下:(1)不論錯誤出現(xiàn)在哪一位,均要通過將出錯位循環(huán)左移到最左邊的一位上時被糾正;(2)不為零余數(shù)的具有循環(huán)特性。即在余數(shù)后面補一個零除以生成多項目式,將得到下一個余數(shù),繼續(xù)在新余數(shù)基礎(chǔ)上補零除以生成多項式,繼續(xù)該操作,余數(shù)最后能循環(huán)到最開始的余數(shù)。(3)CRC就是利用不為零余數(shù)的循環(huán)特性,在循環(huán)計算余數(shù)的同時,將收到的CRC編碼同步移動,當余數(shù)循環(huán)到等于最左邊位出錯對應(yīng)的余數(shù)時,表明已將出錯的位移到CRC碼的最左邊,對出錯位進行糾錯。(4)繼續(xù)進行余數(shù)的循環(huán)計算,并同步移動CRC編碼,當余數(shù)又回到最開始的值時,糾錯后的CRC碼又回到了最開始的位置。至此,完成CRC的糾錯任務(wù)。2.3 寫出下列各數(shù)的原碼、反碼和補碼。 0, 一0, 0.10101, 一0.10101, 0.11111, 一0.11111, 0.10000, 0.10000解:x=0,則0原 0.000 , 0 反 0.000,0補 0.000;x=-0,則0原 1.000,0反 1.11l,0補 0.000;x=0.10101,則x原 0.10101,x反 0.10101,x補 0.10101;x=一0.10101,則x原 1.10101,x反 1.01010,x補 1.01011;x=0.11111,則x原 0.11111,x反 0.00000,x補 0.00001;x=一0.11111,則x原 1.11111,x反 1.00000,x補 1.00001;x=0.10000,則x原 1.10000,x反 1.01111,x補 1.10000;x=0.10000,則x原 0.10000,x反 0.10000,x補 0.10000。2.4 已知數(shù)的補碼表示形式,求數(shù)的真值。x補0.10010, x補1.10010, x補1.11111, x補1.00000, x補0.10001, x補1.00001,解:x補0.10010,則x原0.10010,x=0.10010;x補1.10010,則x原1.01101,x=0.01101;x補1.11111,則x原1.00000,x=0;x補1.00000,則x原1.11111,x=0.11111;x補0.10001,則x原0.10001,x=0.10001;x補1.00001,則x原1.11110,x=0.11110。2.5 已知x0.10110,y0.01010,求:x/2補, x/4補, y/2補, 2y補解: x原=0.10110=x反=x補,所以x/2補=0.010110,x/4補=0.0010110;y原=1.01010,y反=1.10101,y補=1.10110,所以y/2補=1.110110,2y補=1.0110。2.6 C語言中允許無符號數(shù)和有符號整數(shù)之間的轉(zhuǎn)換, 下面是一段C語言代碼: Int x =-1; Unsigned u=2147483648;Printf (“x=%u=%dn”,x,x);Printf (“u=%u=%dn”,u,u); 給出在32位計算機中上述程序段的輸出結(jié)果并分析原因.解:x=4294967295=-1;u=2147483648=-2147483648原因:x是int型,在計算機中以補碼形式存在。%u以無符號輸出,%d輸出真值,所以x=4294967295=-1。u=231是一個無符號數(shù),無溢出,由于首位為1%u符號輸出第一位為非符號位,所以是2147483648%d 第一位為符號位,所以是負數(shù),取反加1還是231所以是-2147483648。2.7 分析下列幾種情況下所能表示的數(shù)據(jù)范圍分別是多少 1)16位無符號數(shù);2)16位原碼定點小數(shù);3)16位補碼定點小數(shù); 4) 16位補碼定點整數(shù);解:1)16位無符號數(shù):0 1111 1111 1111 1111,即0 216-1=655352)16位原碼定點小數(shù):1.111 1111 1111 1111 0.111 1111 1111 1111,即 -(1-2-15) 1-2-153)16位補碼定點小數(shù):1.000 0000 0000 0000 0.111 1111 1111 1111,即 -1 1-2-154) 16位補碼定點整數(shù):1000 0000 0000 0000 0111 1111 1111 1111,即 -215 215-12.8 用補碼表示8位二進制整數(shù),最高位用一位表示符號(即形如x0x1x2x3x4x5x6x7)時,模應(yīng)為多少?解:因為8位二進制數(shù)補碼的表示范圍為:-128127一共有256個數(shù),所以模為256。2.9 用IEEE754 32位浮點數(shù)標準表示十進制數(shù) a) b)3.1415927 c)64000解:a) 首先分別將整數(shù)和分數(shù)部分轉(zhuǎn)換成二進制數(shù): =-110.101移動小數(shù)點,使其變成1.M的形式:-110.101=-1.10101*22于是得到:S=0, e = 2,E= 10+01111111 = 10000001,M = 10101最后得到32位浮點數(shù)的二進制存儲格式為:1100 0000 1101 0100 0000 0000 0000 0000=(C0D40000)16b) 首先分別將整數(shù)和分數(shù)部分轉(zhuǎn)換成二進制數(shù):3.1415927=11.00100100001111110110101移動小數(shù)點,使其變成1.M的形式11.00100100001111110110101=1.1001001000011111101101012于是得到:S=0, e = 1,E= 1+01111111 =10000000,M = 10010010000111111011010最后得到32位浮點數(shù)的二進制存儲格式為:0100 0000 0100 1001 0000 1111 1101 1010=(40490FDA)16c) 首先將6400轉(zhuǎn)換成二進制數(shù):64000=1100100000000移動小數(shù)點,使其變成1.M的形式1100100000000=1.100100000000212于是得到:S=0, e = 12,E= 1100+01111111 =10001011,M = 1001最后得到32位浮點數(shù)的二進制存儲格式為:0100 0101 1100 1000 0000 0000 0000 0000=(45C80000) 162.10 求與IEEE754 32位浮點數(shù)43940000H對應(yīng)的十進制數(shù)。解:43940000H=(0100 0011 1001 0100 0000 0000 0000 0000)2S=0,E=(10000111)2-127=8,M=1.00101所以表示數(shù)為100101000,對應(yīng)的十進制數(shù)為296。2.11 求32位 IEEE754 浮點數(shù)能表示的最大數(shù)和最小數(shù)。解:用IEEE754格式(E的取值范圍:1254,留出全0和全1分別表示0和無窮大) 31 30 23 22 0SEM(1) 最大數(shù)的二進制表示:0 11111110 11111111111111111111111 即 2127(2-2-23)(2) 最小數(shù)的二進制表示:1 11111110 11111111111111111111111 即 - 2127(2-2-23)2.12 設(shè)有兩個正浮點數(shù):N12mM1,N22nM2。(1)若mn,是否有N1N2?(2)若M1和M2是規(guī)格化的數(shù),上述結(jié)論是否正確?解:(1)不一定。例如,N1230.001,N2220.01,此時mn,卻有N1N2。再如,N1230.001,N2220.1,此時mn,卻有N1N2。(2)正確。因為浮點數(shù)規(guī)格化,要求尾數(shù)的最高位為非0數(shù)碼,即當尾數(shù)的值不為零時,其絕對值應(yīng)大于或等于(1/2)10。那么M1和M2都必須是0.1 的形式。這時,若mn,則一定有N1N2。2.13 設(shè)二進制浮點數(shù)的階碼為3位,尾數(shù)是7位。用模2補碼寫出它們所能表示的最大正數(shù)、最小正數(shù)、最大負數(shù)和最小負數(shù),并將它們轉(zhuǎn)換成十進制數(shù)。解: 補碼 真值最大正數(shù): 011;0.111111, 23(1-2-6)最小正數(shù): 101;0.000001, 232-6最大負數(shù): 101;1.111111, -232-6最小負數(shù): 011;1.000000, -23(1-2-6)2.14 將下列十進制數(shù)表示成浮點規(guī)格化數(shù),階碼4位,尾數(shù)10位,各含1位符號,階碼和尾數(shù)均用補碼表示。(1)57/128 (2) 69/128解:(1)57/128=(0.0111001)2,記x=0.0111001,則x原=x反=x補=0.0111001,規(guī)格化:x補=0.111001*2-1階碼的原碼為:1001,因此補碼為:1111尾數(shù)為:0111001000表示成浮點規(guī)格化數(shù):1111 0111001000(2)-69/128=(-0.1000101)2,記x=-0.1000101,則x原=1.1000101,x反=1.0111010,x補=1.0111011,無需規(guī)格化,階碼為0000,尾數(shù)為1011101100表示成浮點規(guī)格化數(shù):0000 10111011002.15 設(shè)有效信息為01011011,分別寫出奇校驗碼和偶校驗碼。如果接收方收到的有效信息為01011010,說明如何發(fā)現(xiàn)錯誤。解:奇偶校驗位分別為:0和1,奇校驗碼:010110110偶校驗碼:010110111如果采用奇校驗,則發(fā)送方發(fā)出的奇校驗碼x=010110110(前8位是有效信息位,最后一位是校驗位),如果接收方收到的x=010110100 (只有1位出錯,最后一個0是校驗位), 接收方按奇校驗方式根據(jù)01011010計算得到的驗位C1 ,與從信息中讀到得校驗碼的取值不同,表明傳送的信息發(fā)生了錯誤。如果采用偶校驗,利用相似的方法可以發(fā)現(xiàn)錯誤。2.16由 6 個字符的 7 位 ASCII 編碼排列,再加上水平和垂直偶校驗位構(gòu)成如表2.23的行列結(jié)構(gòu)(最后一列為水平奇偶校驗位,最后一行為垂直奇偶校驗位)表2.23 ASCII碼交叉校驗字符7 位 ASCII 碼HP30X1X200110Y1100100X31+X41010110Y201X5X61111D100X710X80=0X9111X1011VP00111X111X12則 X1 X2 X3 X4 處的比特分別為 _1110_; X5 X6 X7 X8 處的比特分別為 _1000_; X9 X10 X11 X12 處的比特分別為 _1011_; Y1 和 Y2 處的字符分別為 _I_ 和 _7_。解答思路:利用交叉奇/偶校驗原理來確定各個X值,再查詢ASCII碼表獲知 Y1 和 Y2是什么字符。2.17 設(shè)8位有效信息為01101ll0,試寫出它的海明校驗碼。給出過程,說明分組檢測方式,并給出指誤字及其邏輯表達式。如果接收方收到的有效信息變成01101111,說明如何定位錯誤并糾正錯誤。解:被檢驗位有8位,設(shè)檢驗位有r位因為:8+r<=2r -1 r=4; 設(shè)四位分別為P1,P2,P3,P4 海明碼為:P1P20P3110P41110 P1:3,5,7,9,11 P2:3,6,7,10,11 P3:5,6,7,12 P4:9,10,11,12所以 P1=1,P2=1 P3=0 P4=1海明碼為:110011011110指錯位G1:1,3,5,7,9,11 G2:2,3,6,7,10,11 G3:4,5,6,7,12 G4:8,9,10,11,12 G1=0,G2=0,G3=0,G4=0圖略。2.18 設(shè)要采用CRC編碼傳送的數(shù)據(jù)信息x=1001,當生成多項式為G(x)1101時,請寫出它的循環(huán)校驗碼。若接收方收到的數(shù)據(jù)信息x=1101,說明如何定位錯誤并糾正錯誤。解:作模二除法:所以循環(huán)碼為:1001011。若接收到的數(shù)據(jù)信息x=1101,所以是第2位出錯,將第2位的1改為0即可。第三章 運算方法和運算器 習 題 三3.1解釋下列名詞變形形補碼:即用兩個二進制位來表示數(shù)據(jù)的符號位,其余與補碼相同。 溢出:運算結(jié)果超出數(shù)據(jù)類型所能表示數(shù)據(jù)范圍的現(xiàn)象稱為溢出。 陣列乘法:采用類似手工乘法運算的方法,用大量與門產(chǎn)生手工乘法中的各乘積項,同時將大量一位全加器按照手工乘法算式中需要進行加運算的各相關(guān)項的排列方式組成加法器陣列。 恢復(fù)余數(shù)除法:比較被除數(shù)(余數(shù))與除數(shù)的大小是用減法實現(xiàn)的。對原碼除法而言,由于操作數(shù)以絕對值的形式參與運算,因此,相減結(jié)果為正(余數(shù)的符號位為0)說明夠減,商上1;相減結(jié)果為負(余數(shù)的符號位為1)說明不夠減,商上0。由于除法通過減法實現(xiàn),當商上1時,可將比較數(shù)據(jù)大小時的減法操作與除法操作中的減法操作合并,即商上1后繼續(xù)后面的除法操作。商上0時表明不夠減,但因比較操作時已經(jīng)實施了一次減法,因此,需要對執(zhí)行比較操作后的結(jié)果加上除數(shù),既將余數(shù)還原成比較操作前的數(shù)值,這種方法就稱為恢復(fù)余數(shù)法。不恢復(fù)余數(shù)除法:又稱加減交替法,是對恢復(fù)余數(shù)法的改進。不恢復(fù)余數(shù)法的特點是不夠減時不再恢復(fù)余數(shù),而根據(jù)余數(shù)的符號作相應(yīng)處理就可繼續(xù)往下運算,因此運算步數(shù)固定,控制簡單,提高了運算速度。陣列除法:類似于陣列乘法器的思想,為了加快除法的執(zhí)行速度,也可以采用陣列除法器來實現(xiàn)除法。為簡化運算及陣列除法器的結(jié)構(gòu),對參加運算的數(shù)據(jù)進行適當?shù)奶幚?,使其以正?shù)的形式參加運算。 行波進位:多位進位之間存在高位進位的產(chǎn)生依賴低位進位的一種進位方式。并行進位:高、低進位之間不存在具有依存關(guān)系,而是同時計算的進位方式。算術(shù)移位:分為算術(shù)左移和算術(shù)右移。其中算數(shù)左移n位相當于乘上2n,執(zhí)行方法是把原來的數(shù)中每一位都向左移動n個位置,左面移出的高位丟棄不要,右面低位空出的位置上全部補0,當符號位發(fā)生改變時表明發(fā)生了溢出。算術(shù)右移時,符號位保持不變,其余各位依次右移,最右邊一位移出,將符號位拷貝到左邊空出的位,一次移位相當于除2。邏輯移位:邏輯左移n位的執(zhí)行方法,是把原來的數(shù)中每一位都向左移動n個位置,左面移出的高位丟棄不要,右面低位空出的位置上全部補"0"。 邏輯右移n位的執(zhí)行方法是把原來數(shù)中的每一位都向右移動n個位置,右面移出的低位丟棄不要,左面高位空出的位置上全部補0。對階:使階碼相等的過程,對階的時一般采取小的階碼向大階碼看齊的方式。 規(guī)格化:就是使浮點數(shù)的運算結(jié)果中,將尾數(shù)從非規(guī)格化數(shù)變成規(guī)格化數(shù)的過程。根據(jù)尾數(shù)形式的不同,規(guī)格化可分為左移規(guī)格化和右移規(guī)格化。3.2回答下列問題: 1)為什么采用并行進位能提高加法器的運算速度? 答:由于并行進位電路能很快產(chǎn)生各位的進位信號,使得加法器的速度大大提高。2)如何判斷浮點數(shù)運算結(jié)果是否發(fā)生溢出? 答:由于溢出與數(shù)據(jù)的表示范圍有關(guān),而浮點數(shù)的階碼影響到其數(shù)據(jù)表示的范圍,因此,浮點數(shù)的溢出是通過接碼的是否溢出為判斷標志。對于采用雙符號位的階碼而言,當雙符號位不同時表示浮點數(shù)發(fā)生溢出,否則則未發(fā)生溢出。3)如何判斷浮點數(shù)運算結(jié)果是否為規(guī)格化數(shù)?如果不是規(guī)格化數(shù),如何進行規(guī)格化? 答:當尾數(shù)采用補碼表示時,若運算結(jié)果不是11.0或00.1的形式時,結(jié)果就不是規(guī)格化數(shù)。則應(yīng)進行相應(yīng)的規(guī)格化處理:當尾數(shù)符號為01或10時,需要向右規(guī)格化,且只需將尾數(shù)右移一位,同時將結(jié)果的階碼值加1。當尾數(shù)運算結(jié)果為11.1或00.0時需要左移規(guī)格化,而且左移次數(shù)不固定,與運算結(jié)果的形式有關(guān)。左規(guī)的方法是尾數(shù)連同符號位一起左移位、和的階碼減1,直到尾數(shù)部分出現(xiàn)11.0或00.1的形式為止。4)為什么陣列除法器中能用CAS的進位/借位控制端作為上商的控制信號? 答:陣列除法器利用不恢復(fù)余數(shù)的除法,當商上1的時候,會產(chǎn)生進位,當商上0時,不產(chǎn)生進位,進位信號與上商信號是相同的,所以可以用CAS的進位/借位控制作為上商的控制信號。5)移位運算和乘法及除法運算有何關(guān)系?答:移位運算是乘除法中的基本運算。3.3 已知x和y,用變形補碼計算xy,并判斷結(jié)果是否溢出。 (1) x0.11010,y0.101110 (2) x0.11101,y0.10100 (3) x0.10111,y0.11000 解:(1)x+y補=01.100010,溢出。(2)x+y補=00.01001,未溢出。(3)x+y補=10.10001,溢出。3.4 已知x和y,用變形補碼計算xy,并判斷結(jié)果是否溢出。 (1) x0.11011,y0.11101 (2) x0.10111,y0.11110 (3) x0.11111,y0.11001 解:(1)x-y補=11.11110,未溢出。(2)x-y補=11.11001,未溢出。(1)x-y補=11.11001,未溢出。3.5 設(shè)移碼用6位表示(包含2位符號位),求x y移(1)x = -6 , y = -3(2)x=7 , y =11(3)x=-3 , y =-12 解:(1)x移=001010,y移= 001101 -y移=110011 Y補= 111101 -Y補= 000011 X移 + y移=010111,X移 + Y補= 001010+111101 =000111根據(jù)移碼加法公式x + y移=X移 + Y補= 000111根據(jù)移碼加法公式及溢出判斷規(guī)則,雙符號位為00,結(jié)果為負,未溢出。根據(jù)移碼的減法公式: -y移 = 移 + -y補= 001010 + 000011 = 001101根據(jù)移碼溢出判斷規(guī)則,雙符號位為00,結(jié)果為負,未溢出。(2)x移=110111, y補= 001011 -y補=110101根據(jù)移碼加法公式x + y移=X移 + Y補= 010111+ 001011 = 100010 (根據(jù)教材中說明的當以譯碼和補碼兩種數(shù)據(jù)表示進行運算時,要將移碼第一符號位表示為0)根據(jù)移碼溢出判斷規(guī)則,雙符號位為10,結(jié)果為正,且發(fā)生溢出。根據(jù)移碼的減法公式: -y移 = 移 + -y補= 010111+ 110101 = 001100根據(jù)移碼溢出判斷規(guī)則,雙符號位為00,結(jié)果為負,未溢出。(3)略,請參照本題前兩小題的思路和方法求解即可3.6用原碼一位乘法計算xy?(1) x0.11111,y0.11101(2) x0.11010,y0.01011解:(1)部分積 乘數(shù)(y) 判斷位 說明 00.00000 yf.11101 P00 00.11111 00.11111 00.01111 1 yf.1110 右移一位,得P1 00.00000 00.01111 00.00111 11 yf.111 右移一位,得P2 00.11111 01.00110 00.10011 011 yf.11 右移一位,得P3 00.11111 01.10010 00.11001 0011 y.1 右移一位,得P4 00.1111101.11000 00.1110000011 yf 右移一位,得P5|x|y|由于 Pfxfyf011所以 xy -0.1110000011(2)部分積 乘數(shù)(y) 判斷位 說明 00.00000 yf. 01011 P00 00.11010 00.11010 00.01101 0 yf.0101 右移一位,得P1 00.11010 01.00111 00.10011 10 yf.010 右移一位,得P2 00.00000 00.10011 00.01001 110 yf.01 右移一位,得P3 00.11010 01.00011 00.10001 1110 y.0 右移一位,得P4 00.0000000.10001 00.01000 11110 yf 右移一位,得P5|x|y|由于 Pfxfyf110所以 xy 0.01000111103.7用補碼一位乘法計算xy?(1) x0.10110,y0.00011(2) x0.011010,y0.011101解:(1)x補0.10110, x補1.01010, y補=1.11101 部分積 乘數(shù) ynyn1 說明 00.00000 1.111010 yn1011.01010 yn1yn01,加x補 11.01010 11.10101 0 1.11101 右移一位,得P1 00.10110 yn1yn10,加x補 00.01011 00.00101 10 1.1110 右移一位,得P2 11.01010 yn1yn01,加-x補11.01111 11.10111 110 1.111 右移一位,得P3 00.00000 yn1yn11,加0 11.10111 11.11011 1110 1.11 右移一位,得P4 00.00000 yn1yn11,加0 11.11011 11.11101 11110 1.1右移一位,得P500.00000 yn1yn11,加011.11101 11110 最后一步數(shù)據(jù)不移位 所以 xy補1.1110111110 (2) x補1.100110, x補0.011010, y補=1.100011 部分積 乘數(shù) ynyn1 說明 00.000000 1.1000110 yn1000.011010 yn1yn01,加x補 00.011010 00.001101 0 1.100011 右移一位,得P1 00.000000 yn1yn11,加0 00.001101 00.000110 10 1.10001 右移一位,得P2 11.100110 yn1yn10,加x補11.101100 11.110110 010 1.1000 右移一位,得P3 00.000000 yn1yn00,加0 11.110110 11.111011 0010 1.100 右移一位,得P4 00.000000 yn1yn00,加0 11.111011 11.111101 100101.10右移一位,得P5 00.011010 yn1yn01,加x補00.010111 00.001011 110010 1.1 右移一位,得P600.000000yn1yn00,加000.001011 110010最后一步數(shù)據(jù)不移位 所以 xy補0.001011110010 3.8用原碼不恢復(fù)余數(shù)法和補碼不恢復(fù)余數(shù)法計算xy ?(1) x0.10101,y0.11011(2) x0.10101,y0.11011解:(1)y補0.11011,y補1.001011源碼不恢復(fù)余數(shù)法:101被除數(shù)/余數(shù) 商寄存器 上商位 說明 00.10101y補 11.00101 (xy)比較 11.11010 0 r00,商上0 1