計(jì)算機(jī)原理常見問題大全_第1頁
計(jì)算機(jī)原理常見問題大全_第2頁
計(jì)算機(jī)原理常見問題大全_第3頁
計(jì)算機(jī)原理常見問題大全_第4頁
計(jì)算機(jī)原理常見問題大全_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計(jì)算機(jī)原理常見問題大全第一章計(jì)算機(jī)系統(tǒng)概論1.計(jì)算機(jī)系統(tǒng)就是硬件系統(tǒng)嗎?答:說計(jì)算機(jī)系統(tǒng)就是硬件系統(tǒng)是不完整的。一個(gè)完整的計(jì)算機(jī)系統(tǒng)應(yīng)該包括硬件系統(tǒng)和軟件系統(tǒng)兩部分。硬件系統(tǒng)包括:運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五大基本部件。軟件系統(tǒng)分為系統(tǒng)軟件和應(yīng)用軟件兩大類。系統(tǒng)軟件包括操作系統(tǒng)、計(jì)算機(jī)語言處理程序(各種程序翻譯軟件,包括編譯程序、解釋程序、匯編程序)、服務(wù)性程序、數(shù)據(jù)庫管理系統(tǒng)和網(wǎng)絡(luò)軟件等;應(yīng)用軟件包括各種特定領(lǐng)域的處理程序。計(jì)算機(jī)系統(tǒng)中的硬件和軟件是相輔相成的,缺一不可。軟件是計(jì)算機(jī)系統(tǒng)的靈魂,沒有軟件的硬件不能被用戶使用,猶如一堆廢鐵。2.同一個(gè)功能可以由軟件完成也可以由硬件完成嗎?答:軟件和硬件是兩種完全不同的形態(tài),硬件是實(shí)體,是物質(zhì)基礎(chǔ);軟件是一種信息,看不見、摸不到。但是它們都可以用來實(shí)現(xiàn)邏輯功能,所以在邏輯功能上,軟件和硬件是等價(jià)的。因此,在計(jì)算機(jī)系統(tǒng)中,許多功能既可以直接由硬件實(shí)現(xiàn),也可以在硬件的配合下由軟件來實(shí)現(xiàn)。例如:乘法運(yùn)算既可以用專門的乘法器(主要由加法器和移位器組成)實(shí)現(xiàn),也可以用乘法子程序(主要由加法指令和移位指令等組成)來實(shí)現(xiàn)。3.翻譯程序就是編譯程序嗎?解釋程序和編譯程序有什么差別?什么是匯編程序?答:翻譯程序是指把高級語言源程序翻譯成機(jī)器語言程序(目標(biāo)代碼)的軟件。翻譯程序有兩種:一種是編譯程序,另一種是解釋程序。它們是兩種不同的翻譯程序。不同在于編譯程序?qū)⒏呒壵Z言源程序一次全部翻譯成目標(biāo)程序,每次執(zhí)行程序時(shí),只要執(zhí)行目標(biāo)程序,因此,只要源程序不變,就無需重新翻譯;解釋程序是將源程序的一條語句,翻譯成對應(yīng)的機(jī)器目標(biāo)代碼,并立即執(zhí)行,然后翻譯下一條源程序語句并執(zhí)行,直至所有源程序中的語句全部被翻譯并執(zhí)行完。所以解釋程序的執(zhí)行過程是翻譯一句,執(zhí)行一句。解釋的結(jié)果是源程序執(zhí)行的結(jié)果,而不會(huì)生成目標(biāo)程序。匯編程序也是一種語言翻譯程序,它是把匯編語言寫的源程序翻譯為機(jī)器語言程序(目標(biāo)代碼)的軟件。匯編語言是一種面向機(jī)器的低級語言,是機(jī)器語言的符號(hào)表示,與機(jī)器語言一一對應(yīng)。4.要計(jì)算機(jī)做的任何工作都要先編寫成程序才能完成嗎?答:是的。要計(jì)算機(jī)完成的任何事情,都必須先編制程序,程序是由指令構(gòu)成的。不管是用哪種語言編寫的程序,最終都要翻譯成機(jī)器語言程序才能讓機(jī)器理解,機(jī)器語言程序是由一條一條指令組成的程序。CPU的主要功能就是周而復(fù)始地執(zhí)行指令,因此,要計(jì)算機(jī)完成的所有功能都是通過執(zhí)行一條一條指令來實(shí)現(xiàn)的,也就是由一個(gè)程序來完成的。有時(shí)我們說某個(gè)特定的功能是由硬件實(shí)現(xiàn)的,但并不是說不要編寫程序,如乘法功能可由乘法器這個(gè)硬件實(shí)現(xiàn),但要啟動(dòng)這個(gè)硬件(乘法器)工作,必須先執(zhí)行程序中的乘法指令。5.指令和數(shù)據(jù)形式上沒有差別,且都存于存儲(chǔ)器中,計(jì)算機(jī)如何區(qū)分它們呢?答:指令和數(shù)據(jù)在計(jì)算機(jī)內(nèi)部都是用二進(jìn)制表示的,因而都是0、1序列,在形式上沒有差別。在指令和數(shù)據(jù)取到CPU之前,它們都存放在存儲(chǔ)器中,CPU必須能夠區(qū)分讀出的是指令還是數(shù)據(jù),如果是指令,CPU會(huì)把指令的操作碼送到指令譯碼器進(jìn)行譯碼,而把指令的地址碼送到相應(yīng)的地方進(jìn)行處理;如果是數(shù)據(jù),則送到寄存器,或運(yùn)算器。那么,CPU如何識(shí)別讀出的是指令還是數(shù)據(jù)呢?實(shí)際上,CPU并不是把信息從主存讀出后,靠某種判斷方法來識(shí)別信息是數(shù)據(jù)還是指令的。而是在讀出之前就知道將要讀的信息是數(shù)據(jù)還是指令了。執(zhí)行指令的過程分為:取指令、指令譯碼、取操作數(shù)、運(yùn)算、送結(jié)果等。所以,在取指令階段,總是根據(jù)程序計(jì)數(shù)器PC的值去取指令,所以取來的一定是指令;取操作數(shù)階段取的一定是數(shù)據(jù)。6.什么叫透明性?透明是指什么都能看見嗎?答:在計(jì)算機(jī)領(lǐng)域中,站在某一類用戶的角度,如果感覺不到某個(gè)事物或?qū)傩缘拇嬖?,即“看”不到某個(gè)事物或?qū)傩?,則稱為“對xxxx用戶而言,某個(gè)事物或?qū)傩允峭该鞯摹?。這與日常生活中的“透明”概念(公開、看得見)正好相反。例如:對于高級語言程序員來說,浮點(diǎn)數(shù)格式、乘法指令等這些指令的格式、數(shù)據(jù)如何在運(yùn)算器中運(yùn)算,等等,是透明的;而對于機(jī)器語言程序員和匯編語言程序員來說,指令的格式、機(jī)器結(jié)構(gòu)、數(shù)據(jù)格式等則不是透明的。7.數(shù)據(jù)通路寬度、機(jī)器字長、“字”寬、存儲(chǔ)單元寬度、編址單位、總線寬度、指令字長各指什么?它們之間有何關(guān)系?答:在計(jì)算機(jī)內(nèi)部,有指令和數(shù)據(jù)兩大類信息。指令和數(shù)據(jù)都以二進(jìn)制形式存放在存儲(chǔ)器中,運(yùn)行程序時(shí),需要把指令和數(shù)據(jù)從存儲(chǔ)器讀出,通過總線傳輸?shù)紺PU,然后,CPU再通過執(zhí)行指令來對操作數(shù)進(jìn)行相應(yīng)的運(yùn)算,最后把結(jié)果數(shù)據(jù)送到寄存器或存儲(chǔ)器中。所以,在設(shè)計(jì)或使用計(jì)算機(jī)過程中,要涉及到:指令和數(shù)據(jù)在存儲(chǔ)器中按什么長度存放;寫入或讀出時(shí)按什么長度存??;在總線上傳輸時(shí)同時(shí)傳送多少位;數(shù)據(jù)和指令送到CPU后,在CPU的寄存器中按多少位存放;在運(yùn)算器中按多少位運(yùn)算;等等問題。因而出現(xiàn)了以下一些概念,它們的定義和關(guān)系如下:“數(shù)據(jù)通路”是指數(shù)據(jù)在CPU中所經(jīng)過的路徑,連同路徑上的部件,包括:通用寄存器、多路選擇器、符號(hào)擴(kuò)展器、零擴(kuò)展器、ALU、移位寄存器等。這些部件的寬度和數(shù)據(jù)傳送的路徑寬度都是一致的,這個(gè)一致的寬度就是數(shù)據(jù)通路的寬度。CPU中有定點(diǎn)運(yùn)算器和浮點(diǎn)運(yùn)算器,因而,相對應(yīng)的就有定點(diǎn)運(yùn)算器的數(shù)據(jù)通路和浮點(diǎn)運(yùn)算器數(shù)據(jù)通路。兩者的寬度不同,浮點(diǎn)運(yùn)算器的數(shù)據(jù)通路要寬的多?!皺C(jī)器字長”是計(jì)算機(jī)的一個(gè)非常重要的指標(biāo)。通常稱32位機(jī)器或64位機(jī)器,就是指機(jī)器的字長是32位或64位。一般情況下,機(jī)器字長定義為CPU中在同一時(shí)間內(nèi)一次能夠處理的二進(jìn)制數(shù)的位數(shù),實(shí)際上就是CPU中數(shù)據(jù)通路的位數(shù)。因?yàn)闄C(jī)器字長與內(nèi)存單元的地址位數(shù)有關(guān),而地址計(jì)算是在定點(diǎn)運(yùn)算器中進(jìn)行的。所以,一般把定點(diǎn)運(yùn)算器的數(shù)據(jù)通路寬度定為機(jī)器字長。在計(jì)算機(jī)中,“字”的概念經(jīng)常出現(xiàn)。一個(gè)“字”的寬度并不等于機(jī)器字長?!白帧弊鳛闄C(jī)器中所有信息寬度的計(jì)量單位,對于某個(gè)系列機(jī)來說,其字寬總是固定的。例如,在80x86系列中,一個(gè)字的寬度為16位,因此,32位是雙字,64位是四字。在IBM303X系列中,一個(gè)字的寬度為32位,所以16位為半字,32位為單字、64位為雙字?!按鎯?chǔ)單元”指存儲(chǔ)器中具有相同地址的若干個(gè)存儲(chǔ)元件(或稱存儲(chǔ)元、存儲(chǔ)基元、記憶單元)構(gòu)成的一個(gè)存儲(chǔ)單元中的二進(jìn)制代碼,其寬度等于一個(gè)編址單位的長度,可以是8位、16位、32位等?,F(xiàn)在,大多數(shù)計(jì)算機(jī)是按字節(jié)編址的,即:每一個(gè)字節(jié)(8位)有一個(gè)地址,編址單位就是一個(gè)字節(jié),所以一個(gè)存儲(chǔ)單元的寬度(位數(shù))是8位。由此可見,一個(gè)數(shù)據(jù)(如:32位整數(shù)、32位浮點(diǎn)數(shù)或64位浮點(diǎn)數(shù)等)可能占多個(gè)存儲(chǔ)單元。一次從存儲(chǔ)器讀出或?qū)懭氲男畔⒁部赡苡卸鄠€(gè)存儲(chǔ)單元?!爸噶钭珠L”指指令的位數(shù)。有定長指令字機(jī)器和不定長指令字機(jī)器。定長指令字機(jī)器中所有指令的位數(shù)是相同的,目前定長指令字大多是32位指令字。不定長指令字機(jī)器的指令有長有短,但每條指令的長度一般都是8的倍數(shù)。所以,一個(gè)指令字在存儲(chǔ)器中存放時(shí),可能占用多個(gè)存儲(chǔ)單元;從存儲(chǔ)器讀出并通過總線傳輸時(shí),可能分多次進(jìn)行,也可能一次讀多條指令。第二章運(yùn)算方法和運(yùn)算器1.真值和機(jī)器數(shù)的關(guān)系是什么?答:在計(jì)算機(jī)內(nèi)部用二進(jìn)制編碼表示的數(shù)稱為機(jī)器數(shù),而機(jī)器數(shù)真正的值(即原來帶有正負(fù)號(hào)的數(shù))稱為機(jī)器數(shù)的真值。2.什么是編碼?答:用少量簡單的基本符號(hào),對大量復(fù)雜多樣的信息進(jìn)行一定規(guī)律的組合?;痉?hào)的種類和組合規(guī)則是信息編碼的兩大要素。例如,用10個(gè)阿拉伯?dāng)?shù)字表示數(shù)值,電報(bào)碼中用4位十進(jìn)制數(shù)字表示漢字,等等,都是編碼的典型例子。計(jì)算機(jī)內(nèi)部處理的所有信息都是“數(shù)字化編碼”了的信息。3.什么是“數(shù)字化編碼”?答:“數(shù)字化編碼”就是對感覺媒體信息(如:數(shù)值、文字、圖像、聲音、視頻等信息)進(jìn)行定時(shí)采樣,將現(xiàn)實(shí)世界中的連續(xù)信息轉(zhuǎn)換為計(jì)算機(jī)中的離散的“樣本”信息,然后對這些離散的“樣本”信息進(jìn)行二進(jìn)制編碼。4.計(jì)算機(jī)內(nèi)部為什么用二進(jìn)制來編碼所有信息?答:主要有三個(gè)方面的原因:(1)二進(jìn)制系統(tǒng)只有兩個(gè)基本符號(hào):“0”和“1”。所以,它的基本符號(hào)少,易于用穩(wěn)態(tài)電路實(shí)現(xiàn);(2)二進(jìn)制的編碼/計(jì)數(shù)/運(yùn)算等的規(guī)則簡單;(3)二進(jìn)制中的“0”和“1”與邏輯命題的“真”和“假”的對應(yīng)關(guān)系簡單5.什么叫數(shù)值數(shù)據(jù)?答:數(shù)值數(shù)據(jù)有確定的值,即在數(shù)軸上能找到其對應(yīng)的點(diǎn),可以比較其大小。確定一個(gè)數(shù)值數(shù)據(jù)的值有三個(gè)要素:進(jìn)位計(jì)數(shù)制、定/浮點(diǎn)表示和數(shù)的編碼表示。也就是說,給定一個(gè)數(shù)字序列,如果不說明這個(gè)數(shù)字序列是幾進(jìn)制數(shù)、小數(shù)點(diǎn)的位置在哪里、采用什么編碼方式,那么這個(gè)數(shù)字序列的值是無法確定的?;蛘哒f,同一個(gè)數(shù)字序列可能有不同的值。6.計(jì)算機(jī)內(nèi)都用二進(jìn)制表示信息,為什么還要引入八進(jìn)制和十六進(jìn)制?答:計(jì)算機(jī)內(nèi)部在進(jìn)行信息的存儲(chǔ)、傳送和運(yùn)算時(shí),都是以二進(jìn)制形式來表示信息的。但在屏幕上或書本上書寫信息時(shí),由于二進(jìn)制信息位數(shù)多,閱讀、記憶也不方便。而十六進(jìn)制、八進(jìn)制和二進(jìn)制的對應(yīng)關(guān)系簡單。所以引入十六進(jìn)制或八進(jìn)制。在開發(fā)程序、調(diào)試程序、閱讀機(jī)器內(nèi)部代碼時(shí),人們經(jīng)常使用八進(jìn)制或十六進(jìn)制來等價(jià)地表示二進(jìn)制信息。7.如何表示一個(gè)數(shù)值數(shù)據(jù)?計(jì)算機(jī)中的數(shù)值數(shù)據(jù)都是二進(jìn)制數(shù)嗎?答:在計(jì)算機(jī)內(nèi)部,數(shù)值數(shù)據(jù)的表示方法有兩大類:①直接用二進(jìn)制數(shù)表示分為無符號(hào)數(shù)和有符號(hào)數(shù),有符號(hào)數(shù)又分為定點(diǎn)數(shù)表示和浮點(diǎn)數(shù)表示。無符號(hào)數(shù)用來表示無符號(hào)整數(shù)(如:地址等信息);定點(diǎn)數(shù)用來表示整數(shù);浮點(diǎn)數(shù)用來表示實(shí)數(shù)。②采用二進(jìn)制編碼的十進(jìn)制數(shù)表示(BinaryCodedDecimalNumber,簡稱BCD碼)BCD碼的編碼方案很多,但一般都采用8421碼(也稱為NBCD碼)來表示。用來表示整數(shù)。所以,計(jì)算機(jī)中的數(shù)值數(shù)據(jù)雖然都用二進(jìn)制來編碼表示,但不全是二進(jìn)制數(shù),也有用十進(jìn)制數(shù)表示的。所以,后面一章有關(guān)指令類型中,就有對應(yīng)的二進(jìn)制加法指令和十進(jìn)制加法指令。8.為什么要引入無符號(hào)數(shù)表示?答:一般在全部是正數(shù)運(yùn)算且結(jié)果不出現(xiàn)負(fù)值的場合下,可以省略符號(hào)位,使用無符號(hào)數(shù)表示。例如在進(jìn)行地址運(yùn)算時(shí)可用無符號(hào)數(shù)。9.在高級語言編程中所定義的unsigned型數(shù)據(jù)是怎么表示的?答:unsigned型數(shù)據(jù)就是無符號(hào)數(shù),不考慮符號(hào)位,直接用二進(jìn)制對數(shù)值進(jìn)行編碼得到的就是無符號(hào)數(shù)。10.為什么無符號(hào)整數(shù)結(jié)果會(huì)發(fā)生“溢出”?什么叫無符號(hào)整數(shù)的“溢出”?答:計(jì)算機(jī)的機(jī)器字長總是有限的,因而機(jī)器數(shù)的位數(shù)有限,所以可表示的數(shù)的個(gè)數(shù)有限。對于n位二進(jìn)制數(shù),只能表示2n個(gè)不同的數(shù),因此有很多數(shù)用n位無法表示。對于無符號(hào)定點(diǎn)整數(shù)來說,計(jì)算機(jī)運(yùn)算過程中一般保留低n位,舍棄高位。這樣,會(huì)產(chǎn)生兩種結(jié)果:①剩下的低n位數(shù)不能正確表示運(yùn)算結(jié)果。這種情況下,意味著運(yùn)算的結(jié)果超出了計(jì)算機(jī)能表達(dá)的范圍,有效數(shù)值進(jìn)到了第n+1位,我們稱此時(shí)發(fā)生了“溢出”現(xiàn)象。②剩下的低n位數(shù)能正確表達(dá)計(jì)算結(jié)果,也即高位的舍去并不影響其運(yùn)算結(jié)果?!皊pan對一個(gè)多于n位的數(shù)丟棄高位而保留低n位數(shù)”這樣一種處理,實(shí)際上等價(jià)于“將這個(gè)多于n位的數(shù)去除以2n,然后丟去商保留其余數(shù)”的操作。這種操作運(yùn)算就是“模運(yùn)算”。在一個(gè)模運(yùn)算系統(tǒng)中,運(yùn)算的結(jié)果最終都是丟棄高位,只截取低n位。所以,只要不是“溢出”,即:只要真正的值不會(huì)進(jìn)到第n+1位,結(jié)果就是正確的。這是模運(yùn)算系統(tǒng)的特點(diǎn)。11.為什么現(xiàn)代計(jì)算機(jī)都用補(bǔ)碼來表示整數(shù)?答:補(bǔ)碼表示定點(diǎn)整數(shù)時(shí),和原碼、反碼相比,有以下四個(gè)好處:(1)符號(hào)位可以和數(shù)值位一起參加運(yùn)算(2)可以用加法方便地實(shí)現(xiàn)減法運(yùn)算(3)零的表示唯一(4)可以多表示一個(gè)最小負(fù)數(shù)所以,現(xiàn)代計(jì)算機(jī)都用補(bǔ)碼來表示定點(diǎn)整數(shù)。12.n位二進(jìn)制補(bǔ)碼整數(shù)的模是多少?數(shù)的表示范圍是多什么?答:n位二進(jìn)制補(bǔ)碼整數(shù)的模是2n,表示只保留低n位,多于n位的高位部分取模后要被丟棄掉。這種形式的數(shù)的范圍為-2(n-1)~+2(n-1)-1。13.在高級語言編程中定義的shotr/int/long型數(shù)據(jù)是怎么表示的?答:int型數(shù)據(jù)就是定點(diǎn)整數(shù),現(xiàn)代計(jì)算機(jī)一般用補(bǔ)碼表示。int型數(shù)據(jù)的位數(shù)與運(yùn)行平臺(tái)和編譯器有關(guān),一般是32位或16位。long型數(shù)據(jù)和short型數(shù)據(jù)也都是定點(diǎn)整數(shù),用補(bǔ)碼表示,只是位數(shù)不同,分別是長整型和短整型數(shù)。14.定點(diǎn)整數(shù)在數(shù)軸上分布的點(diǎn)之間都是等距的嗎?答:是的。定點(diǎn)整數(shù)在數(shù)軸上的點(diǎn)總是在整數(shù)值上,即:[……,-5,-4,-3,-2,-1,0,1,2,3,4,5,……],相鄰數(shù)據(jù)間隔總是1。15.定點(diǎn)整數(shù)運(yùn)算要考慮加保護(hù)位和舍入嗎?答:不需要。整數(shù)運(yùn)算的結(jié)果還是整數(shù),沒有誤差,無需考慮加保護(hù)位,也無需考慮舍入。但運(yùn)算結(jié)果可能會(huì)“溢出”。16.為什么要引入浮點(diǎn)數(shù)表示?答:因?yàn)槎c(diǎn)數(shù)不能表示實(shí)數(shù),而且表數(shù)范圍小。所以,要引入浮點(diǎn)數(shù)表示。17.為什么浮點(diǎn)數(shù)的階(指數(shù))要用移碼表示?答:因?yàn)樵诟↑c(diǎn)數(shù)的加減運(yùn)算中,要進(jìn)行對階操作,需要比較兩個(gè)階的大小。移碼表示的實(shí)質(zhì)就是把階加上一個(gè)偏置常數(shù),使得所有數(shù)的階碼都是一個(gè)正整數(shù),比較大小時(shí),就只要按高位到低位順序比較就行了,因而,引入移碼可以簡化階的比較過程。18.浮點(diǎn)數(shù)如何表示0?答:用一種專門的位序列表示0,例如,IEEE754單精度浮點(diǎn)數(shù)中,用“00000000H”表示+0,用“80000000H”表示-0。當(dāng)運(yùn)算結(jié)果出現(xiàn)階碼過小時(shí),計(jì)算機(jī)將該數(shù)近似表示為0。19.現(xiàn)代計(jì)算機(jī)中采用什么標(biāo)準(zhǔn)來表示浮點(diǎn)數(shù)?答:早期的計(jì)算機(jī)各自采用不同的浮點(diǎn)數(shù)表示格式,因而,在不同計(jì)算機(jī)之間進(jìn)行數(shù)據(jù)交換時(shí),就會(huì)發(fā)生數(shù)據(jù)不統(tǒng)一的問題。因而,提出專門制定了IEEE754標(biāo)準(zhǔn)用來規(guī)定計(jì)算機(jī)中的浮點(diǎn)數(shù)表示格式。所以,現(xiàn)代計(jì)算機(jī)中都采用IEEE754標(biāo)準(zhǔn)來表示浮點(diǎn)數(shù)。20.如何判斷一個(gè)浮點(diǎn)數(shù)是否是規(guī)格化數(shù)?答:為了使浮點(diǎn)數(shù)中能盡量多地表示有效位數(shù),一般要求運(yùn)算結(jié)果用規(guī)格化數(shù)形式表示。規(guī)格化浮點(diǎn)數(shù)的尾數(shù)小數(shù)點(diǎn)后的第一位一定是個(gè)非零數(shù)。因此,對于原碼編碼的尾數(shù)來說,只要看尾數(shù)的第一位是否為1就行;對于補(bǔ)碼表示的尾數(shù),只要看符號(hào)位和尾數(shù)最高位是否相反。21.浮點(diǎn)數(shù)表示的精度和數(shù)值范圍取決于什么?在浮點(diǎn)數(shù)總位數(shù)不變的情況下,階碼位數(shù)越多,則尾數(shù)位數(shù)越少。即:表數(shù)范圍越大,則精度越差(數(shù)變稀疏)。22.基數(shù)的大小對表數(shù)范圍和精度有什么影響?答:基數(shù)越大,則范圍越大,但精度變低(數(shù)變稀疏)。23.在高級語言編程中定義的float/double型數(shù)據(jù)是怎么表示的?答:float型數(shù)據(jù)是用來表示實(shí)數(shù)的浮點(diǎn)數(shù)。現(xiàn)代計(jì)算機(jī)用IEEE754標(biāo)準(zhǔn)表示浮點(diǎn)數(shù),其中32位單精度浮點(diǎn)數(shù)就是float型。64位雙精度浮點(diǎn)數(shù)就是double型。24.位數(shù)相同的定點(diǎn)數(shù)和浮點(diǎn)數(shù)中,可表示的浮點(diǎn)數(shù)個(gè)數(shù)比定點(diǎn)數(shù)個(gè)數(shù)多嗎?答:不是的。可表示的數(shù)據(jù)個(gè)數(shù)取決于編碼所采用的位數(shù)。編碼位數(shù)一定,則編碼出來的數(shù)據(jù)個(gè)數(shù)就是一定的。n位編碼只能表示2n個(gè)數(shù),所以,對于相同位數(shù)的定點(diǎn)數(shù)和浮點(diǎn)數(shù)來說,可表示的數(shù)據(jù)個(gè)數(shù)應(yīng)該一樣多。(有時(shí)可能由于一個(gè)值可能有兩個(gè)或多個(gè)編碼對應(yīng),編碼個(gè)數(shù)會(huì)有少量差異。但總體上是一樣的。)25.如何進(jìn)行BCD碼的編碼?答:每位十進(jìn)制數(shù)的取值可以是0/1/2/…/9這十個(gè)數(shù)之一,因此,每一個(gè)十進(jìn)制數(shù)位必須至少有4位二進(jìn)制位來表示。而4位二進(jìn)制位可以組合成16種狀態(tài),去掉10種狀態(tài)后還有6種冗余狀態(tài),所以從16種狀態(tài)中選取10種狀態(tài)表示十進(jìn)制數(shù)位0~9的方法很多,可以產(chǎn)生多種BCD碼方案。大的方面可分為有權(quán)碼和無權(quán)碼兩種。有權(quán)碼指表示每個(gè)十進(jìn)制數(shù)位的四個(gè)二進(jìn)制數(shù)位(稱為基2碼)都有一個(gè)確定的權(quán)。8421碼是最常用的十進(jìn)制有權(quán)碼,ASCII碼的數(shù)字編碼采用的就是8421碼;無權(quán)碼指表示每個(gè)十進(jìn)制數(shù)位的四個(gè)基2碼沒有確定的權(quán)?,F(xiàn)代計(jì)算機(jī)中大多用8421有權(quán)碼。26.邏輯數(shù)據(jù)在計(jì)算機(jī)中如何表示?如何運(yùn)算?答:邏輯數(shù)據(jù)用來表示命題的“真”和“假”,分別用“1”和“0”來表示。進(jìn)行邏輯運(yùn)算時(shí),按位進(jìn)行。27.漢字的區(qū)位碼、國標(biāo)碼和機(jī)內(nèi)碼有什么區(qū)別?答:GB2312字符集由94行、94列組成,行號(hào)稱為區(qū)號(hào),列號(hào)稱為位號(hào),各占7位,共14位,區(qū)號(hào)在左、位號(hào)在右,稱為漢字的區(qū)位碼,它指出了該漢字在碼表中的位置。漢字的國標(biāo)碼是將區(qū)號(hào)、位號(hào)各加上32(即16進(jìn)制的20H)后,再在前后各7位前加0。漢字的內(nèi)碼需2個(gè)字節(jié)才能表示,可以在國標(biāo)碼的基礎(chǔ)上產(chǎn)生漢字機(jī)內(nèi)碼。一般是將國標(biāo)碼兩個(gè)字節(jié)的第一位置“1”后得到內(nèi)碼。28.已知一個(gè)漢字的國標(biāo)碼為343AH,其區(qū)位碼和機(jī)內(nèi)碼各是什么?答:區(qū)位碼是國標(biāo)碼的前后兩個(gè)字節(jié)各減32(即:20H),所以得區(qū)位碼為:343AH-2020H=141AH,所以區(qū)號(hào)為20,位號(hào)為26;機(jī)內(nèi)碼是國標(biāo)碼的兩個(gè)字節(jié)的最前一位變?yōu)?,所以,機(jī)內(nèi)碼為B4BAH。29.定點(diǎn)整數(shù)(用補(bǔ)碼表示)運(yùn)算時(shí),如何判斷結(jié)果溢出?答:可以采用雙符號(hào)位檢測和單符號(hào)位檢測兩種判斷方法。1)雙符號(hào)位:采用“變形補(bǔ)碼”進(jìn)行補(bǔ)碼運(yùn)算和溢出檢測。其判斷規(guī)則為:“當(dāng)結(jié)果的兩個(gè)符號(hào)位不同時(shí),發(fā)生溢出”。2)單符號(hào)位:異號(hào)數(shù)相加不會(huì)溢出;對于同號(hào)數(shù)相加,則有兩種判斷規(guī)則:規(guī)則1:“若結(jié)果的符號(hào)與兩個(gè)加數(shù)的符號(hào)不同,則發(fā)生溢出。”規(guī)則2:“若最高位的進(jìn)位和次高位的進(jìn)位不同,則發(fā)生溢出。30.什么是浮點(diǎn)數(shù)的溢出?什么情況下發(fā)生上溢?什么情況下發(fā)生下溢?答:浮點(diǎn)數(shù)的運(yùn)算結(jié)果可能出現(xiàn)以下幾種情況:1)階碼上溢:當(dāng)一個(gè)正指數(shù)超過了最大允許值,此時(shí),浮點(diǎn)數(shù)發(fā)生上溢(即:向∞方向溢出)。如果結(jié)果是正數(shù),則發(fā)生正上溢(有的機(jī)器把值置為+∞);如果是負(fù)數(shù),則發(fā)生負(fù)上溢(有的機(jī)器把值置為-∞)。這種情況為軟件故障,通常要引入溢出故障處理程序來處理。2)階碼下溢:當(dāng)一個(gè)負(fù)指數(shù)比最小允許值還小,此時(shí),浮點(diǎn)數(shù)發(fā)生下溢。一般機(jī)器把下溢時(shí)的值置為0(+0或-0)。不發(fā)生溢出故障。3)尾數(shù)溢出:當(dāng)尾數(shù)最高有效位有進(jìn)位時(shí),發(fā)生尾數(shù)溢出。此時(shí),進(jìn)行“右規(guī)”操作:尾數(shù)右移一位,階碼加1,直到尾數(shù)不溢出為止。此時(shí),只要階碼不發(fā)生上溢,則浮點(diǎn)數(shù)不會(huì)溢出。4)非規(guī)格化尾數(shù):當(dāng)數(shù)值部分高位出現(xiàn)0時(shí),尾數(shù)為非規(guī)格化形式。此時(shí),進(jìn)行“左規(guī)”操作:尾數(shù)左移一位,階碼減1,直到尾數(shù)為規(guī)格化形式為止。31.為什么浮點(diǎn)數(shù)運(yùn)算中要增加保護(hù)位?答:為了使數(shù)據(jù)有效位在右移時(shí)最大限度地保證不丟失,一般在運(yùn)算中間值后面增加若干數(shù)據(jù)位,這些位用來保存右移后的有效數(shù)據(jù)。增設(shè)保護(hù)位后,能保證運(yùn)行的中間結(jié)果的有效位數(shù),但最終必須將結(jié)果的保護(hù)位去掉,以得到規(guī)定格式的浮點(diǎn)數(shù),此時(shí)要考慮舍入。32.浮點(diǎn)數(shù)如何進(jìn)行舍入?答:舍入方法選擇的原則是:(1)盡量使誤差范圍對稱,使得平均誤差為0,即:有舍有入,以防誤差積累。(2)方法要簡單,以加快速度。IEEE754有四種舍入方式:(1)就近舍入:舍入為最近可表示的數(shù),若結(jié)果值正好落在兩個(gè)可表示數(shù)的中間,則一般選擇舍入結(jié)果為偶數(shù)。(2)正向舍入:朝+∞方向舍入,即:取右邊的那個(gè)數(shù)。(3)負(fù)向舍入:朝-∞方向舍入,即:取左邊的那個(gè)數(shù)。(4)截去:朝0方向舍入。即:取絕對值較小的那個(gè)數(shù)。33.無符號(hào)加法器如何實(shí)現(xiàn)?答:計(jì)算機(jī)中,最基本的加法器是無符號(hào)加法器。根據(jù)進(jìn)位方式的不同,有兩種不同的實(shí)現(xiàn)方式:串行和并行。(1)串行進(jìn)位加法器(行波進(jìn)位加法器):通過n個(gè)全加器按照串行方式連起來實(shí)現(xiàn)(2)并行進(jìn)位加法器(先行進(jìn)位加法器):通過引入進(jìn)位生成函數(shù)和進(jìn)位傳遞函數(shù),使得進(jìn)位之間相互獨(dú)立,并行產(chǎn)生。也稱為快速加法器。34.補(bǔ)碼加法器如何實(shí)現(xiàn)?答:在補(bǔ)碼系統(tǒng)內(nèi),兩個(gè)n位數(shù)做補(bǔ)碼加法的原則是:兩個(gè)n位數(shù)的補(bǔ)碼相加,其結(jié)果中最高位的進(jìn)位丟掉(模運(yùn)算系統(tǒng))。所以可用一個(gè)n位無符號(hào)加法器生成各位的和。但是,最終的結(jié)果是否正確,取決于結(jié)果是否溢出,只要不溢出,結(jié)果一定是正確的。因此,補(bǔ)碼加法器只要在無符號(hào)加法器的基礎(chǔ)上再增加“溢出判斷電路”即可。35.在補(bǔ)碼加法器中,如何實(shí)現(xiàn)減法運(yùn)算?答:補(bǔ)碼減法的規(guī)則是:求兩個(gè)數(shù)的差的補(bǔ)碼,可用第一個(gè)數(shù)的補(bǔ)碼加上另一數(shù)負(fù)數(shù)的補(bǔ)碼得到。由此可見,減法運(yùn)算可在加法器中運(yùn)行。只要在加法器的一個(gè)輸入端輸入減數(shù)的負(fù)數(shù)的補(bǔ)碼。求一個(gè)數(shù)的負(fù)數(shù)的補(bǔ)碼電路稱為“負(fù)數(shù)求補(bǔ)電路”??梢酝ㄟ^“各位取反、末尾加1”來實(shí)現(xiàn)“負(fù)數(shù)求補(bǔ)電路”。36.現(xiàn)代計(jì)算機(jī)中是否要考慮原碼加/減運(yùn)算?如何實(shí)現(xiàn)?答:因?yàn)楝F(xiàn)代計(jì)算機(jī)中浮點(diǎn)數(shù)采用IEEE754標(biāo)準(zhǔn),所以在進(jìn)行兩個(gè)浮點(diǎn)數(shù)加減運(yùn)算時(shí),必須考慮原碼的加減運(yùn)算。因?yàn)?,IEEE754規(guī)定浮點(diǎn)數(shù)的尾數(shù)都用原碼表示。原碼的加減運(yùn)算可以有以下兩種方式實(shí)現(xiàn):(1)轉(zhuǎn)換為補(bǔ)碼后,用補(bǔ)碼加減法實(shí)現(xiàn),結(jié)果再轉(zhuǎn)換為原碼(2)直接用原碼加減運(yùn)算,符號(hào)和數(shù)值部分分開進(jìn)行。其步驟如下:–比較兩個(gè)操作數(shù)的符號(hào)加法--實(shí)行“同號(hào)求和,異號(hào)求差”減法--實(shí)行“異號(hào)求和,同號(hào)求差”–求和:數(shù)值位相加若最高位產(chǎn)生進(jìn)位,則溢出若最高位無進(jìn)位,則和的符號(hào)位為被加(減)數(shù)的符號(hào)–求差:被加(減)數(shù)的數(shù)值位加上加(減)數(shù)數(shù)值位的補(bǔ)碼若最高位有進(jìn)位,則結(jié)果為正,說明數(shù)值位正確,差的符號(hào)位為被加(減)數(shù)的符號(hào);若最高位無進(jìn)位,則結(jié)果為負(fù),得到的數(shù)值位為補(bǔ)碼形式,故需對結(jié)果求補(bǔ),差的符號(hào)位與被加(減)數(shù)的符號(hào)位相反37.加法器的運(yùn)算速度取決于什么?答:在門電路延遲一定的情況下,加法器的速度主要取決于進(jìn)位方式,并行進(jìn)位方式比串行進(jìn)位方式的速度快。38.計(jì)算機(jī)內(nèi)部如何實(shí)現(xiàn)移位操作?答:在計(jì)算機(jī)內(nèi)部,移位操作在移位器中進(jìn)行,移位器位數(shù)固定,所以,移位前后數(shù)的位數(shù)不變。左移一位,數(shù)值擴(kuò)大一倍,相當(dāng)于乘2操作;右移一位,數(shù)值縮小一半,相當(dāng)于除2操作。移位操作分邏輯移位、算術(shù)移位和循環(huán)移位三種。邏輯移位對無符號(hào)數(shù)進(jìn)行,移位規(guī)則為:左移時(shí),高位移出,低位補(bǔ)0右移時(shí),低位移出,高位補(bǔ)0算術(shù)移位是對帶符號(hào)數(shù)進(jìn)行的,移位時(shí)符號(hào)位不變,只對數(shù)值部分移位。移位規(guī)則為:①原碼左移:高位移出,末位補(bǔ)0。移出非零時(shí),發(fā)生溢出。右移:高位補(bǔ)0,低位移出。移出時(shí)進(jìn)行舍入操作。②補(bǔ)碼左移:高位移出,末位補(bǔ)0。移出非符時(shí),發(fā)生溢出。右移:高位補(bǔ)符,低位移出。移出時(shí)進(jìn)行舍入操作。循環(huán)移位對無符號(hào)數(shù)進(jìn)行,移位時(shí)把高(低)位移出的一位送到低(高)位即可。39.計(jì)算機(jī)內(nèi)部如何實(shí)現(xiàn)填充(擴(kuò)展)操作?答:在計(jì)算機(jī)內(nèi)部,有時(shí)需要將一個(gè)取來的短數(shù)擴(kuò)展為一個(gè)長數(shù),此時(shí)要進(jìn)行填充(擴(kuò)展)處理。對于無符號(hào)整數(shù),只要在高位補(bǔ)0,進(jìn)行“零擴(kuò)展”。對于有符號(hào)數(shù),則可能有兩種情況:1)對于定點(diǎn)整數(shù),在符號(hào)位后的數(shù)值高位進(jìn)行。①原碼:符號(hào)位不變,數(shù)值部分高位補(bǔ)0②補(bǔ)碼:高位直接補(bǔ)符,稱為“符號(hào)擴(kuò)展”方式2)對于定點(diǎn)小數(shù)表示的浮點(diǎn)數(shù)的尾數(shù),則在低位補(bǔ)0即可。40.在計(jì)算機(jī)中,乘法和除法運(yùn)算如何實(shí)現(xiàn)?答:乘法和除法運(yùn)算是通過加/減運(yùn)算和左/右移位運(yùn)算來實(shí)現(xiàn)的。所以只要用加法器和移位寄存器在CPU的控制下就可以實(shí)現(xiàn)。第三章存儲(chǔ)系統(tǒng)1.ROM是一種和RAM一樣的隨機(jī)存取存儲(chǔ)器嗎?答:是的。雖然經(jīng)常把只讀存儲(chǔ)器ROM和隨機(jī)訪問存儲(chǔ)器RAM放在一起進(jìn)行分類,但ROM的存取方式和RAM是一樣的,都是通過對地址進(jìn)行譯碼,選擇某個(gè)單元進(jìn)行讀寫。所以兩者采用的都是隨機(jī)存取方式。不同的是:ROM是只讀的,RAM是可讀可寫的。在程序執(zhí)行過程中,ROM存儲(chǔ)區(qū)只能讀出信息,不能修改,而RAM區(qū)可以讀出,也可以修改信息。2.寄存器和主存儲(chǔ)器都是用來存放信息的,它們有什么不同?答:寄存器在CPU中,用觸發(fā)器來實(shí)現(xiàn),速度極快,價(jià)格高,容量只有幾十個(gè),多的機(jī)器也只有幾百個(gè),主要用來暫存指令運(yùn)行時(shí)的操作數(shù)和結(jié)果。主存儲(chǔ)器在CPU之外,用MOS管電路實(shí)現(xiàn),速度沒有寄存器快,價(jià)格也比寄存器便宜,目前主存容量可以達(dá)到4GB左右,用來存放已被啟動(dòng)的程序代碼和數(shù)據(jù)。3.存取時(shí)間Ta就是存儲(chǔ)周期Tm嗎?答:不是。存取時(shí)間Ta是執(zhí)行一次讀操作或?qū)懖僮鞯臅r(shí)間。分為讀出時(shí)間和寫入時(shí)間。讀出時(shí)間為從主存接受到有效地址開始到數(shù)據(jù)取出有效為止的時(shí)間;寫入時(shí)間是從主存接受到有效地址開始到數(shù)據(jù)寫入被寫單元為止的時(shí)間。存儲(chǔ)周期Tm是指存儲(chǔ)器進(jìn)行連續(xù)兩次獨(dú)立的讀或?qū)懖僮魉璧淖钚r(shí)間間隔。所以存取時(shí)間Ta不等于存儲(chǔ)周期Tm。通常存儲(chǔ)周期Tm大于存取時(shí)間Ta。對于破壞性讀出DRAM,Tm約為Ta的兩倍。4.刷新和再生是一回事嗎?答:不是一回事。對某個(gè)單元的刷新和再生操作過程是一樣的,即讀后恢復(fù)。但再生操作是隨機(jī)的,只對所讀單元進(jìn)行;而刷新操作則是按順序定時(shí)對一行一行進(jìn)行的。5.刷新是一個(gè)個(gè)芯片按順序完成的嗎?答:不是。刷新按行進(jìn)行,每一行中的記憶單元同時(shí)被刷新,僅需要行地址,不需要列地址。刷新行號(hào)由DRAM芯片的刷新控制電路中的刷新計(jì)數(shù)器產(chǎn)生。整個(gè)存儲(chǔ)器中的所有芯片的相同行同時(shí)進(jìn)行刷新,所以不是一個(gè)一個(gè)芯片按順序進(jìn)行的,而是單個(gè)芯片的所有行按順序定時(shí)一行一行進(jìn)行的。6.主存都是由RAM組成的嗎?答:不是。主存是由RAM和ROM兩部分組成的,它們統(tǒng)一編址,分別占用不同的地址空間。7.程序員是否需要知道高速緩存的訪問過程?答:不需要。高速緩存Cache的訪問過程對程序員來說,是透明的。執(zhí)行到一條指令時(shí),需要到內(nèi)存取指令,有些指令還要訪問內(nèi)存取操作數(shù)或存放運(yùn)算結(jié)果。采用Cache的計(jì)算機(jī)系統(tǒng)中,總是先到Cache去訪問指令或數(shù)據(jù),沒有找到才到主存去訪問。這個(gè)過程是CPU在執(zhí)行指令過程中自動(dòng)完成的。程序員不需要知道要找的指令和數(shù)據(jù)在不在Cache中、該在Cache的哪一塊中,等等,也不需要知道Cache的訪問過程,只要在指令中給定內(nèi)存單元的地址就行了。8.主存和Cache分塊時(shí),是否字塊越大,命中率越高?答:不是。字塊大,可以充分利用程序訪問的空間局部性特點(diǎn),字塊大使得一個(gè)比較大的局部空間被一起調(diào)到Cache中,因而可以增加命中機(jī)會(huì)。但是,字塊不能太大。主要原因有兩個(gè):(1)字塊大使失效損失變大,也就是說,如果不命中的話,需花更多時(shí)間從主存讀塊。(2)字塊太大,則Cache項(xiàng)數(shù)變少,因而,命中的可能性變小。9.指令和數(shù)據(jù)都是放在同一個(gè)Cache中的嗎?答:現(xiàn)代計(jì)算機(jī)系統(tǒng)中,一般采用多級的Cache系統(tǒng)。CPU執(zhí)行指令時(shí),先到速度最快的一級Cache(L1Cache)中尋找指令或數(shù)據(jù),找不到時(shí),再到速度次快的二級Cache(L2Cache)中找,……最后到主存中找。對于一級Cache,指令和數(shù)據(jù)一般是分開存放的。因此,有L1DataCache和L1CodeCache。10.Cache可以做在CPU芯片里面嗎?答:可以。早期的計(jì)算機(jī),其Cache是做在主板上的。但隨著CPU芯片技術(shù)的提高,Cache可以做在CPU里面。從邏輯上來說,Cache是位于CPU和主存之間的部件,但在物理上,Cache被封裝在一個(gè)CPU芯片內(nèi)?,F(xiàn)代計(jì)算機(jī)系統(tǒng)中,一般采用多級的Cache系統(tǒng)。CPU執(zhí)行指令時(shí),先到速度最快的一級Cache(L1Cache)中尋找指令或數(shù)據(jù),找不到時(shí),再到速度次快的二級Cache(L2Cache)中找,……最后再到主存中找。目前,一級Cache和二級Cache都可以封裝在CPU芯片中。11.直接映射方式下是否需要考慮替換方式?為什么?答:無需考慮。因?yàn)?,在直接映射方式下,一個(gè)給定的主存塊只能放到一個(gè)唯一的固定Cache槽中,所以,在對應(yīng)Cache槽已有一個(gè)主存塊的情況下,新的主存塊毫無選擇地把原先已有的那個(gè)主存塊替換掉,因而無需考慮替換算法。第四章指令系統(tǒng)1.一臺(tái)計(jì)算機(jī)中的所有指令都是一樣長嗎?答:不一定。有定長指令字機(jī)器和不定長指令字機(jī)器兩種。定長指令字機(jī)器中所有指令都一樣長,稱為規(guī)整型指令,目前定長指令字大多是32位指令字。不定長指令字機(jī)器的指令有長有短,但每條指令的長度一般都是8的倍數(shù)。所以,一個(gè)指令字在存儲(chǔ)器中存放時(shí),可能占用多個(gè)存儲(chǔ)單元;從存儲(chǔ)器讀出并通過總線傳輸時(shí),可能分多次進(jìn)行,也可能一次讀多條指令。2.每一條指令中都包含操作碼嗎?答:是的。每一條指令都必須告訴CPU該指令做什么操作,所以必須指定操作碼。3.每條指令中的地址碼個(gè)數(shù)都一樣嗎?答:不一定,有的沒有地址碼,有的包含一個(gè)地址碼,有的是兩個(gè)或三個(gè)。地址碼個(gè)數(shù)不一樣的主要原因有三個(gè):(1)每條指令操作碼的個(gè)數(shù)可能不同。有的指令是雙目運(yùn)算指令,涉及到兩個(gè)源操作數(shù)和目操作數(shù),有的是單目運(yùn)算,只涉及到一個(gè)源操作數(shù)和目操作數(shù),還有的指令只是控制操作,不涉及到操作數(shù),如:停機(jī)、復(fù)位、空操作等指令。所以每條指令涉及到的操作數(shù)個(gè)數(shù)不同。(2)每個(gè)操作數(shù)的尋址方式可能不同。不同的尋址方式給出的地址碼個(gè)數(shù)也不同。(3)地址碼的缺省方式可能不同。有的操作數(shù)或地址碼用的是隱含指定方式,在指令中缺省,不明顯給出,如:累加器,堆棧等。綜上所述,每條指令的操作碼個(gè)數(shù)可能相差很大。4.指令中的所有操作數(shù)都采用相同的尋址方式嗎?答:不一定。規(guī)整型指令一般在一條指令中只包含一種尋址方式,這樣,在指令操作碼中就隱含了尋址方式,不需要專門有尋址方式字段。但是對于不規(guī)整型指令,一條指令中的若干操作數(shù)可能存放在不同地方,因而每個(gè)操作數(shù)可能有各自的尋址方式。5.指令中要明顯給出下一條指令的地址嗎?答:不需要。指令在主存中按執(zhí)行順序連續(xù)存放。大多數(shù)情況下指令被順序執(zhí)行,只有遇到轉(zhuǎn)移指令(如,無條件轉(zhuǎn)移、條件分支、調(diào)用和返回等指令)才改變指令執(zhí)行的順序。所以,可以用一個(gè)專門的計(jì)數(shù)器,來存放下一條要執(zhí)行的指令地址,而不需要在指令中專門給出下一條指令的地址。這個(gè)計(jì)數(shù)器稱為程序計(jì)數(shù)器PC或指令指針I(yè)P。當(dāng)順序執(zhí)行時(shí),CPU直接通過對PC加“1”來使PC指向下一條順序執(zhí)行的指令;當(dāng)執(zhí)行到轉(zhuǎn)移指令時(shí),根據(jù)指令執(zhí)行的結(jié)果進(jìn)行相應(yīng)的地址運(yùn)算,把運(yùn)算得到的轉(zhuǎn)移目標(biāo)地址送到PC中,使得執(zhí)行的下一條指令為轉(zhuǎn)移到的目標(biāo)指令。6.一個(gè)操作數(shù)在內(nèi)存可能占多個(gè)單元,怎樣在指令中給出操作數(shù)的地址呢?答:現(xiàn)代計(jì)算機(jī)都是采用字節(jié)編址方式,即一個(gè)內(nèi)存單元只能存放一個(gè)字節(jié)的信息。一個(gè)操作數(shù)(如:char型、int型、float型、double型)可能是8位、16位、32位或64位等,因此,可能占用1個(gè)、2個(gè)、4個(gè)或8個(gè)內(nèi)存單元。也就是說,一個(gè)操作數(shù)可能有多個(gè)內(nèi)存地址對應(yīng),在指令中給出哪個(gè)地址呢?有兩種不同的地址指定方式:大端方式和小端方式。大端方式(BigEndian):指令中給出的地址是操作數(shù)最高有效字節(jié)(MSB)所在的地址。小端方式(LittleEndian):指令中給出的地址是操作數(shù)最低有效字節(jié)(LSB)所在的地址。7.地址碼位數(shù)與主存容量和編址單位的關(guān)系是什么?答:指令中的地址碼如果是主存單元的地址,那么,地址碼的位數(shù)與主存的容量和編址單位的長度有關(guān)。編址單位的長度就是主存單元的寬度,也就是最小的尋址單位。內(nèi)存可以按字節(jié)編址(8位),也可以按字編址(如:16位,32位等)。主存的容量和編址單位確定后,地址碼的位數(shù)就被確定了。例如,若主存容量為4GB,編址單位是字節(jié),則主存單元的地址就是32位(因?yàn)椋?GB=232B);若按字(假定一個(gè)字為32位)編址,則主存單元的地址就是30位(因?yàn)椋?GB=232B=230x4B)。8.累加器型指令有什么特點(diǎn)?答:累加器型指令的一個(gè)源操作數(shù)和目操作數(shù)總是在累加器中,是隱含指定的,所以指令中不需要給出累加器的編號(hào)。因而,累加器型指令的指令字相對來說較短,但由于每次運(yùn)算結(jié)果都只能放到累加器中,可能會(huì)增加一些從累加器取數(shù)的指令而使程序變長。9.堆棧型指令有什么特點(diǎn)?答:與堆棧有關(guān)的操作有:入棧(PUSH)、出棧(POP)和運(yùn)算類操作。運(yùn)算類指令分單目運(yùn)算和雙目運(yùn)算,總是從棧頂取操作數(shù),運(yùn)算后的結(jié)果自動(dòng)放到棧頂。所以,指令中不需要給出操作數(shù)地址,因此,堆棧指令是零地址指令,指令字較短。但因?yàn)樗械牟僮鲾?shù)都只能在棧頂,所以,會(huì)增加很多入棧指令而使得程序變長。堆棧指令的訪存次數(shù),取決于采用的是軟堆棧還是硬堆棧。如果是軟堆棧(堆棧區(qū)由內(nèi)存實(shí)現(xiàn))的話,對于雙目運(yùn)算,需要訪問四次內(nèi)存:取指、取源數(shù)1、取源數(shù)2、存結(jié)果。如果是硬堆棧(堆棧區(qū)由寄存器實(shí)現(xiàn))的話,則只需取指令時(shí)訪問一次內(nèi)存。10.通用寄存器型指令有什么特點(diǎn)?答:通用寄存器型指令,是相對于累加器型指令和堆棧型指令而言的,指令中的操作數(shù)和運(yùn)算的結(jié)果既不是隱含在累加器中,也不是隱含在堆棧中。而是在CPU中提供了多個(gè)通用寄存器,操作數(shù)和結(jié)果可以放在這些寄存器中,指令必須明顯地指出操作數(shù)和結(jié)果在哪個(gè)寄存器或哪個(gè)主存單元中,要給出寄存器的編號(hào)或主存單元地址。目前大多數(shù)指令系統(tǒng)采用通用寄存器型指令風(fēng)格。11.裝入/存儲(chǔ)型指令有什么特點(diǎn)?答:裝入/存儲(chǔ)型指令是用在規(guī)整型指令系統(tǒng)中的一種通用寄存器型指令風(fēng)格。為了規(guī)整指令格式,使指令具有相同的長度,規(guī)定只有裝入/存儲(chǔ)(Load/Store)指令才能訪問內(nèi)存,而運(yùn)算指令不能直接訪問內(nèi)存,只能從寄存器取數(shù)進(jìn)行運(yùn)算,運(yùn)算的結(jié)果也只能送到寄存器。因?yàn)?,寄存器編?hào)較短,而主存地址位數(shù)較長,通過某種方式可以使運(yùn)算指令和訪存指令的長度一致。這種裝入/存儲(chǔ)型風(fēng)格的指令系統(tǒng)最大的特點(diǎn)是指令格式規(guī)整,指令長度一致,一般為32位。由于只有Load/Store指令才能訪問內(nèi)存,程序中可能會(huì)包含許多裝入指令和存儲(chǔ)指令,與一般通用寄存器型指令風(fēng)格相比,其程序長度會(huì)更長。12.指令尋址方式和數(shù)據(jù)尋址方式有什么不同?答:程序被啟動(dòng)時(shí),程序所包含的指令和數(shù)據(jù)都被裝入到內(nèi)存中。在程序指令過程中,需要取指令和操作數(shù),確定指令存放位置的過程稱為指令尋址方式,確定操作數(shù)存放位置的過程稱為數(shù)據(jù)尋址方式。指令尋址和數(shù)據(jù)尋址其復(fù)雜度是不一樣的。指令尋址:指令基本上按執(zhí)行順序存放在主存中,執(zhí)行過程中,指令總是從內(nèi)存單元被取到指令寄存器IR中。順序執(zhí)行時(shí),用指令計(jì)數(shù)器PC+“1”來得到下一條指令的地址;跳轉(zhuǎn)執(zhí)行時(shí),通過轉(zhuǎn)移指令的尋址方式,計(jì)算出目標(biāo)地址,送到PC中即可。目標(biāo)轉(zhuǎn)移地址的形成方式主要有三種:立即尋址(直接地址)、相對尋址(相對地址)和間接尋址(間接地址)。數(shù)據(jù)尋址:開始時(shí),數(shù)據(jù)被存放在內(nèi)存中,但在指令執(zhí)行過程中,內(nèi)存的數(shù)據(jù)可能被裝入到CPU的寄存器中,或者內(nèi)存的堆棧區(qū)中;還有的操作數(shù)可能是I/O端口中的內(nèi)容,或本身就包含在指令中(即:立即數(shù))。另外,運(yùn)行的結(jié)果也可能要被送到CPU的寄存器中、堆棧中、I/O端口或內(nèi)存單元中,所以,數(shù)據(jù)的尋址要涉及到對寄存器、內(nèi)存單元、堆棧、I/O端口、立即數(shù)的訪問。此外,操作數(shù)可能是某個(gè)一維或二維數(shù)組的元素,因此,還要考慮如何提供相應(yīng)的尋址方式,以方便地在內(nèi)存找到數(shù)組元素。綜上所述,數(shù)據(jù)的尋址比指令的尋址要復(fù)雜得多。13.如何指定指令的尋址方式?答:CPU根據(jù)指令約定的尋址方式對地址碼的有關(guān)信息進(jìn)行解釋,以找到下條要執(zhí)行的指令,或指令所需的操作數(shù)。有的指令設(shè)置專門的尋址方式字段,顯式說明采用何種尋址方式,有的指令通過操作碼隱含尋址方式。規(guī)整型指令一般在一條指令中只包含一種尋址方式,這樣,就可在指令操作碼中隱含尋址方式,不需要專門有尋址方式字段。但是對于不規(guī)整型指令,一條指令中的若干操作數(shù)可能存放在不同的地方,因而每個(gè)操作數(shù)可能有各自的尋址方式字段。14.指令的操作數(shù)可能存放在機(jī)器的哪些地方?答:指令的操作數(shù)可能存放在以下五個(gè)地方:(1)內(nèi)存單元:指令必須以某種方式給出內(nèi)存單元的地址。又可分為以下幾種情況:對單個(gè)獨(dú)立的操作數(shù)進(jìn)行處理;對一個(gè)數(shù)組中的若干個(gè)連續(xù)元素或一個(gè)數(shù)組元素進(jìn)行處理;對一個(gè)表格或表格中的某個(gè)元素進(jìn)行處理,等等。這些不同的情況需要提供不同的尋址方式進(jìn)行操作數(shù)的訪問。(2)寄存器:指令中只要直接給出寄存器的編號(hào)即可。(3)堆棧區(qū):指令中不需要給出操作數(shù)的地址,數(shù)據(jù)的地址隱含地由堆棧指針給出。(4)I/O端口:當(dāng)某個(gè)I/O接口中的寄存器內(nèi)容要和CPU中的寄存器內(nèi)容交換時(shí),要用I/O指令。在I/O傳送指令中,需提供I/O端口號(hào)。(5)指令中(立即數(shù)):操作數(shù)是指令的一部分,直接從指令中的立即數(shù)字段取操作數(shù)。15.有哪些常用的數(shù)據(jù)尋址方式?答:數(shù)據(jù)尋址方式可以歸為以下幾類:(1)立即尋址:指令中的立即數(shù)字段,可以作為操作數(shù),也可以作為直接轉(zhuǎn)移地址。取到ALU運(yùn)算前,可能要對其進(jìn)行擴(kuò)展。(2)直接尋址類:指令中直接給出操作數(shù)所在的寄存器編號(hào)、I/O端口號(hào)或主存單元地址。如:直接尋址方式、寄存器尋址方式。(3)間接尋址類:操作數(shù)在主存單元中,而操作數(shù)的地址存放在寄存器或另一個(gè)主存單元中,指令中給出操作數(shù)的地址所在的寄存器編號(hào)或主存單元地址。如:間接尋址方式、寄存器間接尋址方式。(4)偏移尋址類:指令通過某種方式給出一個(gè)形式地址和一個(gè)基地址(往往在某個(gè)寄存器中),經(jīng)過相應(yīng)的計(jì)算(基地址加形式地址)得到操作數(shù)所在的內(nèi)存單元地址。如:變址尋址方式、相對尋址方式、基址尋址方式等。16.取直接尋址的操作數(shù)要訪問幾次內(nèi)存?答:一次。只要根據(jù)指令中給出的內(nèi)存單元地址訪問一次內(nèi)存,取出來的就是操作數(shù)。17.取間接尋址的操作數(shù)要訪問幾次內(nèi)存?答:至少兩次。先根據(jù)指令中給出的內(nèi)存單元地址訪問一次內(nèi)存,取出來的是操作數(shù)的地址;再根據(jù)操作數(shù)的地址去內(nèi)存訪問一次,取出來的才是操作數(shù)。所以,一共訪問兩次內(nèi)存。如果是多級間接地址的話,可能還要訪問內(nèi)存。18.取寄存器尋址的操作數(shù)要訪問幾次內(nèi)存?答:不需要訪問內(nèi)存。從指定寄存器中取出的就是操作數(shù)。19.取寄存器間接尋址的操作數(shù)要訪問幾次內(nèi)存?答:一次。先從指令給出的寄存器中取出操作數(shù)地址,再根據(jù)操作數(shù)地址到內(nèi)存訪問,得到的就是操作數(shù)。20.什么是變址尋址方式?答:變址尋址方式下,指令中的地址碼給出一個(gè)形式地址,并且隱含或明顯地指定一個(gè)寄存器作為變址寄存器,變址寄存器的內(nèi)容(變址值)和形式地址相加,得到操作數(shù)的有效地址,根據(jù)有效地址到內(nèi)存訪問,去取操作數(shù)或?qū)戇\(yùn)算結(jié)果。變址尋址方式的應(yīng)用很廣泛。最基本的使用場合是用在對數(shù)組元素的訪問。指令將數(shù)組的首地址指定為形式地址,變址寄存器的內(nèi)容是數(shù)組元素的下標(biāo),隨著下標(biāo)的變化,可以訪問數(shù)組中不同的元素。所以變址寄存器的內(nèi)容是變化的,反映的是所訪問的數(shù)據(jù)到數(shù)組首地址的距離,稱為變址值。這種應(yīng)用場合下,形式地址的位數(shù)較長,而變址值位數(shù)少。變址尋址方式的指令一般包含在一個(gè)循環(huán)體內(nèi)。每次進(jìn)入循環(huán)時(shí),變址值都增或減一個(gè)定長值,這個(gè)定長值等于數(shù)組元素的長度。21.什么是基址尋址方式?答:基址尋址方式下,指令中的地址碼給出一個(gè)形式地址,作為位移量,并且隱含或明顯地指定一個(gè)寄存器作為基址寄存器,基址寄存器的內(nèi)容和形式地址相加,得到操作數(shù)的有效地址,根據(jù)有效地址到內(nèi)存訪問,去取操作數(shù)或?qū)戇\(yùn)算結(jié)果?;穼ぶ返牡湫蛻?yīng)用有兩個(gè):一個(gè)是程序重定位,在多道程序運(yùn)行的系統(tǒng)中,每個(gè)用戶程序在一個(gè)邏輯地址空間里編寫程序。裝入計(jì)算機(jī)運(yùn)行時(shí),由操作系統(tǒng)給用戶程序分配主存空間,每個(gè)用戶程序有一個(gè)基地址,存放在基址寄存器中,在程序執(zhí)行時(shí),通過基址寄存器的值加上指令中的形式地址就可以形成實(shí)際的主存單元地址。第二個(gè)應(yīng)用是擴(kuò)展有限長度指令的尋址空間。即在運(yùn)行時(shí)將某個(gè)主存區(qū)間的首地址或程序段的首地址裝入基址寄存器,而形式地址給出要訪問的單元相對于該首地址的距離(即偏移量),因此指令中只要用較短的地址碼來表示偏移量。訪問操作數(shù)時(shí),用基址寄存器的值和偏移量相加,得到操作數(shù)的內(nèi)存單元地址。只要基址寄存器的內(nèi)容更改到另外的一個(gè)主存地址,則操作數(shù)的地址空間就移到另一個(gè)主存區(qū)間。因而可以訪問到主存的整個(gè)地址空間,以實(shí)現(xiàn)短地址訪問大空間的目的。22.變址尋址和基址尋址的區(qū)別是什么?答:變址尋址方式和基址尋址方式的有效地址形成過程類似。但是,基址尋址方式與變址尋址方式在以下方面不同:(1)具體應(yīng)用的場合不同。變址尋址面向用戶,可用于訪問字符串、數(shù)組、表格等成批數(shù)據(jù)或其中的某些元素?;穼ぶ访嫦蛳到y(tǒng),用于解決程序的重定位問題和短地址訪問大空間的問題。(2)使用方式不同。變址尋址時(shí),指令中提供的形式地址是一個(gè)基準(zhǔn)地址,位移量由變址寄存器給出;而基址尋址時(shí),指令中給出的形式地址為位移量,而基址寄存器中存放的是基準(zhǔn)地址。不過,這里所講的使用方式并不是絕對的,在實(shí)際的計(jì)算機(jī)設(shè)計(jì)中,可能會(huì)有不同的應(yīng)用場合和使用方式。23.什么是相對尋址方式?答:相對尋址方式的有效地址形成方法如下:指令中的形式地址給出一個(gè)位移量D。而基準(zhǔn)地址由程序計(jì)數(shù)器PC提供。即:有效地址EA=(PC)+D。位移量給出的是相對于當(dāng)前指令所在內(nèi)存單元的距離,位移量可正、可負(fù)。也就是說,要找的可以在當(dāng)前指令前D個(gè)單元處的信息,也可以是當(dāng)前指令后D個(gè)單元處的信息。24.相對尋址方式用在哪些場合?答:相對尋址方式用在以下兩種場合:(1)公共子程序的浮動(dòng)。因?yàn)楣沧映绦蚩赡鼙辉S多用戶程序調(diào)用,因而會(huì)隨著用戶程序裝入到內(nèi)存不同的地方運(yùn)行。為了讓公共子程序能在不同的內(nèi)存區(qū)正確運(yùn)行,一般在公共子程序內(nèi)部采用相對尋址方式,以保證指令的操作數(shù)總在相對于指令的距離一定的單元內(nèi)。這樣,不管子程序浮動(dòng)到哪里,指令和數(shù)據(jù)的相對位置不變。例如,現(xiàn)行指令的地址為2000H,指令中給出的形式地址為05H,說明操作數(shù)在當(dāng)前指令后面第05H個(gè)單元處,即2005H處。當(dāng)程序向后浮動(dòng)了1000H,使當(dāng)前指令的地址為3000H時(shí),此時(shí)公共子程序中的指令、數(shù)據(jù)以及相對位置都不變,指令中給出的相對地址還是05H,操作數(shù)還是應(yīng)該在當(dāng)前指令后面的第05H個(gè)單元處,所以應(yīng)該在3005H處,因此,指令取到的還是同一個(gè)數(shù)據(jù)。(2)轉(zhuǎn)移目標(biāo)地址的尋址。當(dāng)需要轉(zhuǎn)到當(dāng)前指令的前面或后面第n條指令執(zhí)行時(shí),可以用相對尋址方式。此時(shí),得到的轉(zhuǎn)移地址是一個(gè)相對地址。25.相對尋址方式中如何確定相對位置?答:相對尋址方式中,相對位置的確定比較復(fù)雜。必須注意兩個(gè)方面的問題:(1)位移量的問題。位移量位數(shù)有限,在進(jìn)行有效地址計(jì)算時(shí)需要擴(kuò)展。一般位移量用補(bǔ)碼表示,所以應(yīng)采用補(bǔ)碼擴(kuò)展填充方式(即:符號(hào)擴(kuò)展方式)。(2)基準(zhǔn)地址問題。相對尋址的基本思路是把相對于當(dāng)前指令前面或者后面第n個(gè)單元作為操作數(shù)或目標(biāo)轉(zhuǎn)移指令的地址。但在具體實(shí)現(xiàn)時(shí),不同機(jī)器對“當(dāng)前指令”的含義有不同的理解。有的機(jī)器在計(jì)算相對地址時(shí),PC中存放的還是當(dāng)前正在執(zhí)行的指令的地址,但有的機(jī)器PC加“1”的操作在取指令的同時(shí)完成,所以在計(jì)算相對地址時(shí),PC中已經(jīng)是下一條指令的地址。因此,不同的機(jī)器在計(jì)算相對地址時(shí)可能有一點(diǎn)細(xì)微的差別。26.堆棧尋址方式中如何對堆棧進(jìn)行操作?答:堆棧是一塊特殊的存儲(chǔ)區(qū)。采用“先進(jìn)后出”的方式進(jìn)行訪問。棧底固定不動(dòng),棧頂浮動(dòng),用一個(gè)專門的寄存器(SP)來作為棧頂指針。從堆棧生長的方向來分,可以有“自頂向下”和“自底向上”兩種堆棧,它們在進(jìn)、出棧時(shí)對棧指針的修改是不同的。假定棧指針指向的總是棧頂處非空元素,則應(yīng)該按以下方式修改棧指針:對于“自底向上”生成的堆棧,進(jìn)棧時(shí)先修改棧指針:(SP)-1→SP,然后再壓入數(shù)據(jù);出棧時(shí)先將數(shù)據(jù)彈出,然后再修改棧指針(SP)+1→SP。對于“自頂向下”生成的堆棧,進(jìn)棧時(shí)先修改棧指針:(SP)+1→SP,然后再壓入數(shù)據(jù);出棧時(shí)先將數(shù)據(jù)彈出,然后再修改棧指針(SP)-1→SP。假定棧指針指向的總是棧頂處的空元素,則應(yīng)該按以下方式修改棧指針:對于“自底向上”生成的堆棧,進(jìn)棧時(shí)先壓入數(shù)據(jù),然后再修改棧指針:(SP)-1→SP;出棧時(shí)先修改棧指針:(SP)+1→SP,然后再將數(shù)據(jù)彈出。對于“自頂向下”生成的堆棧,進(jìn)棧時(shí)先壓入數(shù)據(jù),然后再修改棧指針:(SP)+1→SP;出棧時(shí)先修改棧指針:(SP)-1→SP,然后再將數(shù)據(jù)彈出。若每個(gè)棧中的元素只占一個(gè)內(nèi)存單元,則修改指針時(shí),通過“+1”或“-1”實(shí)現(xiàn);若占多個(gè)內(nèi)存單元,則應(yīng)該加上或減去相應(yīng)的值。27.返回指令要不要有地址字段?答:不一定。子程序的最后一條指令一定是返回指令。一般返回地址保存在堆棧中,所以返回指令中不需要明顯給出返回地址,直接從棧頂取地址作為返回地址。如果有些計(jì)算機(jī)不采用堆棧保存返回地址,而是存放到其他不確定的地方,則返回指令中必須有一個(gè)地址碼,用來指出返回地址或指出返回地址的存放位置。28.轉(zhuǎn)移指令和轉(zhuǎn)子(調(diào)用)指令的區(qū)別是什么?答:轉(zhuǎn)移指令有無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令(也叫分支指令)。這種轉(zhuǎn)移指令用于改變程序執(zhí)行的順序,轉(zhuǎn)移后不再返回來執(zhí)行,所以無需保存返回地址。而轉(zhuǎn)子指令是一種子程序調(diào)用指令,子程序執(zhí)行結(jié)束時(shí),必須返回到轉(zhuǎn)子指令后面的指令執(zhí)行。所以轉(zhuǎn)子指令執(zhí)行時(shí),除了和轉(zhuǎn)移指令一樣要計(jì)算跳轉(zhuǎn)的目標(biāo)地址外,還要保存返回地址。一般將轉(zhuǎn)子指令后面那條指令的地址作為返回地址保存到堆棧中。址保存到堆棧中。第五章CPU1.一條指令的執(zhí)行過程中要做哪些事情呢?答:一條指令的執(zhí)行過程包括:取指令、指令譯碼、(計(jì)算操作數(shù)地址)、取操作數(shù)、運(yùn)算、送結(jié)果。其中取指令和指令譯碼是每條指令都必須進(jìn)行的操作。有些指令需要到內(nèi)存單元取操作數(shù),因此,需要在取數(shù)之前計(jì)算操作數(shù)的內(nèi)存單元地址。取操作數(shù)和送結(jié)果這兩個(gè)步驟,對于不同的指令,其取和送的地方可能不同,有些指令要求在寄存器取/送數(shù),有些是在內(nèi)存單元取/送數(shù),還有些是對I/O端口取/送數(shù)。因此,一條指令的執(zhí)行階段(不包括取指令階段),可能只有CPU參與,也可能要通過總線去訪問主存,也可能要通過總線去訪問I/O端口。2.指令周期、機(jī)器周期之間的關(guān)系是什么?答:一條指令從讀取到執(zhí)行完成所花的全部時(shí)間被稱為指令周期。一個(gè)指令周期中要完成多個(gè)步驟,包括取指令、指令譯碼(計(jì)算操作數(shù)地址)、取操作數(shù)、運(yùn)算、送結(jié)果。這些步驟中,最復(fù)雜的操作是訪問存儲(chǔ)器取指令或讀/寫數(shù)據(jù),以及訪問I/O讀/寫數(shù)據(jù)。它們都涉及到總線操作,通過系統(tǒng)總線來和CPU之外的部件進(jìn)行信息交換。通常把通過一次總線事務(wù)訪問一次主存或I/O的時(shí)間稱為機(jī)器周期。所以一個(gè)指令周期包含了多個(gè)機(jī)器周期。不同機(jī)器的指令周期所包含的機(jī)器周期數(shù)不同。典型的機(jī)器周期有:取指令、主存讀(間址周期是一種主存讀機(jī)器周期)、主存寫、I/O讀、I/O寫、中斷響應(yīng)等。3.CPU總是在執(zhí)行指令嗎?會(huì)不會(huì)停下來什么都不做?答:CPU的功能就是不斷地周而復(fù)始地執(zhí)行指令,而每條指令又都有不同的步驟,每個(gè)步驟在一定的時(shí)間內(nèi)完成。因此,CPU總是在不停地執(zhí)行指令。有時(shí)我們會(huì)說,CPU停止或CPU正在等待,什么事情也不做。事實(shí)上,CPU還是在執(zhí)行指令的,只不過可能處于以下幾種類似的情況:(1)在執(zhí)行指令過程中,正在等待主存或I/O完成讀/寫;(2)正在執(zhí)行一連串的空指令(NOP);(3)可能正在執(zhí)行一個(gè)循環(huán)(循環(huán)內(nèi)只是不斷地取狀態(tài)、判斷、不滿足時(shí)繼續(xù)循環(huán)),直到滿足某個(gè)條件(如:查詢外設(shè)有沒有完成任務(wù));等等。因而,CPU不可能不在執(zhí)行指令。4.CPU除了執(zhí)行指令外,還做什么事情?答:CPU的工作過程就是周而復(fù)始地執(zhí)行指令,計(jì)算機(jī)各部分所進(jìn)行的工作都是由CPU根據(jù)指令的要求來啟動(dòng)的。為了使CPU和外部設(shè)備能夠很好地協(xié)調(diào)工作,盡量使CPU不等待、甚至不參與外部設(shè)備的輸入和輸出過程,采用了程序中斷方式和DMA方式。這兩種方式下,外部設(shè)備需要向CPU提出中斷請求或DMA請求,因此,在執(zhí)行指令過程中,CPU還要按時(shí)通過采樣相應(yīng)的引腳來查詢有沒有中斷請求或DMA請求。一般,在一個(gè)機(jī)器周期結(jié)束時(shí),查詢是否有DMA請求,如果有的話,CPU脫離總線,由DMA控制器控制使用總線。在一個(gè)指令周期結(jié)束時(shí),查詢是否有中斷請求,如果有的話,則進(jìn)入中斷響應(yīng)機(jī)器周期,相當(dāng)于執(zhí)行了一條中斷響應(yīng)隱指令。在中斷響應(yīng)過程中,得到中斷服務(wù)程序的入口地址,并送程序計(jì)數(shù)器PC中,下個(gè)指令周期開始時(shí),取出中斷服務(wù)程序的第一條指令執(zhí)行。5.CPU中的所有寄存器,用戶都能訪問嗎?答:CPU中的寄存器分為用戶可訪問寄存器和用戶不可見寄存器。一般把用戶可訪問寄存器稱為通用寄存(GPR)。這些寄存器都有一個(gè)編號(hào),在指令中用編號(hào)標(biāo)識(shí)寄存器。所以執(zhí)行指令時(shí),指令中的寄存器編號(hào)要送到一個(gè)地址譯碼器進(jìn)行譯碼,然后才能選中某個(gè)寄存器進(jìn)行讀寫。通用寄存器可以用來存放操作數(shù)或運(yùn)算結(jié)果,或作為地址指針、變址寄存器、基址寄存器等。CPU中有一些寄存器是用戶不可見的,沒有編號(hào)、不能通過程序直接訪問。如:程序計(jì)數(shù)器PC、指令寄存器IR、程序狀態(tài)字寄存器PSWR、存儲(chǔ)器地址寄存器MAR、存儲(chǔ)器數(shù)據(jù)寄存器MDR等。6.CPU執(zhí)行指令的過程中,其他部件在做什么?答:計(jì)算機(jī)的工作過程就是連續(xù)執(zhí)行指令的過程,整個(gè)計(jì)算機(jī)各個(gè)部分的動(dòng)作都是由CPU中的控制部件CU通過對指令譯碼送出的控制信號(hào)來控制的。其他部件不知道自己該做什么,該完成什么動(dòng)作,只有CPU通過對指令譯碼才知道。如果指令中包含有對存儲(chǔ)器或I/O模塊的訪問,則必須由CPU通過總線,把要訪問的地址和操作命令(讀還是寫)等信息送到存儲(chǔ)器或I/O接口(I/O模塊)來啟動(dòng)相應(yīng)的讀或?qū)懖僮?。例如,每次指令?zhí)行前,都要通過向總線發(fā)出主存地址、主存讀命令等來控制存儲(chǔ)器取指令;若當(dāng)前執(zhí)行的是寄存器定點(diǎn)加法指令,則CU控制定點(diǎn)運(yùn)算器進(jìn)行動(dòng)作;若是I/O指令,則CU會(huì)通過總線發(fā)出I/O端口地址、I/O讀或?qū)懨畹葋砜刂茖δ硞€(gè)I/O接口中的寄存器進(jìn)行讀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論