微機(jī)原理與接口技術(shù)課后答案(第五版)_第1頁
微機(jī)原理與接口技術(shù)課后答案(第五版)_第2頁
微機(jī)原理與接口技術(shù)課后答案(第五版)_第3頁
微機(jī)原理與接口技術(shù)課后答案(第五版)_第4頁
微機(jī)原理與接口技術(shù)課后答案(第五版)_第5頁
已閱讀5頁,還剩173頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

微機(jī)原理與接口技術(shù)錢曉捷主編課后習(xí)題答案(第五版)第1章微型計(jì)算機(jī)系統(tǒng)〔習(xí)題1.1〕簡答題①處理器每個(gè)單位時(shí)間可以處理的二進(jìn)制數(shù)據(jù)位數(shù)稱計(jì)算機(jī)字長。②總線信號分成三組,分別是數(shù)據(jù)總線、地址總線和控制總線。③PC機(jī)主存采用DRAM組成。④高速緩沖存儲(chǔ)器Cache是處理器與主存之間速度很快但容量較小的存儲(chǔ)器。⑤ROM-BIOS是“基本輸入輸出系統(tǒng)”,操作系統(tǒng)通過對BIOS的調(diào)用驅(qū)動(dòng)各硬件設(shè)備,用戶也可以在應(yīng)用程序中調(diào)用BIOS中的許多功能。⑥中斷是CPU正常執(zhí)行程序的流程被某種原因打斷、并暫時(shí)停止,轉(zhuǎn)向執(zhí)行事先安排好的一段處理程序,待該處理程序結(jié)束后仍返回被中斷的指令繼續(xù)執(zhí)行的過程。⑦主板芯片組是主板的核心部件,它提供主板上的關(guān)鍵邏輯電路。⑧MASM是微軟開發(fā)的宏匯編程序。⑨指令的處理過程。處理器的“取指—譯碼—執(zhí)行周期”是指處理器從主存儲(chǔ)器讀取指令(簡稱取指),翻譯指令代碼的功能(簡稱譯碼),然后執(zhí)行指令所規(guī)定的操作(簡稱執(zhí)行)的過程。⑩機(jī)器語言層,即指令集結(jié)構(gòu)。(學(xué)生很多認(rèn)為是:匯編語言層。前4章主要涉及匯編語言,但本書還有很多處理器原理等內(nèi)容)〔習(xí)題1.4〕CPU:CPU也稱處理器,是微機(jī)的核心。它采用大規(guī)模集成電路芯片,芯片內(nèi)集成了控制器、運(yùn)算器和若干高速存儲(chǔ)單元(即寄存器)。處理器及其支持電路構(gòu)成了微機(jī)系統(tǒng)的控制中心,對系統(tǒng)的各個(gè)部件進(jìn)行統(tǒng)一的協(xié)調(diào)和控制。存儲(chǔ)器:存儲(chǔ)器是存放程序和數(shù)據(jù)的部件。外部設(shè)備:外部設(shè)備是指可與微機(jī)進(jìn)行交互的輸入(Input)設(shè)備和輸出(Output)設(shè)備,也稱I/O設(shè)備。I/O設(shè)備通過I/O接口與主機(jī)連接。總線:互連各個(gè)部件的共用通道,主要含數(shù)據(jù)總線、地址總線和控制總線信號。〔習(xí)題1.5〕通用微處理器:適合較廣的應(yīng)用領(lǐng)域的微處理器,例如裝在PC機(jī)、筆記本電腦、工作站、服務(wù)器上的微處理器。單片機(jī):是指通常用于控制領(lǐng)域的微處理器芯片,其內(nèi)部除CPU外還集成了計(jì)算機(jī)的其他一些主要部件,只需配上少量的外部電路和設(shè)備,就可以構(gòu)成具體的應(yīng)用系統(tǒng)。DSP芯片:稱數(shù)字信號處理器,也是一種微控制器,其更適合處理高速的數(shù)字信號,內(nèi)部集成有高速乘法器,能夠進(jìn)行快速乘法和加法運(yùn)算。嵌入式系統(tǒng):利用微控制器、數(shù)字信號處理器或通用微處理器,結(jié)合具體應(yīng)用構(gòu)成的控制系統(tǒng)?!擦?xí)題1.6〕8086奠定了基本的16位指令集,80286提供了保護(hù)方式的各種指令,80386將指令集全面提升為32位,80486融入了浮點(diǎn)數(shù)據(jù)處理指令,奔騰系列陸續(xù)增加了多媒體指令MMX、SSE、SSE2和SSE3,最新的奔騰4處理器還支持64位指令集。〔習(xí)題1.7〕助記符:人們采用便于記憶、并能描述指令功能的符號來表示機(jī)器指令操作碼,該符號稱為指令助記符。匯編語言:用助記符表示的指令以及使用它們編寫程序的規(guī)則就形成匯編語言。匯編語言程序:用匯編語言書寫的程序就是匯編語言程序,或稱匯編語言源程序。匯編程序:匯編語言源程序要翻譯成機(jī)器語言程序才可以由處理器執(zhí)行。這個(gè)翻譯的過程稱為“匯編”,完成匯編工作的程序就是匯編程序(Assembler)?!擦?xí)題1.8〕路徑:操作系統(tǒng)以目錄形式管理磁盤上的文件,文件所在的分區(qū)和目錄就是該文件的路徑。絕對路徑:從根目錄到文件所在目錄的完整路徑稱為“絕對路徑”。是保證文件唯一性的標(biāo)示方法。相對路徑:從系統(tǒng)當(dāng)前目錄到文件所在目錄的路徑稱為相對路徑。當(dāng)前目錄:用戶當(dāng)前所在的目錄就是當(dāng)前目錄。指明的路徑不正確,或者執(zhí)行了另外一個(gè)同名的文件?!擦?xí)題1.9〕每18個(gè)月,集成電路的性能將提高一倍,而其價(jià)格將降低一半。(1965年,Intel公司的創(chuàng)始人之一摩爾預(yù)言:集成電路上的晶體管密度每年將翻倍?,F(xiàn)在這個(gè)預(yù)言通常表達(dá)為:每隔18個(gè)月硅片密度(晶體管容量)將翻倍;也常被表達(dá)為:每18個(gè)月,集成電路的性能將提高一倍,而其價(jià)格將降低一半。)不能。由于電子器件的物理極限在悄然逼近,摩爾定律不會(huì)永遠(yuǎn)持續(xù)?!擦?xí)題1.10〕采用二進(jìn)制形式表示數(shù)據(jù)和指令。指令由操作碼和地址碼組成。將程序和數(shù)據(jù)存放在存儲(chǔ)器中,計(jì)算機(jī)在工作時(shí)從存儲(chǔ)器取出指令加以執(zhí)行,自動(dòng)完成計(jì)算任務(wù)。這就是“存儲(chǔ)程序”和“程序控制”(簡稱存儲(chǔ)程序控制)的概念。指令的執(zhí)行是順序的,即一般按照指令在存儲(chǔ)器中存放的順序執(zhí)行,程序分支由轉(zhuǎn)移指令實(shí)現(xiàn)。計(jì)算機(jī)由存儲(chǔ)器、運(yùn)算器、控制器、輸入設(shè)備和輸出設(shè)備五大基本部件組成,并規(guī)定了5部分的基本功能。〔習(xí)題1.11〕最上層是用戶層。第5層是高級語言層。第4層是匯編語言層。第3層是操作系統(tǒng)層。第2層是機(jī)器語言層。第1層是控制層。第0層是數(shù)字電路層。普通計(jì)算機(jī)用戶和軟件人員對計(jì)算機(jī)系統(tǒng)的認(rèn)識(shí)并不一樣。普通計(jì)算機(jī)用戶看到的計(jì)算機(jī),也就是我們最熟悉的計(jì)算機(jī),屬于用戶層,而軟件人員看到的屬于高級語言層或是匯編語言層?!擦?xí)題1.12〕系列機(jī)是指在一個(gè)廠家生產(chǎn)的具有相同計(jì)算機(jī)結(jié)構(gòu),但具有不同組成和實(shí)現(xiàn)的一系列(Family)不同檔次、不同型號的機(jī)器。兼容機(jī)是指不同廠家生產(chǎn)的具有相同計(jì)算機(jī)結(jié)構(gòu)(不同的組成和實(shí)現(xiàn))的計(jì)算機(jī)。兼容是一個(gè)廣泛的概念,包括軟件兼容、硬件兼容、系統(tǒng)兼容等。其中軟件兼容是指同一個(gè)軟件可以不加修改地運(yùn)行于體系結(jié)構(gòu)相同的各檔機(jī)器,結(jié)果一樣但運(yùn)行時(shí)間可能不同。軟件兼容可從機(jī)器性能和推出時(shí)間分成向上(向下)和向前(向后)兼容。例如32位PC機(jī)就陸續(xù)增加了對浮點(diǎn)處理指令、多媒體指令等的支持。在保證向后兼容的前提下,不斷改進(jìn)其組成和實(shí)現(xiàn),延續(xù)計(jì)算機(jī)結(jié)構(gòu)的生命,才使得PC機(jī)具有如此強(qiáng)大的生命力?!擦?xí)題1.13〕酷睿2多核處理器?!擦?xí)題1.14〕高級語言與具體的計(jì)算機(jī)硬件無關(guān),其表達(dá)方式接近于所描述的問題,易為人們接受和掌握,用高級語言編寫程序要比低級語言容易得多,并大大簡化了程序的編制和調(diào)試,使編程效率得到大幅度的提高。而匯編語言是為了便于理解與記憶,將機(jī)器指令用助記符代替而形成的一種語言。匯編語言的語句通常與機(jī)器指令對應(yīng),因此,匯編語言與具體的計(jì)算機(jī)有關(guān),屬于低級語言。它比機(jī)器語言直觀,容易理解和記憶,用匯編語言編寫的程序也比機(jī)器語言易閱讀、易排錯(cuò)。機(jī)器語言的每一條機(jī)器指令都是二進(jìn)制形式的指令代碼,計(jì)算機(jī)硬件可以直接識(shí)別。高級語言程序通常也需要翻譯成匯編語言程序,再進(jìn)一步翻譯成機(jī)器語言代碼?!擦?xí)題1.15〕為了更好地進(jìn)行編程實(shí)踐,請進(jìn)入Windows操作系統(tǒng)下的控制臺(tái)環(huán)境(或MS-DOS模擬環(huán)境),練習(xí)常用命令。第2章處理器結(jié)構(gòu)〔解答〕①ALU是算術(shù)邏輯運(yùn)算單元,負(fù)責(zé)處理器所能進(jìn)行的各種運(yùn)算,主要是算術(shù)運(yùn)算和邏輯運(yùn)算。②取指是指從主存取出指令代碼通過總線傳輸?shù)教幚砥鲀?nèi)部指令寄存器的過程。8086分成總線接口單元和指令執(zhí)行單元,可以獨(dú)立操作。在執(zhí)行單元執(zhí)行一條指令的同時(shí),總線接口單元可以讀取下一條指令,等到執(zhí)行時(shí)不需要進(jìn)行取指了,所以稱為預(yù)取。③Pentium采用分離的Cache結(jié)構(gòu),一個(gè)用做指令Cache,一個(gè)用做數(shù)據(jù)Cache。④堆棧的存取原則是先進(jìn)后出(也稱為后進(jìn)先出)操作方式存取數(shù)據(jù)。⑤標(biāo)志寄存器主要保存反映指令執(zhí)行結(jié)果和控制指令執(zhí)行形式的有關(guān)狀態(tài)。⑥執(zhí)行了一條加法指令后,發(fā)現(xiàn)ZF=1,表明運(yùn)算結(jié)果為0。⑦沒有。⑧匯編語言的標(biāo)識(shí)符大小寫不敏感,即表示字母大小寫不同、但表示同一個(gè)符號。⑨不會(huì)。⑩指令的操作數(shù)需要通過存儲(chǔ)器地址或I/O地址,才能查找到數(shù)據(jù)本身,故稱數(shù)據(jù)尋址方式?!擦?xí)題2.4〕處理器內(nèi)部有ALU、寄存器和指令處理三個(gè)基本單元。8086有兩大功能部件:總線接口單元和執(zhí)行單元??偩€接口單元:管理著8086與系統(tǒng)總線的接口,負(fù)責(zé)處理器對存儲(chǔ)器和外設(shè)進(jìn)行訪問。8086所有對外操作必須通過BIU和這些總線進(jìn)行。執(zhí)行單元EU:負(fù)責(zé)指令譯碼、數(shù)據(jù)運(yùn)算和指令執(zhí)行。〔習(xí)題2.5〕8086中,指令的讀取是在BIU單元,而指令的執(zhí)行是在EU單元。因?yàn)锽IU和EU兩個(gè)單元相互獨(dú)立、分別完成各自操作,所以可以并行操作。也就是說,在EU單元對一個(gè)指令進(jìn)行譯碼執(zhí)行時(shí),BIU單元可以同時(shí)對后續(xù)指令進(jìn)行讀?。贿@就是最簡單的指令流水線技術(shù)。〔習(xí)題2.6〕標(biāo)志:用于反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式的一個(gè)或多個(gè)二進(jìn)制數(shù)位。例如,有些指令執(zhí)行后會(huì)影響有關(guān)標(biāo)志位;有些指令的執(zhí)行要利用相關(guān)標(biāo)志。狀態(tài)標(biāo)志:用來記錄程序運(yùn)行結(jié)果的狀態(tài)信息。控制標(biāo)志:DF標(biāo)志,控制字符串操作的地址方向。系統(tǒng)標(biāo)志:用于控制處理器執(zhí)行指令的方式。狀態(tài)標(biāo)志在標(biāo)志寄存器EFLAGS中的位置和含義如下:3111109876543210……OFSFZFAFPFCF〔習(xí)題2.7〕進(jìn)位標(biāo)志CF表示無符號數(shù)運(yùn)算結(jié)果是否超出范圍,超出范圍后加上進(jìn)位或借位,運(yùn)算結(jié)果仍然正確;溢出標(biāo)志OF表示有符號數(shù)運(yùn)算結(jié)果是否超出范圍,如果超出范圍,運(yùn)算結(jié)果已經(jīng)不正確。例1:3AH+7CH=B6H無符號數(shù)運(yùn)算:58+124=182,范圍內(nèi),無進(jìn)位。有符號數(shù)運(yùn)算:58+124=182,范圍外,有溢出。例2:AAH+7CH=①26H無符號數(shù)運(yùn)算:170+124=294,范圍外,有進(jìn)位。有符號數(shù)運(yùn)算:-86+124=28,范圍內(nèi),無溢出。〔習(xí)題2.8〕物理地址:在處理器地址總線上輸出的地址稱為物理地址。每個(gè)存儲(chǔ)單元有一個(gè)唯一的物理地址。邏輯地址:在處理器內(nèi)部、程序員編程時(shí)采用邏輯地址,采用“段地址:偏移地址“形式。某個(gè)存儲(chǔ)單元可以有多個(gè)邏輯地址,即處于不同起點(diǎn)的邏輯段中,但其物理地址是唯一的。邏輯地址轉(zhuǎn)換成物理地址:邏輯地址由處理器在輸出之前轉(zhuǎn)換為物理地址。將邏輯地址中的段地址左移二進(jìn)制4位(對應(yīng)16進(jìn)制是一位,即乘以16),加上偏移地址就得到20位物理地址。①FFFFH:0=FFFF0H②40H:17H=00417H③2000H:4500H=24500H④B821H:4567H=BC777H〔習(xí)題2.9〕IA-32處理器有代碼段、數(shù)據(jù)段、堆棧段三類基本段。代碼段:存放程序的指令代碼。程序的指令代碼必須安排在代碼段,否則將無法正常執(zhí)行。數(shù)據(jù)段:存放當(dāng)前運(yùn)行程序所用的數(shù)據(jù)。程序中的數(shù)據(jù)默認(rèn)是存放在數(shù)據(jù)段,也可以存放在其他邏輯段中。堆棧段:主存中堆棧所在的區(qū)域。程序使用的堆棧一定在堆棧段?!擦?xí)題2.10〕平展存儲(chǔ)模型下,對程序來說存儲(chǔ)器是一個(gè)連續(xù)的地址空間,稱為線性地址空間。程序需要的代碼、數(shù)據(jù)和堆棧都包含在這個(gè)地址空間中。段式存儲(chǔ)模型下,對程序來說存儲(chǔ)器由一組獨(dú)立的地址空間組成,獨(dú)立的地址空間稱為段。通常,代碼、數(shù)據(jù)和堆棧位于分開的段中。實(shí)地址存儲(chǔ)模型是8086處理器的存儲(chǔ)模型。它是段式存儲(chǔ)模型的特例,其線性地址空間最大為1MB容量,由最大為64KB的多個(gè)段組成?!擦?xí)題2.11〕實(shí)地址方式:與8086具有相同的基本結(jié)構(gòu),只能尋址1MB物理存儲(chǔ)器空間,邏輯段最大不超過64KB;但可以使用32位寄存器、32位操作數(shù)和32位尋址方式;相當(dāng)于可以進(jìn)行32位處理的快速8086。實(shí)地址工作方式只能支持實(shí)地址存儲(chǔ)模型。保護(hù)方式:具有強(qiáng)大的段頁式存儲(chǔ)管理和特權(quán)與保護(hù)能力,使用全部32條地址總線,可尋址4GB物理存儲(chǔ)器。保護(hù)方式通過描述符實(shí)現(xiàn)分段存儲(chǔ)管理,每個(gè)邏輯段可達(dá)4GB。處理器工作在保護(hù)方式時(shí),可以使用平展或段式存儲(chǔ)模型。虛擬8086方式:在保護(hù)方式下運(yùn)行的類似實(shí)方式的運(yùn)行環(huán)境,只能在1MB存儲(chǔ)空間下使用“16位段”。處理器工作在虛擬8086方式時(shí),只能使用實(shí)地址存儲(chǔ)模型?!擦?xí)題2.12〕匯編語句有兩種:執(zhí)行性語句(處理器指令)、說明性語句(偽指令)。每個(gè)語句有:標(biāo)號、指令助記符、操作數(shù)或參數(shù)、注釋4個(gè)部分組成。〔習(xí)題2.13〕匯編語言程序的開發(fā)有4個(gè)步驟:編輯:用文本編輯器形成一個(gè)以ASM為擴(kuò)展名的源程序文件。匯編:用匯編程序?qū)SM文件轉(zhuǎn)換為OBJ模塊文件。連接:用連接程序?qū)⒁粋€(gè)或多個(gè)目標(biāo)文件鏈接成一個(gè)EXE或COM可執(zhí)行文件。調(diào)試:用調(diào)試程序排除錯(cuò)誤,生成正確的可執(zhí)行文件?!擦?xí)題2.14〕FFH,Again,next,h_ascii〔習(xí)題2.15〕①32位存儲(chǔ)器尋址方式的組成公式32位有效地址=基址寄存器+(變址寄存器×比例)+位移量其中的4個(gè)組成部分是:·基址寄存器任何8個(gè)32位通用寄存器之一;·變址寄存器除ESP之外的任何32位通用寄存器之一;·比例可以是1,2,4或8(因?yàn)椴僮鲾?shù)的長度可以是1,2,4或8字節(jié));·位移量可以是8或32位有符號值。②16位存儲(chǔ)器尋址方式的組成公式16位有效地址=基址寄存器+變址寄存器+位移量其中基址寄存器只能是BX或BP,變址寄存器只能是SI或DI,位移量是8或16位有符號值?!擦?xí)題2.16〕①立即數(shù)②直接③寄存器④寄存器間接⑤寄存器相對⑥寄存器相對⑦基址變址⑧相對基址變址⑨相對基址變址⑩帶比例尋址〔習(xí)題2.17〕使用本書配套的軟件包(或者按照本書說明)創(chuàng)建MASM開發(fā)環(huán)境,通過編輯例題2-1和例題2-2程序、匯編連接生成可執(zhí)行程序和列表文件,掌握匯編語言的開發(fā)。第3章數(shù)據(jù)處理〔習(xí)題3.1〕簡答題①?zèng)]有。使用二進(jìn)制8位表達(dá)無符號整數(shù),257沒有對應(yīng)的編碼。②字符“'F'”的ASCII碼就是數(shù)值46H,所以沒有區(qū)別。③匯編程序在匯編過程中對數(shù)值表達(dá)式計(jì)算,得到一個(gè)確定的數(shù)值,故稱數(shù)值表達(dá)式為常量。④不能。數(shù)值500大于一個(gè)字節(jié)所能表達(dá)的數(shù)據(jù)量,所以不能為字節(jié)變量賦值。⑤源、目標(biāo)寄存器位數(shù)不同,不能用該指令進(jìn)行數(shù)據(jù)交換。⑥前者在指令執(zhí)行時(shí)獲得偏移地址,是正確的;但后者的OFFSET只能在匯編階段獲得偏移地址,但此時(shí)寄存器內(nèi)容是不可知的,所以無法獲得偏移地址。⑦INC,DEC,NEG和NOT指令的操作數(shù)既是源操作數(shù)也是目的操作數(shù)。⑧大小寫字母轉(zhuǎn)換利用它們的ASCII碼相差20H。⑨加減法不區(qū)別無符號數(shù)和有符號數(shù),但根據(jù)運(yùn)算結(jié)果分別設(shè)置標(biāo)志寄存器的CF和OF標(biāo)志,可利用CF和OF進(jìn)行區(qū)別。⑩邏輯與運(yùn)算規(guī)則類似二進(jìn)制的乘法,所以稱其為邏輯乘?!擦?xí)題3.4〕①255②0③94④239〔習(xí)題3.5〕①12H②24H③68H④99H〔習(xí)題3.6〕①91②89③36④90〔習(xí)題3.7〕①00000000②01111111③10000001④11000111〔習(xí)題3.8〕①1234H+7802H=8A36H,無進(jìn)位②F034H+5AB0H=4AF4H,有進(jìn)位③C051H-1234H=BE1DH,無借位④9876H-ABCDH=ECA9H,有借位〔習(xí)題3.9〕數(shù)碼0~9對應(yīng)的ASCII碼依次是30H~39H。大寫字母A~Z對應(yīng)的ASCII碼依次是:41H~5AH。小寫字母a~z對應(yīng)的ASCII碼依次是:61~7AH。ASCII碼0DH和0AH分別對應(yīng)的是回車和換行字符?!擦?xí)題3.10〕my1bbyte'PersonalComputer'my2bbyte20my3bbyte14hmy4bbyte00010100bmy5wword20dup(?)my6c=100my7cequ<PersonalComputer>〔習(xí)題3.11〕numequ5datalistbyte-10,2,5,4,?〔習(xí)題3.12〕4142430A104546FF00040404FF00040404FF000404041000FBFF000000000000〔習(xí)題3.13〕①EAX=0114H②EAX=0006H③EAX=0013H④EAX=0003H〔習(xí)題3.14〕includeio32.inc.datatablebyte'|0123456789ABCDEF',13,10byte'---+-------------------------------',13,10byte'20|',20h,20h,21h,20h,22h,20h,23h,20h,24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20hbyte2ah,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,20h,39h,20hbyte3ah,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,20hbyte4ah,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,59h,20hbyte5ah,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,20hbyte6ah,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,20hbyte7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10byte0.codestart:moveax,offsettablecalldispmsgexit0endstart〔習(xí)題3.15〕小端方式采用“低對低、高對高”,即低字節(jié)數(shù)據(jù)存放在低地址存儲(chǔ)單元、高字節(jié)數(shù)據(jù)存放在高地址存儲(chǔ)單元。以字節(jié)為單位按地址從低到高的順序,var變量的內(nèi)容:78H、56H、34H、12H。;EAX=12345678H;BX=5678H;CX=1234H;DL=78H;DH=12H〔習(xí)題3.16〕pusheax;可以沒有moveax,ebxmovebx,[edi]mov[edi],eaxpopeax;可以沒有〔習(xí)題3.17〕ESP=0012FFACHESP=0012FFAAHESP=0012FFA6HESP=0012FFAAHESP=0012FFACHESP=0012FFB0H〔習(xí)題3.18〕;數(shù)據(jù)段tablebyte18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h;定義格雷碼表;代碼段movebx,offsettable;EBX=格雷碼表首地址moval,8;AL=8xlat;AL=12H(8的格雷碼)不使用XLAT指令:movebx,offsettable;EBX=格雷碼表首地址moveax,0moval,8;AL=8moval,[eax+ebx];AL=12H(8的格雷碼)〔習(xí)題3.19〕①addedx,ebx②addal,[ebx+esi]③add[bx+0b2h],cx④addvarw,3412h⑤addeax,0a0h〔習(xí)題3.20〕(1);EAX=80H;EAX=83H,CF=0,SF=0;EAX=103H,CF=0,OF=0;EAX=106H,CF=0,ZF=0(2);EAX=100;EAX=300,CF=0(3);EAX=100;EAX=44,CF=1(包含256的進(jìn)位含義:256+44=300)(4)moval,7fh;AL=7FHsubal,8;AL=77H,CF=0,SF=0subal,80h;AL=F7H,CF=1,OF=1sbbal,3;AL=F3H,CF=0,ZF=0〔習(xí)題3.21〕moval,89h;AL=89HCFZFSFOFPFaddal,al;AL=12H10011addal,9dh;AL=0AFH00101cmpal,0bch;AL=0AFH10101subal,al;AL=00H01001decal;AL=0FFH00101incal;AL=00H01001〔習(xí)題3.22〕;數(shù)據(jù)段buffer1qword67883000hbuffer2qword67762000h;代碼段moveax,dwordptrbuffer1movedx,dwordptrbuffer1+4subeax,dwordptrbuffer2sbbedx,dwordptrbuffer2+4〔習(xí)題3.23〕(1);ESI=9CH;ESI=80H;ESI=FFH;ESI=01H(2);EAX=1010B(可以有前導(dǎo)0,下同);EAX=0010B,CF=1;EAX=0100B,CF=0;EAX=0000B,CF=0(3);EAX=1011B(可以有前導(dǎo)0,下同);EAX=101100B,CF=0;EAX=10110B,CF=0;EAX=10111B,CF=0(4);EAX=0,CF=0,OF=0;ZF=1,SF=0,PF=1〔習(xí)題3.24〕movax,1470h;AX=1470HCFOFSFZFPFandax,ax;AX=1470H00000orax,ax;AX=1470H00000xorax,ax;AX=0000H00011notax;AX=FFFFH00011testax,0f0f0h;AX=0F0F0H00101〔習(xí)題3.25〕AND指令同“0”與實(shí)現(xiàn)復(fù)位,OR指令同“1”或?qū)崿F(xiàn)置位,XOR同“1”異或?qū)崿F(xiàn)求反?!擦?xí)題3.26〕;代碼段movecx,3again:shleax,1rcledx,1loopagain〔習(xí)題3.28〕;數(shù)據(jù)段bcdbyte92h;代碼段moval,bcdshral,4addal,30hcalldispcmoval,bcdandal,0fhaddal,30hcalldispc〔習(xí)題3.29〕MOVS指令的功能是:ES:[EDI]←DS:[ESI];ESI←ESI±1/2/4,EDI←EDI±1/2/4由此可看出串操作指令的尋址特點(diǎn):源操作數(shù)用寄存器ESI間接尋址,默認(rèn)在DS指向的數(shù)據(jù)段,但可以改變;目的操作數(shù)用寄存器EDI間接尋址,只能在ES指向的附加數(shù)據(jù)段;每執(zhí)行一次串操作,源指針ESI和目的指針EDI將自動(dòng)修改:±1(字節(jié)),±2(字)或±4(雙字)。指針的增量和減量控制由DF標(biāo)志確定,DF=0,進(jìn)行增量;DF=1,進(jìn)行減量。pusheaxmoveax,[esi]moves:[edi],eaxaddesi,4addedi,4〔習(xí)題3.30〕顯示結(jié)果:welldoneEBX寄存器相對尋址:moval,msg[ebx]movmsg[ebx],al〔習(xí)題3.31〕movarray2[ebx*4],eaxaddebx,1〔習(xí)題3.32〕上機(jī)實(shí)現(xiàn)本章的例題程序,編程實(shí)現(xiàn)本章的習(xí)題程序。第4章匯編語言程序設(shè)計(jì)①當(dāng)同一個(gè)程序被操作系統(tǒng)安排到不同的存儲(chǔ)區(qū)域執(zhí)行時(shí),指令間的位移沒有改變,目標(biāo)地址采用相對尋址可方便操作系統(tǒng)的靈活調(diào)度。②數(shù)據(jù)通信時(shí),數(shù)據(jù)的某一位用做傳輸數(shù)據(jù)的奇偶校驗(yàn)位,數(shù)據(jù)中包括校驗(yàn)位在內(nèi)的“1”的個(gè)數(shù)恒為奇數(shù),就是奇校驗(yàn);恒為偶數(shù),就是偶校驗(yàn)。③無符號數(shù)和有符號數(shù)的操作影響兩組不同的標(biāo)志狀態(tài)位,故判斷兩個(gè)無符號數(shù)和有符號數(shù)的大小關(guān)系要利用不同的標(biāo)志位組合,所以有對應(yīng)的兩組指令。④雙分支結(jié)構(gòu)中兩個(gè)分支體之間的JMP指令,用于實(shí)現(xiàn)結(jié)束前一個(gè)分支回到共同的出口作用。⑤完整的子程序注釋可方便程序員調(diào)用該子程序,子程序注釋包括子程序名、子程序功能、入口參數(shù)和出口參數(shù)、調(diào)用注意事項(xiàng)和其他說明等。⑥子程序保持堆棧平衡,才能保證執(zhí)行RET指令時(shí)當(dāng)前棧頂?shù)膬?nèi)容是正確的返回地址。主程序也要保持堆棧平衡,這樣才能釋放傳遞參數(shù)占用的堆??臻g,否則多次調(diào)用該子程序可能就致使堆棧溢出。⑦“傳值”是傳遞參數(shù)的一個(gè)拷貝,被調(diào)用程序改變這個(gè)參數(shù)不影響調(diào)用程序;“傳址”時(shí),被調(diào)用程序可能修改通過地址引用的變量內(nèi)容。⑧INCLUDE語句包含的是文本文件、是源程序文件的一部分;INCLUDELIB語句包含的是子程序庫文件。⑨取長補(bǔ)短。⑩Windows程序在運(yùn)行時(shí)需要加載其配套的動(dòng)態(tài)鏈接庫DLL文件,當(dāng)其沒有被搜索到時(shí)就會(huì)提示不存在。〔習(xí)題4.4〕jmplabl1;相對尋址nopmoveax,'?'calldispclabl1:moveax,'1'calldispcjmpnearptrlabl2;相對近轉(zhuǎn)移nopmoveax,'?'calldispclabl2:moveax,'2'calldispcmoveax,offsetlabl3jmpeax;寄存器間接尋址nopmoveax,'?'calldispclabl3:moveax,'3'calldispcmoveax,offsetlabl4movnvar,eaxjmpnvar;存儲(chǔ)器間接尋址nopmoveax,'?'calldispclabl4:moveax,'4'calldispc〔習(xí)題4.5〕moveax,56h;假設(shè)一個(gè)數(shù)據(jù)shreax,2;D1位移入CF標(biāo)志jncnom;D1=0條件成立,轉(zhuǎn)移...;余同原程序〔習(xí)題4.6〕CF=1ZF=0SF=1OF=0PF=1可以使得條件成立、發(fā)生轉(zhuǎn)移的指令有:JCJSJPJNZJNO〔習(xí)題4.7〕includeio32.inc.datamsg1byte'Pleaseinputacharacter:',0msg2byte'TheASCIIcodeofthecharateryouenteredis:',0msg3byte'Thecodewithevenparityis:',0.codestart:moveax,offsetmsg1calldispmsgcallreadccalldispcrlfmovebx,eaxmoveax,offsetmsg2calldispmsgmoveax,ebxcalldispbbcalldispcrlfandal,7fhjpnextoral,80hnext:movebx,eaxmoveax,offsetmsg3calldispmsgmoveax,ebxcalldispbbexit0endstart〔習(xí)題4.8〕;數(shù)據(jù)段Rdatabyte57h;保存接收的數(shù)據(jù)errorbyte'Error!',0;代碼段moval,Rdataandal,0ffh;標(biāo)志PF反映“1”的個(gè)數(shù)jpdone;個(gè)數(shù)為偶數(shù),正確繼續(xù)moveax,offseterror;個(gè)數(shù)為奇數(shù),顯示出錯(cuò)calldispmsgdone:〔習(xí)題4.9〕testeax,8000h;測試最高位jznext1;最高位為0(ZF=1),轉(zhuǎn)移到標(biāo)號NEXT1movedx,0ffffffffh;最高位為1,順序執(zhí)行:設(shè)置EDX=FFFFFFFFHjmpdone;無條件轉(zhuǎn)移,跳過另一個(gè)分支next1:movdx,0;最高位為0轉(zhuǎn)移到此執(zhí)行:設(shè)置EDX=0done:〔解答2〕使用移位指令更好。roleax,1rcredx,1saredx,31roreax,1〔習(xí)題4.10〕;數(shù)據(jù)段dvardword57h;代碼段moveax,dvartesteax,80000000hjnznextltesteax,1jnznextrmoval,'M'jmpdonenextl:moval,'L'jmpdonenextr:moval,'R'done:calldispc〔習(xí)題4.11〕;數(shù)據(jù)段inmsgbyte'Inputnumber(0~9):',0ermsgbyte0dh,0ah,'Error!Inputagain:',0;代碼段moveax,offsetinmsg;提示輸入數(shù)字calldispmsgagain:callreadc;等待按鍵cmpal,'0';數(shù)字<0?jberdispcmpal,'9';數(shù)字>9?jaerdispcalldispcrlfcalldispcjmpdoneerdisp:moveax,offsetermsgcalldispmsgjmpagaindone:〔習(xí)題4.12〕求這20個(gè)雙字的和,保存在TOTAL變量,不關(guān)進(jìn)心進(jìn)位和溢出。〔習(xí)題4.13〕;數(shù)據(jù)段stringbyte'DoyouhavefunwithAssembly?',0;以0結(jié)尾的字符串spacedword?;代碼段movesi,offsetstringxorebx,ebx;EBX用于記錄空格數(shù)again:moval,[esi]cmpal,0jzdonecmpal,20h;空格的ASCII碼是20Hjnenext;不相等、不是空格,轉(zhuǎn)移incbx;相等、是空格,空格個(gè)數(shù)加1next:incesijmpagain;繼續(xù)循環(huán)done:movspace,ebx;保存結(jié)果〔習(xí)題4.14〕;數(shù)據(jù)段arrayword2005,2008,98dup(1394);假設(shè)100個(gè)16位正整數(shù)wordsumword?errorbyte'Overflow!',0;代碼段andebx,0movecx,100xorax,axagain:addax,array[ebx*2]jcoverincebxloopagainmovwordsum,axover:moveax,offseterrorcalldispmsg〔習(xí)題4.15〕;數(shù)據(jù)段stringbyte'Ifyoufindanyerrorintheprogram,youcanDEBUGit.'count=sizeofstringbugbyte'BUG';代碼段movecx,countmovedi,offsetstringL1:movesi,offsetbugpushedimovedx,sizeofbugLN:moval,[esi]cmp[edi],aljneL2incesiincedidecedxjneLNpopedimoval,'Y'jmpL3L2:popediincediloopL1moval,'N'L3:calldispc〔習(xí)題4.16〕;數(shù)據(jù)段bcddword00371002h;代碼段movesi,bcdcmpesi,0jnzgoonmoval,'0'calldispcjmpdonegoon:movecx,8xorebx,ebx;EBX=0,表示可能是前導(dǎo)0again:rolesi,4moveax,esiandeax,0fh;EAX低4位保存當(dāng)前要顯示的BCD碼cmpebx,0;EBX≠0,說明不是前導(dǎo)0,要顯示jnzdisp;EBX=0,說明可能是前導(dǎo)0cmpeax,0jznext;EAX=0,說明是前導(dǎo)0,不顯示movebx,1;EAX≠0,沒有前導(dǎo)0了,令EBX=1≠0disp:addal,30hcalldispcnext:loopagaindone:〔習(xí)題4.17〕;數(shù)據(jù)段stringbyte'Letushaveatry!',0dh,0ah,0;代碼段movecx,sizeofstringcmpecx,2jbdoneleaeax,string;顯示處理前的字符串calldispmsgmovesi,ecxdecesioutlp:cmpstring[esi],'';檢測是否是空格jnznext;不是空格繼續(xù)循環(huán)movedi,esi;是空格,進(jìn)入剔除空格分支dececxinlp:incedimoval,string[edi];前移一個(gè)位置movstring[edi-1],alcmpedi,ecxjbinlpnext:decesi;繼續(xù)進(jìn)行cmpesi,0jnzoutlp;為0結(jié)束leaeax,string;顯示處理后的字符串calldispmsgdone:〔習(xí)題4.18〕includeio32.inc.datatablebyte'|0123456789ABCDEF',13,10byte'---+-------------------------------',13,10tab1byte6dup(36dup(?),13,10)byte0.codestart:movebx,offsettab1movedx,'|02'movax,2020hmovesi,6again0:mov[ebx],edxaddebx,4movecx,16again1:movwordptr[ebx],axaddebx,2incalloopagain1addebx,2addedx,1decesijnzagain0moveax,offsettablecalldispmsgexit0endstart〔習(xí)題4.19〕asctobprocshldh,4moval,dhanddl,0fhoral,dlretasctobendp〔習(xí)題4.20〕disp99procxorah,ahaamaddax,3030hpushaxmoval,ahcalldispcpopaxcalldispcretdisp99endp〔習(xí)題4.21〕;代碼段,主程序again:callreadccmpal,1bhjzdonemovbl,almoval,':'calldispcmoval,blrolal,4callhtoasc;調(diào)用子程序calldispc;顯示一個(gè)字符moval,blcallhtoasc;調(diào)用子程序calldispc;顯示一個(gè)字符calldispcrlfjmpagaindone:〔習(xí)題4.22〕;代碼段,主程序moveax,8F98FF00Hcalldispbd;調(diào)用子程序;代碼段,子程序dispbdproc;32位二進(jìn)制數(shù)的輸出pushecxpushedxmovecx,32;要輸出的字符個(gè)數(shù)dbd:roleax,1;AL循環(huán)左移一位pusheaxandal,01h;取AL最低位addal,30h;轉(zhuǎn)化成相應(yīng)的ASCLL碼值calldispc;以二進(jìn)制的形式顯示popeaxloopdbdpopedxpopecxretdispbdendp〔習(xí)題4.23〕;數(shù)據(jù)段arrayword12345,-1234,32767,-32768,0,667writebufbyte6dup(0);代碼段,主程序movecx,lengthofarraymovebx,0again:movax,array[ebx*2]callwritecalldispcrlfincebx;此時(shí)ebx代表array中的第幾個(gè)數(shù)dececx;此時(shí)ecx代表循環(huán)的次數(shù)jnzagain;代碼段,子程序writeproc;子程序開始pushebxpushecxpushedxmovebx,offsetwritebuf;ebx指向顯示緩沖區(qū)testax,axjnzwrite1movbyteptr[ebx],30hincebxjmpwrite5write1:;若不為0則首先判斷是正是負(fù)jnswrite2;若為正則跳過下面兩步到write2movbyteptr[ebx],'-'incebxnegaxwrite2:movcx,10pushcx;將cx=10壓入棧,作為退出標(biāo)志write3:;write3是讓eax循環(huán)除以10并把余數(shù)的ASCII碼壓入棧cmpax,0jzwrite4xordx,dxdivcxadddx,30hpushdxjmpwrite3write4:;余數(shù)的ASCII碼出棧,遇到10終止并轉(zhuǎn)到write5顯示結(jié)果popdxcmpdx,cxjzwrite5movbyteptr[ebx],dlincebxjmpwrite4write5:;顯示結(jié)果movbyteptr[ebx],0moveax,offsetwritebufcalldispmsgpopedxpopecxpopebxretwriteendp〔習(xí)題4.24〕;數(shù)據(jù)段count=10arraydwordcountdup(0)tempdword?readbufbyte30dup(0)errmsgbyte'Inputerror,enteragain!',13,10,0msg1byte'Inputtenunsignednumbers,eachnumberendswithenterkey:',13,10,0msg2byte'Checkthenumbersyourinputted:',13,10,0;代碼段,主程序moveax,offsetmsg1calldispmsgmovecx,countmovebx,offsetarrayagain:callreadmoveax,tempmov[ebx],eaxaddebx,4dececxjnzagainmoveax,offsetmsg2calldispmsgmovedx,offsetarraymovecx,countnext:moveax,[edx]calldispuidcalldispcrlfaddedx,4dececxjnznext;代碼段,子程序readprocpusheaxpushecxpushebxpushedxread0:moveax,offsetreadbufcallreadmsgtesteax,eaxjzreaderrcmpeax,12jareaderrmovedx,offsetreadbufxorebx,ebxxorecx,ecxmoval,[edx]cmpal,'+'jzread1cmpal,'-'jnzread2jmpreaderrread1:incedxmoval,[edx]testal,aljzread3;如果為0,則說明該字符串已結(jié)束read2:cmpal,'0'jbreaderrcmpal,'9'jareaderrsubal,30himulebx,10;ebx用來存儲(chǔ)處理過的數(shù)據(jù)jcreaderrmovzxeax,aladdebx,eaxjncread1readerr:moveax,offseterrmsgcalldispmsgjmpread0read3:movtemp,ebxpopedxpopebxpopecxpopeaxretreadendp〔習(xí)題4.25〕;計(jì)算字節(jié)校驗(yàn)和的通用過程;入口參數(shù):DS:EBX=數(shù)組的段地址:偏移地址,ECX=元素個(gè)數(shù);出口參數(shù):AL=校驗(yàn)和;說明:除EAX/EBX/ECX外,不影響其他寄存器checksumprocxoral,al;累加器清0sum:addal,[ebx];求和incebx;指向下一個(gè)字節(jié)loopsumretchecksumendp〔習(xí)題4.26〕(1);數(shù)據(jù)段wvarword307281AFH;代碼段,主程序moveax,wvarcalldispmoval,'H'calldispc;代碼段,子程序dispprocpushebxpushecxmovecx,8;8位dhw1:roleax,4movebx,eaxandal,0fh;轉(zhuǎn)換為ASCII碼addal,30hcmpal,'9'jbedhw2addal,7dhw2:calldispcmoveax,ebxloopdhw1popecxpopebxretdispendp(2);數(shù)據(jù)段wvarword307281AFHtempword?;代碼段,主程序moveax,wvarmovtemp,eaxcalldispmoval,'H'calldispc;代碼段,子程序dispprocpushebxpushecxmovecx,8;8位moveax,tempdhw1:roleax,4movebx,eaxandal,0fh;轉(zhuǎn)換為ASCII碼addal,30hcmpal,'9'jbedhw2addal,7dhw2:calldispc;顯示一個(gè)字符moveax,ebxloopdhw1popecxpopebxretdispendp(3);數(shù)據(jù)段wvarword307281AFH;代碼段,主程序pushwvarcalldispaddesp,4moval,'H'calldispc;代碼段,子程序dispprocpushebpmovebp,esppushebxpushecxmovecx,8;8位moveax,[ebp+8]dhw1:roleax,4movebx,eaxandal,0fh;轉(zhuǎn)換為ASCII碼addal,30hcmpal,'9'jbedhw2addal,7dhw2:calldispcmoveax,ebxloopdhw1popecxpopebxpopebpretdispendp〔習(xí)題4.27〕;ex0427.asmincludeio32.inc.datakeybyte?msg0byte'Enteryourpassword:',0passwbyte50dup(0)errormsgbyte'Passworderror,inputagain!',13,10,0bufnum=255bufferbytebufnum+1dup(0);定義鍵盤輸入需要的緩沖區(qū)msg1byte'Entermessge:',0msg2byte'Encryptedmessage:',0msg3byte'Originalmessge:',0.codestart:moveax,offsetmsg0;提示輸入加密密碼calldispmsgmoveax,offsetpassw;設(shè)置入口參數(shù)EAXcallreadmsg;調(diào)用輸入字符串子程序輸入密碼movecx,eaxdececxxorebx,ebxmoval,passw[ebx]again0:incebxxoral,passw[ebx];使用簡單的異或方法得到加密關(guān)鍵字loopagain0movkey,al;保存加密關(guān)鍵字moveax,offsetmsg1;提示輸入字符串calldispmsgmoveax,offsetbuffer;設(shè)置入口參數(shù)EAXcallreadmsg;調(diào)用輸入字符串子程序pusheax;字符個(gè)數(shù)保存進(jìn)入堆棧movecx,eax;ECX=實(shí)際輸入的字符個(gè)數(shù),作為循環(huán)的次數(shù)xorebx,ebx;EBX指向輸入字符encrypt:moval,key;AL=加密關(guān)鍵字xorbuffer[ebx],al;異或加密incebxdececx;等同于指令:loopencryptjnzencrypt;處理下一個(gè)字符moveax,offsetmsg2calldispmsgmoveax,offsetbuffer;顯示加密后的密文calldispmsgcalldispcrlf;again:moveax,offsetmsg0;提示輸入解密密碼calldispmsgmoveax,offsetpassw;設(shè)置入口參數(shù)EAXcallreadmsg;調(diào)用輸入字符串子程序輸入密碼movecx,eaxdececxxorebx,ebxmoval,passw[ebx]again1:incebxxoral,passw[ebx];使用簡單的異或方法得到加密關(guān)鍵字loopagain1cmpkey,al;與原加密關(guān)鍵字比較jznext;密碼相同,則進(jìn)行解密moveax,offseterrormsg;提示輸入解密密碼錯(cuò)誤calldispmsgjmpagainnext:popecx;從堆棧彈出字符個(gè)數(shù),作為循環(huán)的次數(shù)xorebx,ebx;EBX指向輸入字符decrypt:moval,key;AL=解密關(guān)鍵字xorbuffer[ebx],al;異或解密incebxdececxjnzdecrypt;處理下一個(gè)字符moveax,offsetmsg3calldispmsgmoveax,offsetbuffer;顯示解密后的明文calldispmsg〔習(xí)題4.28〕;ex0428.asmincludeio32.inc.datamsg1byte'Entertheintegers:',13,10,0msg2byte13,10,'Enterspacetocontinue!Enteranyotherkeytoexit!',13,10,0.codestart:moveax,offsetmsg1calldispmsgcallreadsidmovebx,eaxmoval,'+'calldispccalldispcrlfcallreadsidaddebx,eaxmoval,'='calldispcmoveax,ebxcalldispsidcalldispcrlfmoveax,offsetmsg2calldispmsgcallreadccmpal,20hjestartexit0endstart〔習(xí)題4.29〕;ex0429.asminWindowsConsoleincludeio32.inc.datavarbyte'Thisisatest!'.codestart:;主程序moveax,offsetvarmovecx,sizeofvarcalldispmemexit0;子程序dispmemprocpushebxmovebx,eaxdispm1:moval,[ebx]calldisphbmoval,''calldispcincebxloopdispm1popebxretdispmemendpendstart〔習(xí)題4.30〕將例題4-19分別使用子程序模塊、子程序庫和子程序庫包含方法生成最終可執(zhí)行文件?!擦?xí)題4.31〕宏定義:就是對宏進(jìn)行說明,由一對宏匯編偽指令MACRO和ENDM來完成。宏調(diào)用:宏定義之后的使用。在使用宏指令的位置寫下宏名,后跟實(shí)體參數(shù)。宏指令:使用宏時(shí),其形式很像指令,所以稱為宏指令。宏展開:在匯編時(shí),匯編程序用對應(yīng)的代碼序列替代宏指令。宏匯編:指使用宏的方法進(jìn)行匯編語言程序設(shè)計(jì)?!擦?xí)題4.32〕直接使用控制臺(tái)輸入和輸出函數(shù)實(shí)現(xiàn)例題4-21的功能(不使用READMSG和DISPMSG子程序)?!步獯稹场擦?xí)題4.33〕直接使用控制臺(tái)輸出函數(shù)實(shí)現(xiàn)某個(gè)主存區(qū)域內(nèi)容的顯示(習(xí)題4.29的功能)??梢愿倪M(jìn)顯示形式,例如每行顯示16個(gè)字節(jié)(128位),每行開始先顯示首個(gè)主存單元的偏移地址,然后用冒號分隔主存內(nèi)容。〔解答〕〔習(xí)題4.34〕將MB_OK常量定義為1,即:MB_OKequ1〔習(xí)題4.35〕上機(jī)實(shí)踐例題4-23和例題4-24,并在創(chuàng)建可執(zhí)行文件的過程中生成匯編語言列表文件?!擦?xí)題4.36〕Pentium處理器含有一個(gè)64位的時(shí)間標(biāo)記計(jì)數(shù)器(Time-StampCounter)。該計(jì)數(shù)器每個(gè)時(shí)鐘周期遞增(加1);在上電和復(fù)位后,該計(jì)數(shù)器清0。指令“RDTSC”執(zhí)行后將在EDX(高32位)和EAX(低32位)返回當(dāng)前的64位時(shí)間標(biāo)記計(jì)數(shù)器值。利用RDTSC指令在某個(gè)函數(shù)運(yùn)行前獲得時(shí)間標(biāo)記計(jì)數(shù)器值,然后運(yùn)行該函數(shù)后,立即再次執(zhí)行RDTSC指令,并將再次獲得的時(shí)間標(biāo)記計(jì)數(shù)器值與之前的計(jì)數(shù)值相減,得到的差值就是運(yùn)行該函數(shù)需要的時(shí)鐘周期數(shù)(乘以時(shí)鐘周期,等于運(yùn)行時(shí)間)。請利用混合編程方法顯示某個(gè)函數(shù)的運(yùn)行時(shí)鐘周期數(shù)?!步獯稹车?章微機(jī)總線〔習(xí)題5.1〕數(shù)據(jù)總線承擔(dān)著處理器與存儲(chǔ)器、外設(shè)之間的數(shù)據(jù)交換,既可以輸入也可以輸出,故其是雙向的。為減少引腳個(gè)數(shù),8086采用了地址總線和數(shù)據(jù)總線分時(shí)復(fù)用。即數(shù)據(jù)總線在不同時(shí)刻還具有地址總線的功能。具有三態(tài)能力的引腳當(dāng)輸出呈現(xiàn)高阻狀態(tài)時(shí),相當(dāng)于連接了一個(gè)阻抗很高的外部器件,信號無法正常輸出;即放棄對該引腳的控制,與其他部件斷開連接。處理器的運(yùn)行速度遠(yuǎn)遠(yuǎn)快于存儲(chǔ)器和I/O端口。處理器檢測到存儲(chǔ)器或I/O端口不能按基本的總線周期進(jìn)行數(shù)據(jù)交換時(shí),插入一個(gè)等待狀態(tài)Tw。等待狀態(tài)實(shí)際上是一個(gè)保持總線信號狀態(tài)不變的時(shí)鐘周期。猝發(fā)傳送是處理器只提供首地址、但可以從后續(xù)連續(xù)的存儲(chǔ)單元中讀寫多個(gè)數(shù)據(jù)??偩€上可能連接多個(gè)需要控制總線的主設(shè)備,需要確定當(dāng)前需要控制總線的主設(shè)備,所以需要總線仲裁。異步時(shí)序是由總線握手(Handshake)聯(lián)絡(luò)(應(yīng)答)信號控制,不是由總線時(shí)鐘控制。故總線時(shí)鐘信號可有可無。單總線結(jié)構(gòu)限制了許多需要高速傳輸速度的部件。32位PC機(jī)采用多種總線并存的系統(tǒng)結(jié)構(gòu)。各種專用局部總線源于處理器芯片總線,以接近處理器芯片引腳的速度傳輸數(shù)據(jù),它為高速外設(shè)提供速度快、性能高的共用通道。4個(gè)。即插即用技術(shù)是指32位PC機(jī)的主板、操作系統(tǒng)和總線設(shè)備配合,實(shí)現(xiàn)自動(dòng)配置功能?!擦?xí)題5.4〕存儲(chǔ)器讀、存儲(chǔ)器寫,I/O讀、I/O寫?!擦?xí)題5.5〕RESET:復(fù)位輸入信號,高電平有效。該引腳有效時(shí),將迫使處理器回到其初始狀態(tài);轉(zhuǎn)為無效時(shí),CPU重新開始工作。HOLD:總線請求,是一個(gè)高電平有效的輸入信號。該引腳有效時(shí),表示其他總線主控設(shè)備向處理器申請使用原來由處理器控制的總線。NMI:不可屏蔽中斷請求,是一個(gè)利用上升沿有效的輸入信號。該引腳信號有效時(shí),表示外界向CPU申請不可屏蔽中斷。INTR:可屏蔽中斷請求,是一個(gè)高電平有效的輸入信號。該引腳信號有效時(shí),表示中斷請求設(shè)備向處理器申請可屏蔽中斷?!擦?xí)題5.6〕指令周期:一條指令從取指、譯碼到最終執(zhí)行完成的過程??偩€周期(機(jī)器周期):有數(shù)據(jù)交換的總線操作。時(shí)鐘周期:處理器的基本工作節(jié)拍,由時(shí)鐘信號產(chǎn)生,一個(gè)高電平和一個(gè)低電平為一個(gè)周期。T狀態(tài):完成特定操作的一個(gè)時(shí)鐘周期。由于時(shí)間上一個(gè)T狀態(tài)等于一個(gè)時(shí)鐘周期,所以常常將兩者混為一談?!擦?xí)題5.7〕T1狀態(tài):總線周期的第一個(gè)時(shí)鐘周期主要用于輸出存儲(chǔ)器地址或I/O地址;T2狀態(tài):輸出讀/寫控制信號。T3狀態(tài):鎖存地址、處理器提供的控制信號和數(shù)據(jù)在總線上繼續(xù)維持有效,且T3時(shí)鐘的前沿(下降沿)對READY引腳進(jìn)行檢測。READY信號有效,進(jìn)入T4周期。T4狀態(tài):總線周期的最后一個(gè)時(shí)鐘周期,處理器和存儲(chǔ)器或I/O端口繼續(xù)進(jìn)行數(shù)據(jù)傳送,直到完成,并為下一個(gè)總線周期做好準(zhǔn)備。Tw狀態(tài):等待狀態(tài)。處理器在T3前沿發(fā)現(xiàn)READY信號無效后,插入Tw。Tw狀態(tài)的引腳信號延續(xù)T3時(shí)的狀態(tài)、維持不變?!擦?xí)題5.8〕CLK:時(shí)鐘輸入。時(shí)鐘信號是一個(gè)頻率穩(wěn)定的數(shù)字信號,其頻率就是處理器的工作頻率,工作頻率的倒數(shù)就是時(shí)鐘周期的時(shí)間長度。A19/S6~A16/S3:地址/狀態(tài)分時(shí)復(fù)用引腳,是一組4個(gè)具有三態(tài)能力的輸出信號。這些引腳在訪問存儲(chǔ)器的第一個(gè)時(shí)鐘周期輸出高4位地址A19~A16,在訪問外設(shè)的第一個(gè)時(shí)鐘周期輸出低電平無效;其他時(shí)間輸出狀態(tài)信號S6~S3。AD15~AD0:地址/數(shù)據(jù)分時(shí)復(fù)用引腳,共16個(gè)引腳,用作地址總線時(shí)是單向輸出信號;用作數(shù)據(jù)總線時(shí)是雙向信號,具有三態(tài)輸出能力。ALE:地址鎖存允許,是一個(gè)三態(tài)、輸出、高電平有效的信號。有效時(shí),表示復(fù)用引腳(AD15~AD0和A19/S6~A16/S3)上正在傳送地址信號。:訪問存儲(chǔ)器或者I/O,是一個(gè)三態(tài)輸出信號,該引腳高電平時(shí),表示處理器將訪問存儲(chǔ)器,此時(shí)地址總線A19~A0提供20位的存儲(chǔ)器物理地址。該引腳低電平時(shí),表示處理器將訪問I/O端口,此時(shí)地址總線A15~A0提供16位的I/O地址。:讀控制,也是一個(gè)三態(tài)、輸出低電平有效信號。有效時(shí),表示處理器正在從存儲(chǔ)單元或I/O端口讀取數(shù)據(jù)。:寫控制,是一個(gè)三態(tài)、輸出低電平有效信號。有效時(shí),表示處理器正將數(shù)據(jù)寫到存儲(chǔ)單元或I/O端口?!擦?xí)題5.9〕芯片總線:是指大規(guī)模集成電路芯片內(nèi)部,或系統(tǒng)中各種不同器件連接在一起的總線;用于芯片級互連。局部總線:位于處理器附件的器件相互連接的總線,相對于芯片總線。系統(tǒng)總線:通常是指微機(jī)系統(tǒng)的主要總線。并行總線:采用并行傳輸方式的總線。串行總線:將多位數(shù)據(jù)按二進(jìn)制位的順序在數(shù)據(jù)線上逐位傳送的總線。地址總線:實(shí)現(xiàn)地址信息互連和交換的一組導(dǎo)線。數(shù)據(jù)總線:實(shí)現(xiàn)數(shù)據(jù)信息互連和交換的一組導(dǎo)線。控制總線:控制協(xié)調(diào)處理器和內(nèi)存、外設(shè)交互信息的一組導(dǎo)線。ISA總線:即IBMPC/AT總線,以處理器80286引腳形成的總線,分成支持8位操作的前62信號和擴(kuò)展16位操作的后36信號。PCI總線:外設(shè)部件互連總線,不僅適用于IA-32處理器,也適用其它處理器,支持32位和64位操作,廣泛用于32位通用微型計(jì)算機(jī)中。〔習(xí)題5.10〕同步時(shí)序:總線操作的各個(gè)過程由共用的總線時(shí)鐘信號控制。半同步時(shí)序:總線操作仍由共用的總線時(shí)鐘信號控制,但慢速模塊可以通過等待信號讓快速模塊等待。異步時(shí)序:總線操作需要握手(Handshake)聯(lián)絡(luò)(應(yīng)答)信號控制,總線時(shí)鐘信號可有可無。〔習(xí)題5.11〕(32×8)÷(2×8)=16MBps〔習(xí)題5.12〕PCI總線與處理器無關(guān),具有32位和64位數(shù)據(jù)總線,有+5V和+3.3V兩種設(shè)計(jì),采用集中式總線仲裁、支持多處理器系統(tǒng),通過橋(Bridge)電路兼容ISA/EISA總線,具有即插即用的自動(dòng)配置能力等一系列優(yōu)勢?!擦?xí)題5.13〕主設(shè)備利用IRDY#信號無效、從設(shè)備利用TRDY#信號無效要求對方等待,即插入等待狀態(tài)。〔習(xí)題5.14〕“熱插拔”是在PC機(jī)正常工作狀態(tài)進(jìn)行插入或拔出。這個(gè)特性可以使用戶隨時(shí)連接USB設(shè)備?!擦?xí)題5.15〕使用方便、擴(kuò)充能力強(qiáng)。支持多種傳輸速度、適用面廣。低功耗、低成本、占用系統(tǒng)資源少?!擦?xí)題5.16〕集線器是專門用于提供額外USB接入點(diǎn)的USB設(shè)備。主機(jī)需要集線器,被稱為根集線器?!擦?xí)題5.17〕USB的數(shù)據(jù)傳輸有4種:控制傳輸——在USB設(shè)備初次安裝時(shí),USB系統(tǒng)軟件使用控制傳輸方式設(shè)置USB設(shè)備參數(shù)、發(fā)送控制指令、查詢狀態(tài)等。批量傳輸——對于打印機(jī)、掃描儀等設(shè)備需要傳輸大量數(shù)據(jù),可以使用批量傳輸方式連續(xù)傳輸一批數(shù)據(jù)。中斷傳輸——該方式傳輸?shù)臄?shù)據(jù)量很小,但需要及時(shí)處理,以保證實(shí)時(shí)性,主要用于鍵盤、鼠標(biāo)等設(shè)備上。同步傳輸——該方式以穩(wěn)定的速率發(fā)送和接收信息,保證數(shù)據(jù)的連續(xù)和及時(shí),用于數(shù)據(jù)傳輸正確性要求不高而對實(shí)時(shí)性要求高的外設(shè),例如麥克風(fēng)、喇叭、電話等。第6章存儲(chǔ)系統(tǒng)〔習(xí)題6.1〕①因?yàn)楦鞣N存儲(chǔ)器件在容量、速度和價(jià)格方面存在矛盾。速度快,則單位價(jià)格高;容量大,單位價(jià)格低,但存取速度慢。故存儲(chǔ)系統(tǒng)不能采用一種存儲(chǔ)器件。②Cache中復(fù)制著主存的部分內(nèi)容。當(dāng)處理器試圖讀取主存的某個(gè)字時(shí),Cache控制器首先檢查Cache中是否已包含有這個(gè)字。若有,則處理器直接讀取Cache,這種情況稱為高速命中;若無,則稱為高速缺失。③標(biāo)簽存儲(chǔ)器保存著該數(shù)據(jù)所在主存的地址信息。④主存塊與Cache行之間的對應(yīng)關(guān)系稱“地址映射”,Cache通過地址映射確定一個(gè)主存塊應(yīng)放到哪個(gè)Cache行組中。⑤寫入策略用于解決寫入Cache時(shí)引起主存和Cache內(nèi)容不一致性的問題。⑥存取時(shí)間是指從讀/寫命令發(fā)出,到數(shù)據(jù)傳輸操作完成所經(jīng)歷的時(shí)間;存取周期表示兩次存儲(chǔ)器訪問所允許的最小時(shí)間間隔。存取周期大于等于存取時(shí)間。⑦虛擬存儲(chǔ)器是由操作系統(tǒng)利用輔助存儲(chǔ)器、以磁盤文件形式建立的、在主存儲(chǔ)器與輔助存儲(chǔ)器之間的一個(gè)存儲(chǔ)器。⑧DRAM芯片容量大、芯片小,高集成度,引腳數(shù)量少。故DRAM芯片將地址引腳分時(shí)復(fù)用,即用一組地址引腳傳送兩批地址。第一批地址稱行地址,第二批地址稱列地址。⑨譯碼電路中只有部分地址線參與譯碼會(huì)造成地址重復(fù),也就是一個(gè)存儲(chǔ)單元占有多個(gè)存儲(chǔ)器地址。⑩頁表項(xiàng)的P位稱為存在位(Present),表示該頁面是否在物理存儲(chǔ)器中?!擦?xí)題6.4〕處理器訪問存儲(chǔ)器時(shí),無論是讀取指令還是存取數(shù)據(jù),所訪問的存儲(chǔ)單元在一段時(shí)間內(nèi)都趨向于一個(gè)較小的連續(xù)區(qū)域中,這就是存儲(chǔ)訪問的局部性原理。例如,求平均值的函數(shù)。longmean(longd[],

溫馨提示

  • 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

提交評論