微機原理與接口技術(shù)(錢曉捷版)課后習題答案_第1頁
微機原理與接口技術(shù)(錢曉捷版)課后習題答案_第2頁
微機原理與接口技術(shù)(錢曉捷版)課后習題答案_第3頁
微機原理與接口技術(shù)(錢曉捷版)課后習題答案_第4頁
微機原理與接口技術(shù)(錢曉捷版)課后習題答案_第5頁
已閱讀5頁,還剩174頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)“微機原理與接口技術(shù)”習題解答第1章 微型計算機系統(tǒng)習題1.1簡答題解答 處理器每個單位時間可以處理的二進制數(shù)據(jù)位數(shù)稱計算機字長。 總線信號分成三組,分別是數(shù)據(jù)總線、地址總線和控制總線。 PC機主存采用DRAM組成。 高速緩沖存儲器Cache是處理器與主存之間速度很快但容量較小的存儲器。 ROM-BIOS是“基本輸入輸出系統(tǒng)”,操作系統(tǒng)通過對BIOS的調(diào)用驅(qū)動各硬件設(shè)備,用戶也可以在應用程序中調(diào)用BIOS中的許多功能。 中斷是CPU正常執(zhí)行程序的流程被某種原因打斷、并暫

2、時停止,轉(zhuǎn)向執(zhí)行事先安排好的一段處理程序,待該處理程序結(jié)束后仍返回被中斷的指令繼續(xù)執(zhí)行的過程。 主板芯片組是主板的核心部件,它提供主板上的關(guān)鍵邏輯電路。 MASM是微軟開發(fā)的宏匯編程序。 指令的處理過程。處理器的“取指譯碼執(zhí)行周期” 是指處理器從主存儲器讀取指令(簡稱取指),翻譯指令代碼的功能(簡稱譯碼),然后執(zhí)行指令所規(guī)定的操作(簡稱執(zhí)行)的過程。 機器語言層,即指令集結(jié)構(gòu)。(學生很多認為是:匯編語言層。前4章主要涉及匯編語言,但本書還有很多處理器原理等內(nèi)容)習題1.2判斷題 錯 錯 對 錯 對 錯 錯 對 錯 錯解答 Central Processing Unit,中央處理單元,處理器 1

3、MB,4GB 216,64KB EXE,COM(BAT老師講的) Instruction Set Architecture 目錄 MMX,SSE3 64 IBM,DOS PCI習題1.4說明微型計算機系統(tǒng)的硬件組成及各部分作用。解答CPU:CPU也稱處理器,是微機的核心。它采用大規(guī)模集成電路芯片,芯片內(nèi)集成了控制器、運算器和若干高速存儲單元(即寄存器)。處理器及其支持電路構(gòu)成了微機系統(tǒng)的控制中心,對系統(tǒng)的各個部件進行統(tǒng)一的協(xié)調(diào)和控制。存儲器:存儲器是存放程序和數(shù)據(jù)的部件。外部設(shè)備:外部設(shè)備是指可與微機進行交互的輸入(Input)設(shè)備和輸出(Output)設(shè)備,也稱I/O設(shè)備。I/O設(shè)備通過I/

4、O接口與主機連接??偩€:互連各個部件的共用通道,主要含數(shù)據(jù)總線、地址總線和控制總線信號。習題1.5什么是通用微處理器、單片機(微控制器)、DSP芯片、嵌入式系統(tǒng)?解答通用微處理器:適合較廣的應用領(lǐng)域的微處理器,例如裝在PC機、筆記本電腦、工作站、服務器上的微處理器。單片機:是指通常用于控制領(lǐng)域的微處理器芯片,其內(nèi)部除CPU外還集成了計算機的其他一些主要部件,只需配上少量的外部電路和設(shè)備,就可以構(gòu)成具體的應用系統(tǒng)。DSP芯片:稱數(shù)字信號處理器,也是一種微控制器,其更適合處理高速的數(shù)字信號,內(nèi)部集成有高速乘法器,能夠進行快速乘法和加法運算。嵌入式系統(tǒng):利用微控制器、數(shù)字信號處理器或通用微處理器,結(jié)

5、合具體應用構(gòu)成的控制系統(tǒng)。習題1.6綜述Intel 80 x86系列處理器在指令集方面的發(fā)展。解答8086奠定了基本的16位指令集,80286提供了保護方式的各種指令,80386將指令集全面提升為32位,80486融入了浮點數(shù)據(jù)處理指令,奔騰系列陸續(xù)增加了多媒體指令MMX、SSE、SSE2和SSE3,最新的奔騰4處理器還支持64位指令集。題外話:大家可以通過閱讀相關(guān)資料、查詢互聯(lián)網(wǎng)獲得更加詳細的發(fā)展情況??梢钥紤]組織成一篇或多篇論文。習題1.7區(qū)別如下概念:助記符、匯編語言、匯編語言程序和匯編程序。解答助記符:人們采用便于記憶、并能描述指令功能的符號來表示機器指令操作碼,該符號稱為指令助記符。

6、匯編語言:用助記符表示的指令以及使用它們編寫程序的規(guī)則就形成匯編語言。匯編語言程序:用匯編語言書寫的程序就是匯編語言程序,或稱匯編語言源程序。匯編程序:匯編語言源程序要翻譯成機器語言程序才可以由處理器執(zhí)行。這個翻譯的過程稱為“匯編”,完成匯編工作的程序就是匯編程序(Assembler)。習題1.8區(qū)別如下概念:路徑、絕對路徑、相對路徑、當前目錄。系統(tǒng)磁盤上存在某個可執(zhí)行文件,但在DOS環(huán)境輸入其文件名卻提示沒有這個文件,是什么原因?解答路徑:操作系統(tǒng)以目錄形式管理磁盤上的文件,文件所在的分區(qū)和目錄就是該文件的路徑。絕對路徑:從根目錄到文件所在目錄的完整路徑稱為“絕對路徑”。是保證文件唯一性的標

7、示方法。相對路徑:從系統(tǒng)當前目錄到文件所在目錄的路徑稱為相對路徑。當前目錄:用戶當前所在的目錄就是當前目錄。指明的路徑不正確,或者執(zhí)行了另外一個同名的文件。習題1.9什么是摩爾定律?它能永久成立嗎?解答每18個月,集成電路的性能將提高一倍,而其價格將降低一半。(1965年,Intel公司的創(chuàng)始人之一摩爾預言:集成電路上的晶體管密度每年將翻倍?,F(xiàn)在這個預言通常表達為:每隔18個月硅片密度(晶體管容量)將翻倍;也常被表達為:每18個月,集成電路的性能將提高一倍,而其價格將降低一半。)不能。由于電子器件的物理極限在悄然逼近,摩爾定律不會永遠持續(xù)。習題1.10馮諾依曼計算機的基本設(shè)計思想是什么?解答采

8、用二進制形式表示數(shù)據(jù)和指令。指令由操作碼和地址碼組成。將程序和數(shù)據(jù)存放在存儲器中,計算機在工作時從存儲器取出指令加以執(zhí)行,自動完成計算任務。這就是“存儲程序”和“程序控制”(簡稱存儲程序控制)的概念。指令的執(zhí)行是順序的,即一般按照指令在存儲器中存放的順序執(zhí)行,程序分支由轉(zhuǎn)移指令實現(xiàn)。計算機由存儲器、運算器、控制器、輸入設(shè)備和輸出設(shè)備五大基本部件組成,并規(guī)定了5部分的基本功能。習題1.11計算機系統(tǒng)通常劃分為哪幾個層次?普通計算機用戶和軟件開發(fā)人員對計算機系統(tǒng)的認識一樣嗎? 解答最上層是用戶層。第5層是高級語言層。第4層是匯編語言層。第3層是操作系統(tǒng)層。第2層是機器語言層。第1層是控制層。第0層

9、是數(shù)字電路層。普通計算機用戶和軟件人員對計算機系統(tǒng)的認識并不一樣。普通計算機用戶看到的計算機,也就是我們最熟悉的計算機,屬于用戶層,而軟件人員看到的屬于高級語言層或是匯編語言層。習題1.12什么是系列機和兼容機?你怎樣理解計算機中的“兼容”特性?例如,你可以用PC機為例,談談你對軟件兼容(或兼容性)的認識,說明為什么PC機具有如此強大的生命力?解答系列機是指在一個廠家生產(chǎn)的具有相同計算機結(jié)構(gòu),但具有不同組成和實現(xiàn)的一系列(Family)不同檔次、不同型號的機器。兼容機是指不同廠家生產(chǎn)的具有相同計算機結(jié)構(gòu)(不同的組成和實現(xiàn))的計算機。兼容是一個廣泛的概念,包括軟件兼容、硬件兼容、系統(tǒng)兼容等。其中

10、軟件兼容是指同一個軟件可以不加修改地運行于體系結(jié)構(gòu)相同的各檔機器,結(jié)果一樣但運行時間可能不同。軟件兼容可從機器性能和推出時間分成向上(向下)和向前(向后)兼容。例如32位PC機就陸續(xù)增加了對浮點處理指令、多媒體指令等的支持。在保證向后兼容的前提下,不斷改進其組成和實現(xiàn),延續(xù)計算機結(jié)構(gòu)的生命,才使得PC機具有如此強大的生命力。習題1.13英特爾公司最新Intel 80 x86處理器是什么?請通過查閱相關(guān)資料(如英特爾公司網(wǎng)站),說明其主要特點和采用的新技術(shù)。解答酷睿2多核處理器。習題1.14說明高級語言、匯編語言、機器語言三者的區(qū)別,談談你對匯編語言的認識。解答高級語言與具體的計算機硬件無關(guān),其

11、表達方式接近于所描述的問題,易為人們接受和掌握,用高級語言編寫程序要比低級語言容易得多,并大大簡化了程序的編制和調(diào)試,使編程效率得到大幅度的提高。而匯編語言是為了便于理解與記憶,將機器指令用助記符代替而形成的一種語言。匯編語言的語句通常與機器指令對應,因此,匯編語言與具體的計算機有關(guān),屬于低級語言。它比機器語言直觀,容易理解和記憶,用匯編語言編寫的程序也比機器語言易閱讀、易排錯。機器語言的每一條機器指令都是二進制形式的指令代碼,計算機硬件可以直接識別。高級語言程序通常也需要翻譯成匯編語言程序,再進一步翻譯成機器語言代碼。習題1.15為了更好地進行編程實踐,請進入Windows操作系統(tǒng)下的控制臺

12、環(huán)境(或MS-DOS模擬環(huán)境),練習常用命令。第2章 處理器結(jié)構(gòu)習題2.1簡答題解答 ALU是算術(shù)邏輯運算單元,負責處理器所能進行的各種運算,主要是算術(shù)運算和邏輯運算。 取指是指從主存取出指令代碼通過總線傳輸?shù)教幚砥鲀?nèi)部指令寄存器的過程。8086分成總線接口單元和指令執(zhí)行單元,可以獨立操作。在執(zhí)行單元執(zhí)行一條指令的同時,總線接口單元可以讀取下一條指令,等到執(zhí)行時不需要進行取指了,所以稱為預取。 Pentium采用分離的Cache結(jié)構(gòu),一個用做指令Cache,一個用做數(shù)據(jù)Cache。 堆棧的存取原則是先進后出(也稱為后進先出)操作方式存取數(shù)據(jù)。 標志寄存器主要保存反映指令執(zhí)行結(jié)果和控制指令執(zhí)行形

13、式的有關(guān)狀態(tài)。 執(zhí)行了一條加法指令后,發(fā)現(xiàn)ZF1,表明運算結(jié)果為0。 沒有。 匯編語言的標識符大小寫不敏感,即表示字母大小寫不同、但表示同一個符號。 不會。 指令的操作數(shù)需要通過存儲器地址或I/O地址,才能查找到數(shù)據(jù)本身,故稱數(shù)據(jù)尋址方式。習題2.2判斷題解答 錯 對 對 對 錯 對 對 錯 對 對習題2.3填空題解答 32,DX,DH 16 段地址,偏移地址,EIP,IP ,0 73C00H,73800H EBX,ECX,ESI,EDI,EBP,ESP 實地址,64KB ASM,目標模塊,F(xiàn)LAT 立即數(shù)尋址、寄存器尋址和存儲器尋址 DS,SS習題2.4處理器內(nèi)部具有哪3個基本部分?8086

14、分為哪兩大功能部件?其各自的主要功能是什么?解答處理器內(nèi)部有ALU、寄存器和指令處理三個基本單元。8086有兩大功能部件:總線接口單元和執(zhí)行單元??偩€接口單元:管理著8086與系統(tǒng)總線的接口,負責處理器對存儲器和外設(shè)進行訪問。8086所有對外操作必須通過BIU和這些總線進行。執(zhí)行單元EU:負責指令譯碼、數(shù)據(jù)運算和指令執(zhí)行。習題2.58086怎樣實現(xiàn)了最簡單的指令流水線?解答8086中,指令的讀取是在BIU單元,而指令的執(zhí)行是在EU單元。因為BIU和EU兩個單元相互獨立、分別完成各自操作,所以可以并行操作。也就是說,在EU單元對一個指令進行譯碼執(zhí)行時,BIU單元可以同時對后續(xù)指令進行讀取;這就是

15、最簡單的指令流水線技術(shù)。習題2.6什么是標志?什么是IA-32處理器的狀態(tài)標志、控制標志和系統(tǒng)標志?說明狀態(tài)標志在標志寄存器EFLAGS的位置和含義。解答標志:用于反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式的一個或多個二進制數(shù)位。例如,有些指令執(zhí)行后會影響有關(guān)標志位;有些指令的執(zhí)行要利用相關(guān)標志。狀態(tài)標志:用來記錄程序運行結(jié)果的狀態(tài)信息??刂茦酥荆篋F標志,控制字符串操作的地址方向。系統(tǒng)標志:用于控制處理器執(zhí)行指令的方式。狀態(tài)標志在標志寄存器EFLAGS中的位置和含義如下: 3111109876543210OFSFZFAFPFCF習題2.7舉例說明CF和OF標志的差異。解答進位標志CF表示無符號數(shù)運算

16、結(jié)果是否超出范圍,超出范圍后加上進位或借位,運算結(jié)果仍然正確;溢出標志OF表示有符號數(shù)運算結(jié)果是否超出范圍,如果超出范圍,運算結(jié)果已經(jīng)不正確。例1:3AH 7CHB6H無符號數(shù)運算:58124182,范圍內(nèi),無進位。有符號數(shù)運算:58124182,范圍外,有溢出。例2:AAH + 7CH26H無符號數(shù)運算:170124294,范圍外,有進位。有符號數(shù)運算:8612428 ,范圍內(nèi),無溢出。習題2.8什么是8086中的邏輯地址和物理地址?邏輯地址如何轉(zhuǎn)換成物理地址?請將如下邏輯地址用物理地址表達(均為十六進制形式): FFFF0 4017 20004500 B8214567解答物理地址:在處理器

17、地址總線上輸出的地址稱為物理地址。每個存儲單元有一個唯一的物理地址。邏輯地址:在處理器內(nèi)部、程序員編程時采用邏輯地址,采用“段地址:偏移地址“形式。某個存儲單元可以有多個邏輯地址,即處于不同起點的邏輯段中,但其物理地址是唯一的。邏輯地址轉(zhuǎn)換成物理地址:邏輯地址由處理器在輸出之前轉(zhuǎn)換為物理地址。將邏輯地址中的段地址左移二進制4位(對應16進制是一位,即乘以16),加上偏移地址就得到20位物理地址。 FFFFH:0FFFF0H 40H:17H00417H 2000H:4500H24500H B821H:4567HBC777H習題2.9IA-32處理器有哪三類基本段,各是什么用途?解答IA-32處理

18、器有代碼段、數(shù)據(jù)段、堆棧段三類基本段。代碼段:存放程序的指令代碼。程序的指令代碼必須安排在代碼段,否則將無法正常執(zhí)行。數(shù)據(jù)段:存放當前運行程序所用的數(shù)據(jù)。程序中的數(shù)據(jù)默認是存放在數(shù)據(jù)段,也可以存放在其他邏輯段中。堆棧段:主存中堆棧所在的區(qū)域。程序使用的堆棧一定在堆棧段。習題2.10什么是平展存儲模型、段式存儲模型和實地址存儲模型?解答平展存儲模型下,對程序來說存儲器是一個連續(xù)的地址空間,稱為線性地址空間。程序需要的代碼、數(shù)據(jù)和堆棧都包含在這個地址空間中。段式存儲模型下,對程序來說存儲器由一組獨立的地址空間組成,獨立的地址空間稱為段。通常,代碼、數(shù)據(jù)和堆棧位于分開的段中。實地址存儲模型是8086

19、處理器的存儲模型。它是段式存儲模型的特例,其線性地址空間最大為1MB容量,由最大為64KB的多個段組成。習題2.11什么是實地址方式、保護方式和虛擬8086方式?它們分別使用什么存儲模型?解答實地址方式:與8086具有相同的基本結(jié)構(gòu),只能尋址1MB物理存儲器空間,邏輯段最大不超過64KB;但可以使用32位寄存器、32位操作數(shù)和32位尋址方式;相當于可以進行32位處理的快速8086。實地址工作方式只能支持實地址存儲模型。保護方式:具有強大的段頁式存儲管理和特權(quán)與保護能力,使用全部32條地址總線,可尋址4GB物理存儲器。保護方式通過描述符實現(xiàn)分段存儲管理,每個邏輯段可達4GB。處理器工作在保護方式

20、時,可以使用平展或段式存儲模型。虛擬8086方式:在保護方式下運行的類似實方式的運行環(huán)境,只能在1MB存儲空間下使用“16位段”。 處理器工作在虛擬8086方式時,只能使用實地址存儲模型。習題2.12匯編語句有哪兩種,每個語句由哪4個部分組成?解答匯編語句有兩種:執(zhí)行性語句(處理器指令)、說明性語句(偽指令)。每個語句有:標號、指令助記符、操作數(shù)或參數(shù)、注釋4個部分組成。習題2.13匯編語言程序的開發(fā)有哪4個步驟,分別利用什么程序完成、產(chǎn)生什么輸出文件。解答匯編語言程序的開發(fā)有4個步驟:編輯:用文本編輯器形成一個以ASM為擴展名的源程序文件。匯編:用匯編程序?qū)SM文件轉(zhuǎn)換為OBJ模塊文件。連

21、接:用連接程序?qū)⒁粋€或多個目標文件鏈接成一個EXE或COM可執(zhí)行文件。調(diào)試:用調(diào)試程序排除錯誤,生成正確的可執(zhí)行文件。習題2.14MASM匯編語言中,下面哪些是程序員可以使用的正確的標識符。FFH,DS,0 xvab,Again,next,data,h_ascii,6364b,.exit,small解答FFH,Again,next,h_ascii習題2.15給出IA-32處理器的32位尋址方式和16位尋址方式的組成公式,并說明各部分作用。解答 32位存儲器尋址方式的組成公式32位有效地址 基址寄存器(變址寄存器比例)位移量其中的4個組成部分是:基址寄存器任何8個32位通用寄存器之一;變址寄存器

22、除ESP之外的任何32位通用寄存器之一;比例可以是1,2,4或8(因為操作數(shù)的長度可以是1,2,4或8字節(jié));位移量可以是8或32位有符號值。 16位存儲器尋址方式的組成公式16位有效地址 基址寄存器變址寄存器位移量其中基址寄存器只能是BX或BP,變址寄存器只能是SI或DI,位移量是8或16位有符號值。習題2.16說明下列指令中源操作數(shù)的尋址方式?假設(shè)VARD是一個雙字變量。(1)mov edx,1234h(2)mov edx,vard(3)mov edx,ebx(4)mov edx,ebx(5)mov edx,ebx+1234h(6)mov edx,vardebx(7)mov edx,ebx

23、+edi(8)mov edx,ebx+edi+1234h(9)mov edx,vardesi+edi(10)mov edx,ebp*4解答 立即數(shù) 直接 寄存器 寄存器間接 寄存器相對 寄存器相對 基址變址 相對基址變址 相對基址變址 帶比例尋址習題2.17使用本書配套的軟件包(或者按照本書說明)創(chuàng)建MASM開發(fā)環(huán)境,通過編輯例題2-1和例題2-2程序、匯編連接生成可執(zhí)行程序和列表文件,掌握匯編語言的開發(fā)。第3章 數(shù)據(jù)處理習題3.1簡答題解答 沒有。使用二進制8位表達無符號整數(shù),257沒有對應的編碼。 字符“F”的ASCII碼就是數(shù)值46H,所以沒有區(qū)別。 匯編程序在匯編過程中對數(shù)值表達式計算

24、,得到一個確定的數(shù)值,故稱數(shù)值表達式為常量。 不能。數(shù)值500大于一個字節(jié)所能表達的數(shù)據(jù)量,所以不能為字節(jié)變量賦值。 源、目標寄存器位數(shù)不同,不能用該指令進行數(shù)據(jù)交換。 前者在指令執(zhí)行時獲得偏移地址,是正確的;但后者的OFFSET只能在匯編階段獲得偏移地址,但此時寄存器內(nèi)容是不可知的,所以無法獲得偏移地址。 INC,DEC,NEG和NOT指令的操作數(shù)既是源操作數(shù)也是目的操作數(shù)。 大小寫字母轉(zhuǎn)換利用它們的ASCII碼相差20H。 加減法不區(qū)別無符號數(shù)和有符號數(shù),但根據(jù)運算結(jié)果分別設(shè)置標志寄存器的CF和OF標志,可利用CF和OF進行區(qū)別。 邏輯與運算規(guī)則類似二進制的乘法,所以稱其為邏輯乘。習題3.

25、2判斷題解答 對 對 對 錯 錯 對 錯 錯 對 對習題3.3填空題解答 BYTE,OFFSET 97,61,小寫字母a 0DH(13),0AH(10) 8843H DWORD,4,WORD PTR XYZ 3 0,0,0 65432H,83H 4習題3.4下列十六進制數(shù)表示無符號整數(shù),請轉(zhuǎn)換為十進制形式的真值: FFH 0H 5EH EFH解答 255 0 94 239習題3.5將下列十進制數(shù)真值轉(zhuǎn)換為壓縮BCD碼: 12 24 68 99解答 12H 24H 68H 99H習題3.6將下列壓縮BCD碼轉(zhuǎn)換為十進制數(shù): 解答 91 89 36 90習題3.7將下列十進制數(shù)用8位二進制補碼表示

26、: 0 127 127 57解答 習題3.8進行十六進制數(shù)據(jù)的加減運算,并說明是否有進位或借位: 1234H7802H F034H5AB0H C051H1234H 9876HABCDH解答 1234H7802H8A36H,無進位 F034H5AB0H4AF4H,有進位 C051H1234HBE1DH,無借位 9876HABCDHECA9H,有借位習題3.9數(shù)碼09、大寫字母AZ、小寫字母az對應的ASCII碼分別是多少?ASCII碼0DH和0AH分別對應什么字符?解答數(shù)碼09對應的ASCII碼依次是30H39H。大寫字母AZ對應的ASCII碼依次是:41H5AH。小寫字母az對應的ASCII碼

27、依次是:617AH。ASCII碼0DH和0AH分別對應的是回車和換行字符。習題3.10設(shè)置一個數(shù)據(jù)段,按照如下要求定義變量或符號常量: my1b為字符串變量:Personal Computer my2b為用十進制數(shù)表示的字節(jié)變量:20 my3b為用十六進制數(shù)表示的字節(jié)變量:20 my4b為用二進制數(shù)表示的字節(jié)變量:20 my5w為20個未賦值的字變量 my6c為100的常量 my7c表示字符串:Personal Computer解答my1bbyte Personal Computermy2bbyte 20my3bbyte 14hmy4bbyte bmy5wword 20 dup(?)my6c=

28、 100my7cequ 習題3.11定義常量NUM,其值為5;數(shù)據(jù)段中定義字數(shù)組變量DATALIST,它的頭5個字單元中依次存放-10,2,5和4,最后1個單元初值不定。解答numequ 5datalistbyte -10,2,5,4,?習題3.12從低地址開始以字節(jié)為單位,用十六進制形式給出下列語句依次分配的數(shù)值:byte ABC,10,10h,EF,3 dup(-1,?,3 dup(4)word 10h,-5,3 dup(?)解答41 42 43 0A 10 45 46 FF 00 04 04 04 FF 00 04 04 04 FF 00 04 04 0410 00 FB FF 00 0

29、0 00 00 00 00習題3.13設(shè)在某個程序中有如下片段,請寫出每條傳送指令執(zhí)行后寄存器EAX的內(nèi)容:; 數(shù)據(jù)段org 100hvarwword 1234h,5678hvarbbyte 3,4varddword hbuffbyte 10 dup(?)messbyte hello; 代碼段mov eax,offset messmov eax,type buff+type mess+type vardmov eax,sizeof varw+sizeof buff+sizeof messmov eax,lengthof varw+lengthof vard解答 EAX0114H EAX0006

30、H EAX0013H EAX0003H習題3.14按照如下輸出格式,在屏幕上顯示ASCII表: | 0 1 2 3 4 5 6 7 8 9 A B C D E F-+-20 | ! “ # .30 | 0 1 2 3 .40 | A B C .50 | P Q R S .60 | a b c .70 | p q r s .表格最上一行的數(shù)字是對應列ASCII代碼值的低4位(用十六進制形式),而表格左邊的數(shù)字對應行ASCII代碼值的高4位(用十六進制形式)。編程在數(shù)據(jù)段直接構(gòu)造這樣的表格、填寫相應ASCII代碼值(不是字符本身),然后使用字符串顯示子程序DISPMSG實現(xiàn)顯示。解答include

31、 io32.inc.datatablebyte |0 1 2 3 4 5 6 7 8 9 A B C D E F,13,10byte -+-,13,10byte 20 |,20h,20h,21h,20h,22h,20h,23h,20h,24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20hbyte 2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h,2fh,20h,13,10byte 30 |,30h,20h,31h,20h,32h,20h,33h,20h,34h,20h,35h,20h,36h,20h,37h,20h,38h

32、,20h,39h,20hbyte 3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h,3fh,20h,13,10byte 40 |,40h,20h,41h,20h,42h,20h,43h,20h,44h,20h,45h,20h,46h,20h,47h,20h,48h,20h,49h,20hbyte 4ah,20h,4bh,20h,4ch,20h,4dh,20h,4eh,20h,4fh,20h,13,10byte 50 |,50h,20h,51h,20h,52h,20h,53h,20h,54h,20h,55h,20h,56h,20h,57h,20h,58h,20h,5

33、9h,20hbyte 5ah,20h,5bh,20h,5ch,20h,5dh,20h,5eh,20h,5fh,20h,13,10byte 60 |,60h,20h,61h,20h,62h,20h,63h,20h,64h,20h,65h,20h,66h,20h,67h,20h,68h,20h,69h,20hbyte 6ah,20h,6bh,20h,6ch,20h,6dh,20h,6eh,20h,6fh,20h,13,10byte 70 |,70h,20h,71h,20h,72h,20h,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20h

34、byte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10byte 0.codestart:mov eax,offset tablecall dispmsgexit 0end start習題3.15數(shù)據(jù)段有如下定義,IA-32處理器將以小端方式保存在主存:vardword h現(xiàn)以字節(jié)為單位按地址從低到高的順序,寫出這個變量內(nèi)容。并說明如下指令的執(zhí)行結(jié)果:mov eax,var; EAX_mov bx,var; BX_mov cx,var+2; CX_mov dl,var; DL_mov dh,var+3; DH_可以編程使用十六進制字節(jié)

35、顯示子程序DSIPHB順序顯示各個字節(jié)進行驗證,還可以使用十六進制雙字顯示子程序DSIPHD顯示該數(shù)據(jù)進行對比。解答小端方式采用“低對低、高對高”,即低字節(jié)數(shù)據(jù)存放在低地址存儲單元、高字節(jié)數(shù)據(jù)存放在高地址存儲單元。以字節(jié)為單位按地址從低到高的順序,var變量的內(nèi)容:78H、56H、34H、12H。; EAXH; BX5678H; CX1234H; DL78H; DH12H習題3.16使用若干MOV指令實現(xiàn)交互指令“XCHG EBX,EDI”功能。解答push eax; 可以沒有mov eax,ebxmov ebx,edimov edi,eaxpop eax; 可以沒有習題3.17假設(shè)當前ESP

36、0012FFB0H,說明下面每條指令后,ESP等于多少?push eaxpush dxpush dword ptr 0f79hpop eaxpop word ptr bxpop ebx解答ESP0012FFACHESP0012FFAAHESP0012FFA6HESP0012FFAAHESP0012FFACHESP0012FFB0H習題3.18已知數(shù)字09對應的格雷碼依次為:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H;請為如下程序的每條指令加上注釋,說明每條指令的功能和執(zhí)行結(jié)果。; 數(shù)據(jù)段tablebyte 18h,34h,05h,06h,09h,0ah,0c

37、h,11h,12h,14h; 代碼段mov ebx,offset tablemov al,8xlat為了驗證你的判斷,不妨使用本書的I/O子程序庫提供的子程序DISPHB顯示換碼后AL的值。如果不使用XLAT指令,應如何修改?解答; 數(shù)據(jù)段tablebyte 18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h; 定義格雷碼表; 代碼段mov ebx,offset table; EBX格雷碼表首地址mov al,8; AL8xlat; AL12H(8的格雷碼)不使用XLAT指令:mov ebx,offset table; EBX格雷碼表首地址mov eax,0mov

38、al,8; AL8mov al,eax+ebx; AL12H(8的格雷碼)習題3.19請分別用一條匯編語言指令完成如下功能:(1)把EBX寄存器和EDX寄存器的內(nèi)容相加,結(jié)果存入EDX寄存器。(2)用寄存器EBX和ESI的基址變址尋址方式把存儲器的一個字節(jié)與AL寄存器的內(nèi)容相加,并把結(jié)果送到AL中。(3)用EBX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個雙字和ECX寄存器的內(nèi)容相加,并把結(jié)果送回存儲器中。(4)將32位變量VARD與數(shù)3412H相加,并把結(jié)果送回該存儲單元中。(5)把數(shù)0A0H與EAX寄存器的內(nèi)容相加,并把結(jié)果送回EAX中。解答 add edx,ebx add al,

39、ebx+esi add bx+0b2h,cx add varw,3412h add eax,0a0h習題3.20分別執(zhí)行如下程序片斷,說明每條指令的執(zhí)行結(jié)果:(解答(1); EAX80H; EAX83H,CF0,SF0; EAX103H,CF0,OF0; EAX106H,CF0,ZF0(2); EAX100; EAX300,CF0(3); EAX100; EAX44,CF1(包含256的進位含義:25644300)(4)mov al,7fh; AL7FHsub al,8; AL77H,CF0,SF0sub al,80h; ALF7H,CF1,OF1sbb al,3; ALF3H,CF0,ZF0

40、習題3.21給出下列各條指令執(zhí)行后AL值,以及CF、ZF、SF、OF和PF的狀態(tài):mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al解答mov al,89h; AL89HCF ZFSFOFPFadd al,al; AL12H1 0011add al,9dh; AL0AFH0 0101cmp al,0bch; AL0AFH1 0101sub al,al; AL00H0 1001dec al; AL0FFH0 0101inc al; AL00H0 1001習題3.22有兩個64位無符號整數(shù)存放在變量buffer1和buffer

41、2中,定義數(shù)據(jù)、編寫代碼完成EDX.EAXbuffer1buffer2功能。解答; 數(shù)據(jù)段buffer1qword hbuffer2qword h; 代碼段mov eax,dword ptr buffer1mov edx,dword ptr buffer1+4sub eax,dword ptr buffer2sbb edx,dword ptr buffer2+4習題3.23分別執(zhí)行如下程序片斷,說明每條指令的執(zhí)行結(jié)果:解答(1); ESI9CH; ESI80H; ESIFFH; ESI01H(2); EAX1010B(可以有前導0,下同); EAX0010B,CF1; EAX0100B,CF0

42、; EAX0000B,CF0(3); EAX1011B(可以有前導0,下同); EAXB,CF0; EAX10110B,CF0; EAX10111B,CF0(4); EAX0,CF0,OF0; ZF1,SF0,PF1習題3.243.24 給出下列各條指令執(zhí)行后AX的結(jié)果,以及狀態(tài)標志CF、OF、SF、ZF、PF的狀態(tài)。mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h解答mov ax,1470h; AX1470HCF OFSFZFPFand ax,ax; AX1470H0 0000or ax,ax; AX1470H0 0000

43、xor ax,ax; AX0000H0 0011not ax; AXFFFFH0 0011test ax,0f0f0h; AX0F0F0H0 0101習題3.25邏輯運算指令怎么實現(xiàn)復位、置位和求反功能?解答AND指令同“0”與實現(xiàn)復位,OR指令同“1”或?qū)崿F(xiàn)置位,XOR同“1”異或?qū)崿F(xiàn)求反。習題3.26說明如下程序段的功能:mov ecx,16mov bx,axnext:shr ax,1rcr edx,1shr bx,1rcr edx,1loop nextmov eax,edx解答將AX的每一位依次重復一次,所得的32位結(jié)果保存于EAX中。習題3.27編程將一個64位數(shù)據(jù)邏輯左移3位,假設(shè)這

44、個數(shù)據(jù)已經(jīng)保存在EDX.EAX寄存器對中。解答; 代碼段mov ecx,3again:shl eax,1rcl edx,1loop again習題3.28編程將一個壓縮BCD碼變量(例如92H)轉(zhuǎn)換為對應的ASCII碼,然后調(diào)用DISPC子程序(在輸入輸出子程序庫中)顯示。解答; 數(shù)據(jù)段bcdbyte 92h; 代碼段mov al,bcdshr al,4add al,30hcall dispcmov al,bcdand al,0fhadd al,30hcall dispc習題3.29以MOVS指令為例,說明串操作指令的尋址特點,并用MOV和ADD等指令實現(xiàn)MOVSD的功能(假設(shè)DF0)。解答M

45、OVS指令的功能是:ES:EDIDS:ESI;ESIESI1/2/4,EDIEDI1/2/4由此可看出串操作指令的尋址特點:源操作數(shù)用寄存器ESI間接尋址,默認在DS指向的數(shù)據(jù)段,但可以改變;目的操作數(shù)用寄存器EDI間接尋址,只能在ES指向的附加數(shù)據(jù)段;每執(zhí)行一次串操作,源指針ESI和目的指針EDI將自動修改:1(字節(jié)),2(字)或4(雙字)。指針的增量和減量控制由DF標志確定,DF0,進行增量;DF1,進行減量。push eaxmov eax,esimov es:edi,eaxadd esi,4add edi,4習題3.30說明如下程序執(zhí)行后的顯示結(jié)果:; 數(shù)據(jù)段msgbyte WELLDO

46、NE,0; 代碼段mov ecx,(lengthof msg)-1mov ebx,offset msgagain:mov al,ebxadd al,20hmov ebx,aladd ebx,1loop againmov eax,offset msgcall dispmsg如果將其中語句“mov ebx,offset msg”改為“xor ebx,ebx”,則利用EBX間接尋址的兩個語句如何修改成EBX寄存器相對尋址,就可以實現(xiàn)同樣功能?解答顯示結(jié)果:welldoneEBX寄存器相對尋址:mov al,msgebxmov msgebx,al習題3.31下面程序的功能是將數(shù)組ARRAY1的每個元素

47、加固定值(8000H),將和保存在數(shù)組ARRAY2。在空白處填入適當?shù)恼Z句或語句的一部分。; 數(shù)據(jù)段array1dword 1,2,3,4,5,6,7,8,9,10array2dword 10 dup(?); 代碼段mov ecx,lengthof array1mov ebx,0again:mov eax,array1ebx*4add eax,8000hmov _add ebx,_loop again解答mov array2ebx*4,eaxadd ebx,1習題3.32上機實現(xiàn)本章的例題程序,編程實現(xiàn)本章的習題程序。第4章 匯編語言程序設(shè)計習題4.1簡答題解答 當同一個程序被操作系統(tǒng)安排到不

48、同的存儲區(qū)域執(zhí)行時,指令間的位移沒有改變,目標地址采用相對尋址可方便操作系統(tǒng)的靈活調(diào)度。 數(shù)據(jù)通信時,數(shù)據(jù)的某一位用做傳輸數(shù)據(jù)的奇偶校驗位,數(shù)據(jù)中包括校驗位在內(nèi)的“1”的個數(shù)恒為奇數(shù),就是奇校驗;恒為偶數(shù),就是偶校驗。 無符號數(shù)和有符號數(shù)的操作影響兩組不同的標志狀態(tài)位,故判斷兩個無符號數(shù)和有符號數(shù)的大小關(guān)系要利用不同的標志位組合,所以有對應的兩組指令。 雙分支結(jié)構(gòu)中兩個分支體之間的JMP指令,用于實現(xiàn)結(jié)束前一個分支回到共同的出口作用。 完整的子程序注釋可方便程序員調(diào)用該子程序,子程序注釋包括子程序名、子程序功能、入口參數(shù)和出口參數(shù)、調(diào)用注意事項和其他說明等。 子程序保持堆棧平衡,才能保證執(zhí)行R

49、ET指令時當前棧頂?shù)膬?nèi)容是正確的返回地址。主程序也要保持堆棧平衡,這樣才能釋放傳遞參數(shù)占用的堆??臻g,否則多次調(diào)用該子程序可能就致使堆棧溢出。 “傳值”是傳遞參數(shù)的一個拷貝,被調(diào)用程序改變這個參數(shù)不影響調(diào)用程序;“傳址”時,被調(diào)用程序可能修改通過地址引用的變量內(nèi)容。 INCLUDE語句包含的是文本文件、是源程序文件的一部分;INCLUDELIB語句包含的是子程序庫文件。 取長補短。 Windows程序在運行時需要加載其配套的動態(tài)鏈接庫DLL文件,當其沒有被搜索到時就會提示不存在。習題4.2判斷題解答 對 錯 錯 錯 錯 對 對 錯 對 錯習題4.3填空題解答 相對尋址,間接尋址,直接尋址,間接

50、尋址 1256H,3280H 3721H,1 EAH 循環(huán)初始,循環(huán)控制 REPT1標號的地址 TEST ENDP,ENDM EBP PUBLIC,EXTERN 38H 0DH 0AH習題4.4為了驗證例題4-1程序的執(zhí)行路徑,可以在每個標號前后增加顯示功能。例如使得程序運行后顯示數(shù)碼1234。解答jmp labl1; 相對尋址nopmov eax,?call dispclabl1: mov eax,1call dispcjmp near ptr labl2; 相對近轉(zhuǎn)移nopmov eax,?call dispclabl2: mov eax,2call dispcmov eax,offset

51、 labl3 jmp eax; 寄存器間接尋址nopmov eax,?call dispclabl3: mov eax,3call dispcmov eax,offset labl4mov nvar,eaxjmp nvar; 存儲器間接尋址nopmov eax,?call dispclabl4: mov eax,4call dispc習題4.5使用“SHR EAX,2”將EAX中的D1位移入CF標志,然后用JC/JNC指令替代JZ/JNZ指令完成例題4-3的功能。解答mov eax,56h; 假設(shè)一個數(shù)據(jù)shr eax,2; D1位移入CF標志jnc nom; D10條件成立,轉(zhuǎn)移.; 余同原

52、程序習題4.6執(zhí)行如下程序片斷后,CMP指令分別使得5個狀態(tài)標志CF、ZF、SF、OF和PF為0還是為1?它會使得哪些條件轉(zhuǎn)移指令指令Jcc的條件成立、發(fā)生轉(zhuǎn)移?mov eax,20hcmp eax,80h解答CF1 ZF0 SF1 OF0 PF1可以使得條件成立、發(fā)生轉(zhuǎn)移的指令有:JC JS JP JNZ JNO習題4.7將例題4-4程序修改為實現(xiàn)偶校驗。建議進一步增加顯示有關(guān)提示信息的功能,使得程序具有更加良好的交互性。解答include io32.inc.datamsg1 byte Please input a character: ,0msg2 byte The ASCII code

53、of the charater you entered is: ,0msg3 byte The code with even parity is: ,0.codestart:mov eax,offset msg1call dispmsgcall readccall dispcrlfmov ebx,eaxmov eax,offset msg2call dispmsgmov eax,ebxcall dispbbcall dispcrlfand al,7fhjp nextor al,80hnext:mov ebx,eaxmov eax,offset msg3call dispmsgmov eax,e

54、bxcall dispbbexit 0end start習題4.8在采用奇偶校驗傳輸數(shù)據(jù)的接收端應該驗證數(shù)據(jù)傳輸?shù)恼_性。例如,如果采用偶校驗,那么在接收到的數(shù)據(jù)中,其包含“1”的個數(shù)應該為0或偶數(shù)個,否則說明出現(xiàn)傳輸錯誤?,F(xiàn)在,在接收端編寫一個這樣的程序,如果偶校驗不正確顯示錯誤信息,傳輸正確則繼續(xù)。假設(shè)傳送字節(jié)數(shù)據(jù)、最高位作為校驗位,接收到的數(shù)據(jù)已經(jīng)保存在Rdata變量中。解答; 數(shù)據(jù)段Rdatabyte 57h;保存接收的數(shù)據(jù)errorbyte Error !,0; 代碼段mov al,Rdataand al,0ffh;標志PF反映“1”的個數(shù)jp done;個數(shù)為偶數(shù),正確繼續(xù)mov

55、eax,offset error;個數(shù)為奇數(shù),顯示出錯call dispmsgdone:習題4.9指令CDQ將EAX符號擴展到EDX,即:EAX最高為0,則EDX0;EAX最高為1,則EDXFFFFFFFFH。請編程實現(xiàn)該指令功能。解答1test eax,8000h; 測試最高位jz next1; 最高位為0(ZF1),轉(zhuǎn)移到標號NEXT1mov edx,0ffffffffh; 最高位為1,順序執(zhí)行:設(shè)置EDXFFFFFFFFHjmp done; 無條件轉(zhuǎn)移,跳過另一個分支next1:mov dx,0; 最高位為0轉(zhuǎn)移到此執(zhí)行:設(shè)置EDX0done:解答2使用移位指令更好。rol eax,1r

56、cr edx,1sar edx,31ror eax,1習題4.10編程,首先測試雙字變量DVAR的最高位,如果為1,則顯示字母“L”;如果最高位不為1,則繼續(xù)測試最低位,如果最低位為1,則顯示字母“R”;如果最低位也不為1,則顯示字母“M”。解答; 數(shù)據(jù)段dvardword 57h; 代碼段mov eax,dvartest eax,hjnz nextltest eax,1jnz nextrmov al,Mjmp donenextl:mov al,Ljmp donenextr:mov al,Rdone:call dispc習題4.11編寫一個程序,先提示輸入數(shù)字“Input Number:09”

57、,然后在下一行顯示輸入的數(shù)字,結(jié)束;如果不是鍵入了09數(shù)字,就提示錯誤“Error!”,繼續(xù)等待輸入數(shù)字。解答; 數(shù)據(jù)段inmsgbyte Input number(09): ,0ermsgbyte 0dh,0ah,Error! Input again: ,0; 代碼段mov eax,offset inmsg; 提示輸入數(shù)字call dispmsgagain:call readc; 等待按鍵cmp al,0; 數(shù)字 9?ja erdispcall dispcrlfcall dispcjmp doneerdisp:mov eax,offset ermsgcall dispmsgjmp again

58、done:習題4.12有一個首地址為ARRAY的20個雙字的數(shù)組,說明下列程序段的功能。mov ecx,20mov eax,0mov esi,eaxsumlp:add eax,arrayesiadd esi,4loop sumlpmov total,eax解答求這20個雙字的和,保存在TOTAL變量,不關(guān)進心進位和溢出。習題4.13編程中經(jīng)常要記錄某個字符出現(xiàn)的次數(shù)。現(xiàn)編程記錄某個字符串中空格出現(xiàn)的次數(shù),結(jié)果保存在SPACE單元。解答; 數(shù)據(jù)段stringbyte Do you have fun with Assembly ?,0;以0結(jié)尾的字符串spacedword ?; 代碼段mov es

59、i,offset stringxor ebx,ebx;EBX用于記錄空格數(shù)again:mov al,esicmp al,0jz donecmp al,20h;空格的ASCII碼是20Hjne next;不相等、不是空格,轉(zhuǎn)移inc bx;相等、是空格,空格個數(shù)加1next:inc esijmp again;繼續(xù)循環(huán)done:mov space,ebx;保存結(jié)果習題4.14編寫計算100個16位正整數(shù)之和的程序。如果和不超過16位字的范圍(65535),則保存其和到WORDSUM,如超過則顯示Overflow !。解答; 數(shù)據(jù)段arrayword 2005,2008,98 dup (1394);

60、 假設(shè)100個16位正整數(shù)wordsumword ?errorbyte Overflow !,0; 代碼段and ebx,0mov ecx,100 xor ax,axagain:add ax,arrayebx*2jc overinc ebxloop againmov wordsum,axover:mov eax,offset errorcall dispmsg習題4.15在一個已知長度的字符串中查找是否包含“BUG”子字符串。如果存在,顯示“Y”,否則顯示“N”。解答; 數(shù)據(jù)段stringbyte If you find any error in the program, you can DE

溫馨提示

  • 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

提交評論