微機原理接口與技術基于IA-32處理器和32位匯編語言_第1頁
微機原理接口與技術基于IA-32處理器和32位匯編語言_第2頁
微機原理接口與技術基于IA-32處理器和32位匯編語言_第3頁
微機原理接口與技術基于IA-32處理器和32位匯編語言_第4頁
微機原理接口與技術基于IA-32處理器和32位匯編語言_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1.1解答 處理器每個單位時間可以處理的二進制數據位數稱計算機字長。 總線信號分成三組,分別是數據總線、地址總線和控制總線。 PC機主存采用DRAM組成。 高速緩沖存儲器Cache是處理器與主存之間速度很快但容量較小的存儲器。 ROM-BIOS是“基本輸入輸出系統(tǒng)”,操作系統(tǒng)通過對BIOS的調用驅動各硬件設備,用戶也可以在應用程序中調用BIOS中的許多功能。 中斷是CPU正常執(zhí)行程序的流程被某種原因打斷、并暫時停止,轉向執(zhí)行事先安排好的一段處理程序,待該處理程序結束后仍返回被中斷的指令繼續(xù)執(zhí)行的過程。 主板芯片組是主板的核心部件,它提供主板上的關鍵邏輯電路。 MASM是微軟開發(fā)的宏匯編程序。

2、指令的處理過程。處理器的“取指譯碼執(zhí)行周期” 是指處理器從主存儲器讀取指令(簡稱取指),翻譯指令代碼的功能(簡稱譯碼),然后執(zhí)行指令所規(guī)定的操作(簡稱執(zhí)行)的過程。 機器語言層,即指令集結構。(學生很多認為是:匯編語言層。前4章主要涉及匯編語言,但本書還有很多處理器原理等內容)1.2解答 錯 錯 對 錯 對 錯 錯 對 錯 錯1.3解答 Central Processing Unit,中央處理單元,處理器 1MB,4GB 216,64KB EXE,COM Instruction Set Architecture 目錄 MMX,SSE3 64 IBM,DOS PCI1.4解答CPU:CPU也稱處

3、理器,是微機的核心。它采用大規(guī)模集成電路芯片,芯片內集成了控制器、運算器和若干高速存儲單元(即寄存器)。處理器及其支持電路構成了微機系統(tǒng)的控制中心,對系統(tǒng)的各個部件進行統(tǒng)一的協調和控制。存儲器:存儲器是存放程序和數據的部件。外部設備:外部設備是指可與微機進行交互的輸入(Input)設備和輸出(Output)設備,也稱I/O設備。I/O設備通過I/O接口與主機連接??偩€:互連各個部件的共用通道,主要含數據總線、地址總線和控制總線信號。1.5解答通用微處理器:適合較廣的應用領域的微處理器,例如裝在PC機、筆記本電腦、工作站、服務器上的微處理器。單片機:是指通常用于控制領域的微處理器芯片,其內部除C

4、PU外還集成了計算機的其他一些主要部件,只需配上少量的外部電路和設備,就可以構成具體的應用系統(tǒng)。DSP芯片:稱數字信號處理器,也是一種微控制器,其更適合處理高速的數字信號,內部集成有高速乘法器,能夠進行快速乘法和加法運算。嵌入式系統(tǒng):利用微控制器、數字信號處理器或通用微處理器,結合具體應用構成的控制系統(tǒng)。1.6解答8086奠定了基本的16位指令集,80286提供了保護方式的各種指令,80386將指令集全面提升為32位,80486融入了浮點數據處理指令,奔騰系列陸續(xù)增加了多媒體指令MMX、SSE、SSE2和SSE3,最新的奔騰4處理器還支持64位指令集。題外話:大家可以通過閱讀相關資料、查詢互聯

5、網獲得更加詳細的發(fā)展情況??梢钥紤]組織成一篇或多篇論文。1.7解答助記符:人們采用便于記憶、并能描述指令功能的符號來表示機器指令操作碼,該符號稱為指令助記符。匯編語言:用助記符表示的指令以及使用它們編寫程序的規(guī)則就形成匯編語言。匯編程序:匯編語言源程序要翻譯成機器語言程序才可以由處理器執(zhí)行。這個翻譯的過程稱為“匯編”,完成匯編工作的程序就是匯編程序(Assembler)。1.8解答路徑:操作系統(tǒng)以目錄形式管理磁盤上的文件,文件所在的分區(qū)和目錄就是該文件的路徑。絕對路徑:從根目錄到文件所在目錄的完整路徑稱為“絕對路徑”。是保證文件唯一性的標示方法。相對路徑:從系統(tǒng)當前目錄到文件所在目錄的路徑稱為

6、相對路徑。當前目錄:用戶當前所在的目錄就是當前目錄。指明的路徑不正確,或者執(zhí)行了另外一個同名的文件。1.9解答每18個月,集成電路的性能將提高一倍,而其價格將降低一半。(1965年,Intel公司的創(chuàng)始人之一摩爾預言:集成電路上的晶體管密度每年將翻倍?,F在這個預言通常表達為:每隔18個月硅片密度(晶體管容量)將翻倍;也常被表達為:每18個月,集成電路的性能將提高一倍,而其價格將降低一半。)不能。由于電子器件的物理極限在悄然逼近,摩爾定律不會永遠持續(xù)。1.10解答采用二進制形式表示數據和指令。指令由操作碼和地址碼組成。將程序和數據存放在存儲器中,計算機在工作時從存儲器取出指令加以執(zhí)行,自動完成計

7、算任務。這就是“存儲程序”和“程序控制”(簡稱存儲程序控制)的概念。指令的執(zhí)行是順序的,即一般按照指令在存儲器中存放的順序執(zhí)行,程序分支由轉移指令實現。計算機由存儲器、運算器、控制器、輸入設備和輸出設備五大基本部件組成,并規(guī)定了5部分的基本功能。1.11解答最上層是用戶層。第5層是高級語言層。第4層是匯編語言層。第3層是操作系統(tǒng)層。第2層是機器語言層。第1層是控制層。第0層是數字電路層。普通計算機用戶和軟件人員對計算機系統(tǒng)的認識并不一樣。普通計算機用戶看到的計算機,也就是我們最熟悉的計算機,屬于用戶層,而軟件人員看到的屬于高級語言層或是匯編語言層。1.12解答系列機是指在一個廠家生產的具有相同

8、計算機結構,但具有不同組成和實現的一系列(Family)不同檔次、不同型號的機器。兼容機是指不同廠家生產的具有相同計算機結構(不同的組成和實現)的計算機。兼容是一個廣泛的概念,包括軟件兼容、硬件兼容、系統(tǒng)兼容等。其中軟件兼容是指同一個軟件可以不加修改地運行于體系結構相同的各檔機器,結果一樣但運行時間可能不同。軟件兼容可從機器性能和推出時間分成向上(向下)和向前(向后)兼容。例如32位PC機就陸續(xù)增加了對浮點處理指令、多媒體指令等的支持。在保證向后兼容的前提下,不斷改進其組成和實現,延續(xù)計算機結構的生命,才使得PC機具有如此強大的生命力。1.13解答酷睿2多核處理器。1.14解答高級語言與具體的

9、計算機硬件無關,其表達方式接近于所描述的問題,易為人們接受和掌握,用高級語言編寫程序要比低級語言容易得多,并大大簡化了程序的編制和調試,使編程效率得到大幅度的提高。而匯編語言是為了便于理解與記憶,將機器指令用助記符代替而形成的一種語言。匯編語言的語句通常與機器指令對應,因此,匯編語言與具體的計算機有關,屬于低級語言。它比機器語言直觀,容易理解和記憶,用匯編語言編寫的程序也比機器語言易閱讀、易排錯。機器語言的每一條機器指令都是二進制形式的指令代碼,計算機硬件可以直接識別。高級語言程序通常也需要翻譯成匯編語言程序,再進一步翻譯成機器語言代碼。第2章 處理器結構2.1解答 ALU是算術邏輯運算單元,

10、負責處理器所能進行的各種運算,主要是算術運算和邏輯運算。 取指是指從主存取出指令代碼通過總線傳輸到處理器內部指令寄存器的過程。8086分成總線接口單元和指令執(zhí)行單元,可以獨立操作。在執(zhí)行單元執(zhí)行一條指令的同時,總線接口單元可以讀取下一條指令,等到執(zhí)行時不需要進行取指了,所以稱為預取。 Pentium采用分離的Cache結構,一個用做指令Cache,一個用做數據Cache。 堆棧的存取原則是先進后出(也稱為后進先出)操作方式存取數據。 標志寄存器主要保存反映指令執(zhí)行結果和控制指令執(zhí)行形式的有關狀態(tài)。 執(zhí)行了一條加法指令后,發(fā)現ZF1,表明運算結果為0。 沒有。 匯編語言的標識符大小寫不敏感,即表

11、示字母大小寫不同、但表示同一個符號。 不會。 指令的操作數需要通過存儲器地址或I/O地址,才能查找到數據本身,故稱數據尋址方式。2.2解答 錯 對 對 對 錯 對 對 錯 對 對2.3解答 32,DX,DH 16 段地址,偏移地址,EIP,IP 00100110,0 73C00H,73800H EBX,ECX,ESI,EDI,EBP,ESP 實地址,64KB ASM,目標模塊,FLAT 立即數尋址、寄存器尋址和存儲器尋址 DS,SS2.4解答處理器內部有ALU、寄存器和指令處理三個基本單元。8086有兩大功能部件:總線接口單元和執(zhí)行單元??偩€接口單元:管理著8086與系統(tǒng)總線的接口,負責處理器

12、對存儲器和外設進行訪問。8086所有對外操作必須通過BIU和這些總線進行。執(zhí)行單元EU:負責指令譯碼、數據運算和指令執(zhí)行。2.5解答8086中,指令的讀取是在BIU單元,而指令的執(zhí)行是在EU單元。因為BIU和EU兩個單元相互獨立、分別完成各自操作,所以可以并行操作。也就是說,在EU單元對一個指令進行譯碼執(zhí)行時,BIU單元可以同時對后續(xù)指令進行讀??;這就是最簡單的指令流水線技術。2.6解答標志:用于反映指令執(zhí)行結果或控制指令執(zhí)行形式的一個或多個二進制數位。例如,有些指令執(zhí)行后會影響有關標志位;有些指令的執(zhí)行要利用相關標志。狀態(tài)標志:用來記錄程序運行結果的狀態(tài)信息??刂茦酥荆篋F標志,控制字符串操

13、作的地址方向。系統(tǒng)標志:用于控制處理器執(zhí)行指令的方式。狀態(tài)標志在標志寄存器EFLAGS中的位置和含義如下: 3111109876543210OFSFZFAFPFCF2.7解答進位標志CF表示無符號數運算結果是否超出范圍,超出范圍后加上進位或借位,運算結果仍然正確;溢出標志OF表示有符號數運算結果是否超出范圍,如果超出范圍,運算結果已經不正確。例1:3AH 7CHB6H無符號數運算:58124182,范圍內,無進位。有符號數運算:58124182,范圍外,有溢出。例2:AAH + 7CH26H無符號數運算:170124294,范圍外,有進位。有符號數運算:8612428 ,范圍內,無溢出。2.8

14、解答物理地址:在處理器地址總線上輸出的地址稱為物理地址。每個存儲單元有一個唯一的物理地址。邏輯地址:在處理器內部、程序員編程時采用邏輯地址,采用“段地址:偏移地址“形式。某個存儲單元可以有多個邏輯地址,即處于不同起點的邏輯段中,但其物理地址是唯一的。邏輯地址轉換成物理地址:邏輯地址由處理器在輸出之前轉換為物理地址。將邏輯地址中的段地址左移二進制4位(對應16進制是一位,即乘以16),加上偏移地址就得到20位物理地址。 FFFFH:0FFFF0H 40H:17H00417H 2000H:4500H24500H B821H:4567HBC777H2.9。解答IA-32處理器有代碼段、數據段、堆棧段

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

16、4KB的多個段組成。2.11解答實地址方式:與8086具有相同的基本結構,只能尋址1MB物理存儲器空間,邏輯段最大不超過64KB;但可以使用32位寄存器、32位操作數和32位尋址方式;相當于可以進行32位處理的快速8086。實地址工作方式只能支持實地址存儲模型。保護方式:具有強大的段頁式存儲管理和特權與保護能力,使用全部32條地址總線,可尋址4GB物理存儲器。保護方式通過描述符實現分段存儲管理,每個邏輯段可達4GB。處理器工作在保護方式時,可以使用平展或段式存儲模型。虛擬8086方式:在保護方式下運行的類似實方式的運行環(huán)境,只能在1MB存儲空間下使用“16位段”。 處理器工作在虛擬8086方式

17、時,只能使用實地址存儲模型。2.12解答匯編語句有兩種:執(zhí)行性語句(處理器指令)、說明性語句(偽指令)。每個語句有:標號、指令助記符、操作數或參數、注釋4個部分組成。2.13解答匯編語言程序的開發(fā)有4個步驟:編輯:用文本編輯器形成一個以ASM為擴展名的源程序文件。匯編:用匯編程序將ASM文件轉換為OBJ模塊文件。連接:用連接程序將一個或多個目標文件鏈接成一個EXE或COM可執(zhí)行文件。調試:用調試程序排除錯誤,生成正確的可執(zhí)行文件.2.14解答FFH,Again,next,h_ascii2.15解答 32位存儲器尋址方式的組成公式32位有效地址 基址寄存器(變址寄存器×比例)位移量其中

18、的4個組成部分是:·基址寄存器¾¾任何8個32位通用寄存器之一;·變址寄存器¾¾除ESP之外的任何32位通用寄存器之一;·比例¾¾可以是1,2,4或8(因為操作數的長度可以是1,2,4或8字節(jié));·位移量¾¾可以是8或32位有符號值。 16位存儲器尋址方式的組成公式16位有效地址 基址寄存器變址寄存器位移量其中基址寄存器只能是BX或BP,變址寄存器只能是SI或DI,位移量是8或16位有符號值2.16解答 立即數 直接 寄存器 寄存器間接 寄存器相對 寄存器相對 基址變址 相對

19、基址變址 相對基址變址 帶比例尋址第3章 數據處理3.1解答 沒有。使用二進制8位表達無符號整數,257沒有對應的編碼。 字符“'F'”的ASCII碼就是數值46H,所以沒有區(qū)別。 匯編程序在匯編過程中對數值表達式計算,得到一個確定的數值,故稱數值表達式為常量。 不能。數值500大于一個字節(jié)所能表達的數據量,所以不能為字節(jié)變量賦值。 源、目標寄存器位數不同,不能用該指令進行數據交換。 前者在指令執(zhí)行時獲得偏移地址,是正確的;但后者的OFFSET只能在匯編階段獲得偏移地址,但此時寄存器內容是不可知的,所以無法獲得偏移地址。 INC,DEC,NEG和NOT指令的操作數既是源操作數也

20、是目的操作數。 大小寫字母轉換利用它們的ASCII碼相差20H。 加減法不區(qū)別無符號數和有符號數,但根據運算結果分別設置標志寄存器的CF和OF標志,可利用CF和OF進行區(qū)別。 邏輯與運算規(guī)則類似二進制的乘法,所以稱其為邏輯乘。3.2解答 對 對 對 錯 錯 對 錯 錯 對 對3.3解答 BYTE,OFFSET 97,61,小寫字母a 0DH(13),0AH(10) 8843H DWORD,4,WORD PTR XYZ 3 78894111 0,0,0 0123456788765432H,83H 43.4解答 255 0 94 2393.5解答 12H 24H 68H 99H3.6解答 91 8

21、9 36 903.7解答 00000000 01111111 10000001 110001113.8解答 1234H7802H8A36H,無進位 F034H5AB0H4AF4H,有進位 C051H1234HBE1DH,無借位 9876HABCDHECA9H,有借位3.9解答數碼09對應的ASCII碼依次是30H39H。大寫字母AZ對應的ASCII碼依次是:41H5AH。小寫字母az對應的ASCII碼依次是:617AH。ASCII碼0DH和0AH分別對應的是回車和換行字符。3.10解答my1bbyte 'Personal Computer'my2bbyte 20my3bbyte

22、 14hmy4bbyte 00010100bmy5wword 20 dup(?)my6c= 100my7cequ <Personal Computer>3.11解答numequ 5datalistbyte -10,2,5,4,?3.12解答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 00 00 00 00 003.13解答 EAX0114H EAX0006H EAX0013H EAX0003H3.14解答include io32.inc.datatablebyte &

23、#39; |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

24、,20h,37h,20h,38h,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,2

25、0h,55h,20h,56h,20h,57h,20h,58h,20h,59h,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

26、,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20hbyte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10byte 0.codestart:mov eax,offset tablecall dispmsgexit 0end start3.15解答小端方式采用“低對低、高對高”,即低字節(jié)數據存放在低地址存儲單元、高字節(jié)數據存放在高地址存儲單元。以字節(jié)為單位按地址從低到高的順序,var變量的內容:78H、56H、34H、12H。; EAX12345678H; BX5678H;

27、CX1234H; DL78H; DH12H3.16解答push eax; 可以沒有mov eax,ebxmov ebx,edimov edi,eaxpop eax; 可以沒有3.17解答ESP0012FFACHESP0012FFAAHESP0012FFA6HESP0012FFAAHESP0012FFACHESP0012FFB0H3.18解答; 數據段tablebyte 18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h; 定義格雷碼表; 代碼段mov ebx,offset table; EBX格雷碼表首地址mov al,8; AL8xlat; AL12H(8的格雷碼

28、)不使用XLAT指令:mov ebx,offset table; EBX格雷碼表首地址mov eax,0mov al,8; AL8mov al,eax+ebx; AL12H(8的格雷碼)3.19解答 add edx,ebx add al,ebx+esi add bx+0b2h,cx add varw,3412h add eax,0a0h3.20解答(1); EAX80H; EAX83H,CF0,SF0; EAX103H,CF0,OF0; EAX106H,CF0,ZF0(2); EAX100; EAX300,CF0(3); EAX100; EAX44,CF1(包含256的進位含義:2564430

29、0)(4)mov al,7fh; AL7FHsub al,8; AL77H,CF0,SF0sub al,80h; ALF7H,CF1,OF1sbb al,3; ALF3H,CF0,ZF03.21解答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 10013.22解答; 數據段buffer1qword 67883000hbuffer2q

30、word 67762000h; 代碼段mov eax,dword ptr buffer1mov edx,dword ptr buffer1+4sub eax,dword ptr buffer2sbb edx,dword ptr buffer2+43.23解答(1); ESI9CH; ESI80H; ESIFFH; ESI01H(2); EAX1010B(可以有前導0,下同); EAX0010B,CF1; EAX0100B,CF0; EAX0000B,CF0(3); EAX1011B(可以有前導0,下同); EAX101100B,CF0; EAX10110B,CF0; EAX10111B,CF0

31、(4); EAX0,CF0,OF0; ZF1,SF0,PF13.24解答mov ax,1470h; AX1470HCF OFSFZFPFand ax,ax; AX1470H0 0000or ax,ax; AX1470H0 0000xor ax,ax; AX0000H0 0011not ax; AXFFFFH0 0011test ax,0f0f0h; AX0F0F0H0 01013.25解答AND指令同“0”與實現復位,OR指令同“1”或實現置位,XOR同“1”異或實現求反。3.26解答將AX的每一位依次重復一次,所得的32位結果保存于EAX中。3.27解答; 代碼段mov ecx,3again

32、:shl eax,1rcl edx,1loop again3.28解答數據段bcdbyte 92h; 代碼段mov al,bcdshr al,4add al,30hcall dispcmov al,bcdand al,0fhadd al,30hcall dispc3.29解答MOVS指令的功能是:ES:EDIDS:ESI;ESIESI±1/2/4,EDIEDI±1/2/4由此可看出串操作指令的尋址特點:源操作數用寄存器ESI間接尋址,默認在DS指向的數據段,但可以改變;目的操作數用寄存器EDI間接尋址,只能在ES指向的附加數據段;每執(zhí)行一次串操作,源指針ESI和目的指針ED

33、I將自動修改:±1(字節(jié)),±2(字)或±4(雙字)。指針的增量和減量控制由DF標志確定,DF0,進行增量;DF1,進行減量。push eaxmov eax,esimov es:edi,eaxadd esi,4add edi,43.30解答顯示結果:welldoneEBX寄存器相對尋址:mov al,msgebxmov msgebx,al3.31解答mov array2ebx*4,eaxadd ebx,1第4章 匯編語言程序設計4.1解答 當同一個程序被操作系統(tǒng)安排到不同的存儲區(qū)域執(zhí)行時,指令間的位移沒有改變,目標地址采用相對尋址可方便操作系統(tǒng)的靈活調度。 數據通

34、信時,數據的某一位用做傳輸數據的奇偶校驗位,數據中包括校驗位在內的“1”的個數恒為奇數,就是奇校驗;恒為偶數,就是偶校驗。 無符號數和有符號數的操作影響兩組不同的標志狀態(tài)位,故判斷兩個無符號數和有符號數的大小關系要利用不同的標志位組合,所以有對應的兩組指令。 雙分支結構中兩個分支體之間的JMP指令,用于實現結束前一個分支回到共同的出口作用。 完整的子程序注釋可方便程序員調用該子程序,子程序注釋包括子程序名、子程序功能、入口參數和出口參數、調用注意事項和其他說明等。 子程序保持堆棧平衡,才能保證執(zhí)行RET指令時當前棧頂的內容是正確的返回地址。主程序也要保持堆棧平衡,這樣才能釋放傳遞參數占用的堆棧

35、空間,否則多次調用該子程序可能就致使堆棧溢出。 “傳值”是傳遞參數的一個拷貝,被調用程序改變這個參數不影響調用程序;“傳址”時,被調用程序可能修改通過地址引用的變量內容。 INCLUDE語句包含的是文本文件、是源程序文件的一部分;INCLUDELIB語句包含的是子程序庫文件。 取長補短。 Windows程序在運行時需要加載其配套的動態(tài)鏈接庫DLL文件,當其沒有被搜索到時就會提示不存在。4.2解答 對 錯 錯 錯 錯 對 對 錯 對 錯4.3解答 相對尋址,間接尋址,直接尋址,間接尋址 1256H,3280H 3721H,1 EAH 循環(huán)初始,循環(huán)控制 REPT1標號的地址 TEST ENDP,

36、ENDM EBP PUBLIC,EXTERN 38H 0DH 0AH4.4解答jmp labl1; 相對尋址nopmov eax,'?'call dispclabl1: mov eax,'1'call dispcjmp near ptr labl2; 相對近轉移nopmov eax,'?'call dispclabl2: mov eax,'2'call dispcmov eax,offset labl3 jmp eax; 寄存器間接尋址nopmov eax,'?'call dispclabl3: mov eax,&

37、#39;3'call dispcmov eax,offset labl4mov nvar,eaxjmp nvar; 存儲器間接尋址nopmov eax,'?'call dispclabl4: mov eax,'4'call dispc4.5解答mov eax,56h; 假設一個數據shr eax,2; D1位移入CF標志jnc nom; D10條件成立,轉移.; 余同原程序4.6解答CF1 ZF0 SF1 OF0 PF1可以使得條件成立、發(fā)生轉移的指令有:JC JS JP JNZ JNO4.7解答include io32.inc.datamsg1 byt

38、e 'Please input a character: ',0msg2 byte 'The ASCII code 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 dispc

39、rlfand al,7fhjp nextor al,80hnext:mov ebx,eaxmov eax,offset msg3call dispmsgmov eax,ebxcall dispbbexit 0end start4.8解答; 數據段Rdatabyte 57h;保存接收的數據errorbyte 'Error !',0; 代碼段mov al,Rdataand al,0ffh;標志PF反映“1”的個數jp done;個數為偶數,正確繼續(xù)mov eax,offset error;個數為奇數,顯示出錯call dispmsgdone:4.9解答1test eax,8000h

40、; 測試最高位jz next1; 最高位為0(ZF1),轉移到標號NEXT1mov edx,0ffffffffh; 最高位為1,順序執(zhí)行:設置EDXFFFFFFFFHjmp done; 無條件轉移,跳過另一個分支next1:mov dx,0; 最高位為0轉移到此執(zhí)行:設置EDX0done:解答2使用移位指令更好。rol eax,1rcr edx,1sar edx,31ror eax,14.10解答; 數據段dvardword 57h; 代碼段mov eax,dvartest eax,80000000hjnz nextltest eax,1jnz nextrmov al,'M'j

41、mp donenextl:mov al,'L'jmp donenextr:mov al,'R'done:call dispc4.11解答; 數據段inmsgbyte 'Input number(09): ',0ermsgbyte 0dh,0ah,'Error! Input again: ',0; 代碼段mov eax,offset inmsg; 提示輸入數字call dispmsgagain:call readc; 等待按鍵cmp al,'0' 數字 < 0?jb erdispcmp al,'9

42、9; 數字 > 9?ja erdispcall dispcrlfcall dispcjmp doneerdisp:mov eax,offset ermsgcall dispmsgjmp againdone:4.12解答求這20個雙字的和,保存在TOTAL變量,不關進心進位和溢出。4.13解答; 數據段stringbyte 'Do you have fun with Assembly ?',0;以0結尾的字符串spacedword ?; 代碼段mov esi,offset stringxor ebx,ebx;EBX用于記錄空格數again:mov al,esicmp al,

43、0jz donecmp al,20h;空格的ASCII碼是20Hjne next;不相等、不是空格,轉移inc bx;相等、是空格,空格個數加1next:inc esijmp again;繼續(xù)循環(huán)done:mov space,ebx;保存結果4.14解答; 數據段arrayword 2005,2008,98 dup (1394); 假設100個16位正整數wordsumword ?errorbyte 'Overflow !',0; 代碼段and ebx,0mov ecx,100xor ax,axagain:add ax,arrayebx*2jc overinc ebxloop

44、againmov wordsum,axover:mov eax,offset errorcall dispmsg4.15解答; 數據段stringbyte 'If you find any error in the program, you can DEBUG it.'count= sizeof stringbugbyte 'BUG' 代碼段mov ecx,countmov edi,offset stringL1:mov esi,offset bugpush edimov edx,sizeof bugLN:mov al,esicmp edi,aljne L2in

45、c esiinc edidec edxjne LNpop edimov al,'Y'jmp L3L2:pop ediinc ediloop L1mov al,'N'L3:call dispc416解答; 數據段bcddword 00371002h; 代碼段mov esi,bcdcmp esi,0jnz goonmov al,'0'call dispcjmp donegoon:mov ecx,8xor ebx,ebx; EBX0,表示可能是前導0again:rol esi,4mov eax,esiand eax,0fh; EAX低4位保存當前要顯示

46、的BCD碼cmp ebx,0; EBX0,說明不是前導0,要顯示jnz disp; EBX0,說明可能是前導0cmp eax,0 jz next; EAX0,說明是前導0,不顯示mov ebx,1 ; EAX0,沒有前導0了,令EBX10disp:add al,30hcall dispcnext:loop againdone:4.17; 數據段stringbyte 'Let us have a try !',0dh,0ah,0; 代碼段mov ecx,sizeof stringcmp ecx,2jb donelea eax,string; 顯示處理前的字符串call dispm

47、sgmov esi,ecxdec esioutlp:cmp stringesi,' ' 檢測是否是空格jnz next; 不是空格繼續(xù)循環(huán)mov edi,esi; 是空格,進入剔除空格分支dec ecxinlp:inc edimov al,stringedi; 前移一個位置mov stringedi-1,alcmp edi,ecxjb inlpnext:dec esi; 繼續(xù)進行cmp esi,0jnz outlp; 為0結束lea eax,string; 顯示處理后的字符串call dispmsgdone:4.18解答include io32.inc.datatablebyt

48、e ' |0 1 2 3 4 5 6 7 8 9 A B C D E F',13,10byte '-+-',13,10tab1byte 6 dup(36 dup(?),13,10)byte 0.codestart:mov ebx,offset tab1mov edx,'| 02'mov ax,2020hmov esi,6again0:mov ebx,edxadd ebx,4mov ecx,16again1:mov word ptr ebx,axadd ebx,2inc alloop again1add ebx,2add edx,1dec esij

49、nz again0mov eax,offset tablecall dispmsgexit 0end start4.19解答asctobprocshl dh,4mov al,dhand dl,0fhor al,dlretasctobendp4.20解答disp99procxor ah,ahaamadd ax,3030hpush axmov al,ahcall dispcpop axcall dispcretdisp99endp4.21解答; 代碼段,主程序again:call readccmp al,1bhjz donemov bl,almov al,':'call dispc

50、mov al,blrol al,4call htoasc; 調用子程序call dispc; 顯示一個字符mov al,blcall htoasc; 調用子程序call dispc; 顯示一個字符call dispcrlfjmp againdone:4.22解答; 代碼段,主程序mov eax,8F98FF00Hcall dispbd; 調用子程序; 代碼段,子程序dispbdproc; 32位二進制數的輸出push ecxpush edxmov ecx,32; 要輸出的字符個數dbd:rol eax,1; AL循環(huán)左移一位push eaxand al,01h; 取AL最低位add al,30h; 轉化成相應的ASCLL碼值call dispc; 以二進制的形式顯示pop eaxloop dbdpop edxpop ecxretdispbdendp

溫馨提示

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

評論

0/150

提交評論