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

下載本文檔

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

文檔簡介

1、第1章微型計算機(jī)系統(tǒng)習(xí)題1.1簡答題(2)總線信號分成哪三組信號?(3)PC機(jī)主存采用DRAM組成還是SRAM組成?(5)ROM-BIOS 是什么?(6)中斷是什么?(9)處理器的“取指譯碼執(zhí)行周期”是指什么?解答 總線信號分成三組,分別是數(shù)據(jù)總線、地址總線和控制總線。 PC機(jī)主存采用DRAM組成。 ROM-BIOS是“基本輸入輸出系統(tǒng)”,操作系統(tǒng)通過對BIOS的調(diào)用驅(qū)動各硬件設(shè)備,用戶也可以在應(yīng)用程序中調(diào)用BIOS中的許多功能。 中斷是CPU正常執(zhí)行程序的流程被某種原因打斷、并暫時停止,轉(zhuǎn)向執(zhí) 行事先安排好的一段處理程序,待該處理程序結(jié)束后仍返回被中斷的指令繼續(xù)執(zhí) 行的過程。 指令的處理過程

2、。處理器的“取指一譯碼一執(zhí)行周期”是指處理器從主存儲器讀取指令(簡稱取指),翻譯指令代碼的功能(簡稱譯碼),然后執(zhí)行指 令所規(guī)定的操作(簡稱執(zhí)行)的過程。習(xí)題1.3填空題(2) In tel 8086支持 量主存空間,80486支持容量主存空間。(3) 二進(jìn)制16位共有 編碼組合,如果一位對應(yīng)處理器一個地址信號,16位地址信號共能尋址 量主存空間。(9)最初由公司采用Intel 8088處理器和()操作系統(tǒng)推出PC機(jī)。 1MB,4GB 216,64KB(9) IBM,DOS習(xí)題1.4說明微型計算機(jī)系統(tǒng)的硬件組成及各部分作用。解答CPU: CPU也稱處理器,是微機(jī)的核心。它采用大規(guī)模集成電路芯片

3、,芯片 內(nèi)集成了控制器、運算器和若干高速存儲單元(即寄存器)。處理器及其支持電 路構(gòu)成了微機(jī)系統(tǒng)的控制中心,對系統(tǒng)的各個部件進(jìn)行統(tǒng)一的協(xié)調(diào)和控制。存儲器:存儲器是存放程序和數(shù)據(jù)的部件。外部設(shè)備:外部設(shè)備是指可與微機(jī)進(jìn)行交互的輸入(Input)設(shè)備和輸出(Output)設(shè)備,也稱I/O設(shè)備。I/O設(shè)備通過I/O接口與主機(jī)連接??偩€:互連各個部件的共用通道,主要含數(shù)據(jù)總線、地址總線和控制總線信習(xí)題 1.7區(qū)別如下概念:助記符、匯編語言、匯編語言程序和匯編程序。 解答助記符: 人們采用便于記憶、 并能描述指令功能的符號來表示機(jī)器指令操作 碼,該符號稱為指令助記符。匯編語言:用助記符表示的指令以及使用

4、它們編寫程序的規(guī)則就形成匯編語 言。匯編語言程序: 用匯編語言書寫的程序就是匯編語言程序, 或稱匯編語言源 程序。匯編程序: 匯編語言源程序要翻譯成機(jī)器語言程序才可以由處理器執(zhí)行。 這 個翻譯的過程稱為“匯編”,完成匯編工作的程序就是匯編程序( Assembler)。第 2 章 處理器結(jié)構(gòu)習(xí)題 2.1簡答題(1)ALU 是什么?(2)8086 的取指為什么可以被稱為指令預(yù)???(4)堆棧的存取原則是什么?(5)標(biāo)志寄存器主要保存哪方面的信息?(6)執(zhí)行了一條加法指令后,發(fā)現(xiàn) ZF= 1,說明結(jié)果是什么?( 9)匯編語言源程序文件中, END 語句后的語句會被匯編嗎?解答 ALU 是算術(shù)邏輯運算單

5、元,負(fù)責(zé)處理器所能進(jìn)行的各種運算,主要是算 術(shù)運算和邏輯運算。 取指是指從主存取出指令代碼通過總線傳輸?shù)教幚砥鲀?nèi)部指令寄存器的 過程。 8086 分成總線接口單元和指令執(zhí)行單元,可以獨立操作。在執(zhí)行單元執(zhí) 行一條指令的同時, 總線接口單元可以讀取下一條指令, 等到執(zhí)行時不需要進(jìn)行 取指了,所以稱為預(yù)取。 堆棧的存取原則是先進(jìn)后出(也稱為后進(jìn)先出)操作方式存取數(shù)據(jù)。 標(biāo)志寄存器主要保存反映指令執(zhí)行結(jié)果和控制指令執(zhí)行形式的有關(guān)狀 態(tài)。 執(zhí)行了一條加法指令后,發(fā)現(xiàn) ZF= 1,表明運算結(jié)果為0。 不會。習(xí)題 2.3填空題( 3)邏輯地址由 和兩部分組成。代碼段中下一條要執(zhí)行的指令由CS和 存器指示,

6、后者在實地址模型中起作用的僅有寄存器部分。(4) 進(jìn)行 8位二進(jìn)制數(shù)加法: 1011101001101100, 8位結(jié)果是 ,標(biāo)志PF=。(5) 在實地址工作方式下,邏輯地址“ 7380H : 400H”表示的物理地址是 ,并且該段起始于 物理地址。(9)除外設(shè)數(shù)據(jù)外的數(shù)據(jù)尋址方式有3 類,分別被稱為 、和。解答 段地址,偏移地址, EIP, IP 00100110, 0 73C00H, 73800H 立即數(shù)尋址、寄存器尋址和存儲器尋址習(xí)題 2.4處理器內(nèi)部具有哪 3 個基本部分? 8086 分為哪兩大功能部件?其 各自的主要功能是什么?解答 處理器內(nèi)部有 ALU 、寄存器和指令處理三個基本單

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

8、輯地址和物理地址?邏輯地址如何轉(zhuǎn)換成物理 地址?請將如下邏輯地址用物理地址表達(dá)(均為十六進(jìn)制形式): FFFF: 0 40: 17 2000: 4500 B821: 4567解答物理地址: 在處理器地址總線上輸出的地址稱為物理地址。 每個存儲單元有 一個唯一的物理地址。邏輯地址:在處理器內(nèi)部、程序員編程時采用邏輯地址,采用“段地址:偏 移地址“形式。某個存儲單元可以有多個邏輯地址, 即處于不同起點的邏輯段中, 但其物理地址是唯一的。邏輯地址轉(zhuǎn)換成物理地址:邏輯地址由處理器在輸出之前轉(zhuǎn)換為物理地址。 將邏輯地址中的段地址左移二進(jìn)制 4 位(對應(yīng) 16進(jìn)制是一位,即乘以 16),加 上偏移地址就得

9、到 20 位物理地址。 FFFFH:O= FFFFOH 40H:17H= 00417H 2000H:4500H = 24500H B821H:4567H= BC777H習(xí)題 2.1 2 匯編語句有哪兩種,每個語句由哪 4 個部分組成? 解答匯編語句有兩種:執(zhí)行性語句(處理器指令)、說明性語句(偽指令)。每個語句有:標(biāo)號、指令助記符、操作數(shù)或參數(shù)、注釋 4個部分組成習(xí)題 2.1 6 說明下列指令中源操作數(shù)的尋址方式?假設(shè)VARD 是一個雙字變量。(1 )mov edx,1234h(2)mov edx,vard(3)mov edx,ebx(4)mov edx,ebx(5)mov edx,ebx+1

10、234h(6)mov edx,vardebx(7)mov edx,ebx+edi(8)mov edx,ebx+edi+1234h(9)mov edx,vardesi+edi(10)mov edx,ebp*4解答 立即數(shù) 直接 寄存器 寄存器間接 寄存器相對 寄存器相對 基址變址 相對基址變址 相對基址變址 帶比例尋址第 3 章 數(shù)據(jù)處理習(xí)題 3.1簡答題(1) 使用二進(jìn)制 8位表達(dá)無符號整數(shù), 257 有對應(yīng)的編碼嗎?(2) 字符“ F”和數(shù)值46H作為MOV指令的源操作數(shù)有區(qū)別嗎?(3) 為什么可以把指令“ MOV AX, (34 + 67H)*3 ”中的數(shù)值表達(dá)式看成是 常量?(4) 數(shù)值

11、 500,能夠作為字節(jié)變量的初值嗎?(6) 都是獲取偏移地址,為什么指令“LEA EBX, ESI ”正確,而指令“ MOV EBX, OFFSETESI ”就錯誤?(7) INC, DEC , NEG和NOT都是單操作數(shù)指令,這個操作數(shù)應(yīng)該是源操 作數(shù)還是目的操作數(shù)?(9)乘除法運算針對無符號數(shù)和有符號數(shù),有兩種不同的指令。只有一種 指令的加減法如何區(qū)別無符號數(shù)和有符號數(shù)運算?( 10)邏輯與運算為什么也稱為邏輯乘? 解答 沒有。使用二進(jìn)制 8位表達(dá)無符號整數(shù), 257沒有對應(yīng)的編碼。 字符“ F”的ASCII碼就是數(shù)值46H,所以沒有區(qū)別。 匯編程序在匯編過程中對數(shù)值表達(dá)式計算,得到一個確

12、定的數(shù)值,故稱 數(shù)值表達(dá)式為常量。 不能。數(shù)值 500 大于一個字節(jié)所能表達(dá)的數(shù)據(jù)量,所以不能為字節(jié)變量 賦值。 前者在指令執(zhí)行時獲得偏移地址,是正確的;但后者的OFFSET只能在匯編階段獲得偏移地址, 但此時寄存器內(nèi)容是不可知的, 所以無法獲得偏移地址。 INC,DEC,NEG和NOT指令的操作數(shù)既是源操作數(shù)也是目的操作數(shù)。 加減法不區(qū)別無符號數(shù)和有符號數(shù),但根據(jù)運算結(jié)果分別設(shè)置標(biāo)志寄存 器的 CF 和 OF 標(biāo)志,可利用 CF 和 OF 進(jìn)行區(qū)別。 邏輯與運算規(guī)則類似二進(jìn)制的乘法,所以稱其為邏輯乘。習(xí)題 3.3填空題(1) 定義字節(jié)變量的偽指令助記符是 ,獲取變量名所具有的偏移地址的操作符

13、是 。(2) 計算機(jī)中有一個“ 01100001”編碼。如果把它認(rèn)為是無符號數(shù),它是10 進(jìn)制數(shù) ;如果認(rèn)為它是 BCD 碼,則表示真值 ;又如果它是某個 ASCII 碼,則代表字符 。(3) C語言用“n”表示讓光標(biāo)回到下一行首位,在匯編語言中需要輸出兩個控制字符:一個是回車,其 ASCII 碼是,它將光標(biāo)移動到當(dāng)前所在行的首位;另一個是換行,其 ASCII 碼是,它將光標(biāo)移到下一行。(4) 數(shù)據(jù)段有語句“ H8843 DWORD 99008843H” ,代碼段指令“ MOV CX,WORD PTR H8843 ”執(zhí)行后,CX =。(5) 用 DWORD 定義的一個變量 XYZ ,它的類型是

14、 ,用“ TY PEXYZ ” 會 得 到 數(shù) 值 為 。 如 果 將 其 以 字 量使 用 , 應(yīng) 該 用說明。(6) 數(shù)據(jù)段有語句“ ABC BYTE 1,2,3” ,代碼段指令“ MOV CL, ABC+2 ”執(zhí)行后,CL =。解答 BYTE , OFFSET 97, 61,小寫字母 a 0DH(13), 0AH(10) 8843H DWORD , 4, WORD PTR XYZ 3習(xí)題 3.4 下列十六進(jìn)制數(shù)表示無符號整數(shù),請轉(zhuǎn)換為十進(jìn)制形式的真值: FFH 0H 5EH EFH解答 255 0 94 239習(xí)題 3.5將下列十進(jìn)制數(shù)真值轉(zhuǎn)換為壓縮 BCD 碼: 12 24 68 99

15、解答 12H 24H 68H 99H習(xí)題 3.6將下列壓縮 BCD 碼轉(zhuǎn)換為十進(jìn)制數(shù): 10010001 10001001 00110110 10010000解答 91 89 36 90 習(xí)題 3.7將下列十進(jìn)制數(shù)用 8 位二進(jìn)制補(bǔ)碼表示: 0 127 127 57 解答 00000000 01111111 10000001 11000111習(xí)題 3.8 進(jìn)行十六進(jìn)制數(shù)據(jù)的加減運算,并說明是否有進(jìn)位或借位: 1234H 7802H F034H 5AB0H C051H 1234H 9876H ABCDH 解答 1234H+ 7802H = 8A36H,無進(jìn)位 F034H+ 5AB0H = 4AF

16、4H,有進(jìn)位 C051H- 1234H= BE1DH,無借位 9876H-ABCDH = ECA9H,有借位習(xí)題 3.10 設(shè)置一個數(shù)據(jù)段,按照如下要求定義變量或符號常量: my1b 為字符串變量: Personal Computer my2b 為用十進(jìn)制數(shù)表示的字節(jié)變量: 20 my3b 為用十六進(jìn)制數(shù)表示的字節(jié)變量: 20 my4b 為用二進(jìn)制數(shù)表示的字節(jié)變量: 20 my5w 為 20 個未賦值的字變量 my6c為100的常量 my7c 表示字符串: Personal Computer 解答my1b byte Personal Computermy2b byte 20my3b byte

17、14hmy4b byte 00010100bmy5w word 20 dup(?)my6c = 100my7c equ 習(xí)題 3.11定義常量 NUM ,其值為 5;數(shù)據(jù)段中定義字?jǐn)?shù)組變量 DATALIST , 它的頭 5個字單元中依次存放 -10,2,5和4,最后 1個單元初值不定。解答num equ 5datalist byte -10,2,5,4,?習(xí)題 3.12 從低地址開始以字節(jié)為單位,用十六進(jìn)制形式給出下列語句依次 分配的數(shù)值:byte ABC,10,10h,EF,3 dup(-1,?,3 dup(4)word 10h,-5,3 dup(?)解答41 42 43 0A 10 45

18、46 FF 00 04 04 04 FF 00 04 04 04 FF 00 04 04 0410 00 FB FF 00 00 00 00 00 00習(xí)題 3.19 請分別用一條匯編語言指令完成如下功能: (去 E)(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ù) 3412

19、H 相加,并把結(jié)果送回該存儲單元中。(5)把數(shù) 0A0H 與 EAX 寄存器的內(nèi)容相加,并把結(jié)果送回 EAX 中。 解答 add edx,ebx add al,ebx+esi add bx+0b2h,cx add varw,3412h add eax,0a0h習(xí)題 3.20 分別執(zhí)行如下程序片斷,說明每條指令的執(zhí)行結(jié)果: (去 E)(1)mov eax,80h;EAX =add eax,3;EAX=,CF=,SF=add eax,80h;EAX,CF=,OF=adc eax,3;EAX=,CF=,ZF=)mov eax,100;EAX =add ax,200; EAX = CF= )mov e

20、ax,100; EAX = add al,200; EAX = CF= )mov al,7fh; AL = sub al,8; AL= ,CF= , S F=sub al,80h; AL= ,CF= ,OF=sbb al,3; AL= ,CF= ,ZF=解答(1);EAX = 80H;EAX = 83H, CF= 0, SF= 0;EAX = 103H, CF= 0, OM 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= 3

21、00) ( 4)mov al,7fh; AL= 7FHsub al,8; AL= 77H,CF= 0,SF= 0sub al,80h; AL= F7H,CF= 1 ,OF= 1sbb al,3; AL= F3H,CF= 0,ZF= 0習(xí)題 3.21 (推敲)給出下列各條指令執(zhí)行后AL 值,以及 CF、ZF、SF、OF 和 PF 的狀態(tài):mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc al解答mov al,89h add al,al; AL = 12H10 011; AL = 89H CF ZF SF OF PF;

22、ZF =, SF=, PF=add al,9dh; AL=OAFHOO1O1cmp al,Obch; AL=OAFH1O1O1sub al,al; AL=OOHO1OO1dec al; AL=OFFHOO1O1inc al; AL=OOHO1OO1習(xí)題 3.22 有兩個 64 位無符號整數(shù)存放在變量 buffer1 和 buffer2 中,定義 數(shù)據(jù)、編寫代碼完成 EDX.EAXbufferl buffer2功能。(去E)解答; 數(shù)據(jù)段buffer1 qword 67883000hbuffer2 qword 67762000h; 代碼段mov eax,dword ptr buffer1mov

23、edx,dword ptr buffer1+4sub eax,dword ptr buffer2sbb edx,dword ptr buffer2+4習(xí)題 3.23分別執(zhí)行如下程序片斷,說明每條指令的執(zhí)行結(jié)果:(去 E)1)Hmov esi,1OO111OOb ; ESI =and esi,8Oh; ESIor esi,7fh; ESIxor esi,Ofeh; ESI2)mov eax,1O1Ob ; EAXshr eax,2; EAXshl eax,1; EAXand eax,3 ; EAX3)mov eax,1O11b ; EAXrol eax,2; EAXrcr eax,1; EAXH

24、CF=CF=CF=CF=CF=CF=or eax,3; EAX解答(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, OM 0;ZF = 1, SF= 0, PF= 1習(xí)題 3.

25、243.24 給出下列各條指令執(zhí)行后 AX 的結(jié)果,以及狀態(tài)標(biāo)志 CF、 OF、SF、ZF、PF 的狀態(tài)。mov ax,1470h and ax,ax or ax,ax xor ax,ax not ax test ax,0f0f0h解答mov ax,1470h;AX = 1470H CF OFSFZFPFand ax,ax; AX=1470H 00000or ax,ax; AX=1470H 00000xor ax,ax; AX=0000H 00011not ax; AX=FFFFH 00011test ax,0f0f0h;AX= 0F0F0H00101習(xí)題 3.25 邏輯運算指令怎么實現(xiàn)復(fù)位、

26、置位和求反功能? 解答AND指令同“0”與實現(xiàn)復(fù)位,OR指令同“ 1”或?qū)崿F(xiàn)置位,XOR同“1” 異或?qū)崿F(xiàn)求反。習(xí)題 3.27 (去 E)編程將一個 64 位數(shù)據(jù)邏輯左移 3 位,假設(shè)這個數(shù)據(jù)已經(jīng)保存在 EDX.EAX 寄存器對中。解答; 代碼段mov ecx,3 again: shl eax,1rcl edx,1loop again習(xí)題3.28丨編程將一個壓縮 BCD碼變量(例如92H)轉(zhuǎn)換為對應(yīng)的ASCII 碼,然后調(diào)用 DISPC 子程序(在輸入輸出子程序庫中)顯示。解答; 數(shù)據(jù)段bcd byte 92h; 代碼段mov al,bcdshr al,4add al,30hcall disp

27、cmov al,bcdand al,0fhadd al,30hcall dispc習(xí)題3.31下面程序的功能是將數(shù)組 ARRAY1的每個元素加固定值(8000H), 將和保存在數(shù)組 ARRAY2 。在空白處填入適當(dāng)?shù)恼Z句或語句的一部分。; 數(shù)據(jù)段array1 dword 1,2,3,4,5,6,7,8,9,10 array2 dword 10 dup(?); 代碼段mov ecx,le ngthof arraylmov ebx,0aga in: mov eax,array1ebx*4add eax,8000hmovadd ebx,loop aga in解答mov array2ebx*4,eax

28、add ebx,1_第4章匯編語言程序設(shè)計習(xí)題4.1簡答題(3)為什么判斷無符號數(shù)大小和有符號大小的條件轉(zhuǎn)移指令不同?(4)雙分支結(jié)構(gòu)中兩個分支體之間的 JMP指令有什么作用?(5)為什么特別強(qiáng)調(diào)為子程序加上必要的注釋?(6)子程序采用堆棧傳遞參數(shù),為什么要特別注意堆棧平衡問題?(7)參數(shù)傳遞的“傳值”和“傳址”有什么區(qū)別?(8)INCLUDE語句和INCLUDELIB 有什么區(qū)別?解答 無符號數(shù)和有符號數(shù)的操作影響兩組不同的標(biāo)志狀態(tài)位,故判斷兩個無 符號數(shù)和有符號數(shù)的大小關(guān)系要利用不同的標(biāo)志位組合,所以有對應(yīng)的兩組指 令。 雙分支結(jié)構(gòu)中兩個分支體之間的JMP指令,用于實現(xiàn)結(jié)束前一個分支回 到

29、共同的出口作用。 完整的子程序注釋可方便程序員調(diào)用該子程序,子程序注釋包括子程序 名、子程序功能、入口參數(shù)和出口參數(shù)、調(diào)用注意事項和其他說明等。 子程序保持堆棧平衡,才能保證執(zhí)行RET指令時當(dāng)前棧頂?shù)膬?nèi)容是正確 的返回地址。主程序也要保持堆棧平衡,這樣才能釋放傳遞參數(shù)占用的堆??臻g, 否則多次調(diào)用該子程序可能就致使堆棧溢出。 “傳值”是傳遞參數(shù)的一個拷貝,被調(diào)用程序改變這個參數(shù)不影響調(diào)用 程序;“傳址”時,被調(diào)用程序可能修改通過地址引用的變量內(nèi)容。 INCLUDE語句包含的是文本文件、是源程序文件的一部分; INCLUDELIB語句包含的是子程序庫文件。習(xí)題4.3填空題(1)JMP指令根據(jù)目標(biāo)

30、地址的轉(zhuǎn)移范圍和尋址方式,可以分成四種類型: 段內(nèi)轉(zhuǎn)移、 段內(nèi)轉(zhuǎn)移、廿段間轉(zhuǎn)移、 段間轉(zhuǎn)移、。(2) 假設(shè)在平展存儲模型下,EBX = 1256H,雙字變量TABLE的偏移地址是20A1H,線性地址32F7H處存放3280H,執(zhí)行指令“ JMP EBX” 后EIP= 執(zhí)行指令“ JMP TABLEEBX ” 后 EIP =。(3) “ CMP EAX,3721H ”指令之后是JZ指令,發(fā)生轉(zhuǎn)移的條件是 EAX = ,此時 ZF =。(去 E)( 5 )循環(huán)結(jié)構(gòu)程序一般有三個部分組成,它們是 ,循環(huán)體和部分。(7)過程定義開始是“ TEST PROC”語句,貝U過程定義結(jié)束的語句是 。宏定義開始

31、是“ DISP MACRO ”語句,則宏定義結(jié)束的語句是(8) 利用堆棧傳遞子程序參數(shù)的方法是固定的,例如尋址堆棧段數(shù)據(jù)的寄存器是 。(9) MASM 匯編語言中,聲明一個共用的變量應(yīng)使用 偽指令;而使用外部變量要使用 偽指令聲明。解答 相對尋址,間接尋址,直接尋址,間接尋址 1256H, 3280H 3721H, 1 循環(huán)初始,循環(huán)控制 TEST ENDP, ENDM EBP PUBLIC, EXTERN習(xí)題 4.6執(zhí)行如下程序片斷后, CMP 指令分別使得 5 個狀態(tài)標(biāo)志 CF、ZF、SF、OF 和PF為0還是為1 ?它會使得哪些條件轉(zhuǎn)移指令指令 Jcc的條件成立、發(fā)生轉(zhuǎn) 移?mov ea

32、x,20hcmp eax,80h解答CF= 1 ZF = 0 SF= 1 OF= 0 PF= 1 可以使得條件成立、發(fā)生轉(zhuǎn)移的指令有: JC JS JP JNZ JNO習(xí)題 4.8在采用奇偶校驗傳輸數(shù)據(jù)的接收端應(yīng)該驗證數(shù)據(jù)傳輸?shù)恼_性。例 如,如果采用偶校驗,那么在接收到的數(shù)據(jù)中,其包含“ 1”的個數(shù)應(yīng)該為 0 或 偶數(shù)個, 否則說明出現(xiàn)傳輸錯誤。 現(xiàn)在,在接收端編寫一個這樣的程序, 如果偶 校驗不正確顯示錯誤信息, 傳輸正確則繼續(xù)。 假設(shè)傳送字節(jié)數(shù)據(jù)、 最高位作為校 驗位,接收到的數(shù)據(jù)已經(jīng)保存在 Rdata 變量中。解答; 保存接收的數(shù)據(jù);標(biāo)志PF反映“ 1”的個數(shù); 個數(shù)為偶數(shù),正確繼續(xù);

33、 個數(shù)為奇數(shù),顯示出錯; 數(shù)據(jù)段 Rdata byte 57h error byte Error !,0; 代碼段 mov al,Rdata and al,0ffh jp done mov eax,offset error call dispmsg done:習(xí)題 4.1 0 編程,首先測試雙字變量 DVAR 的最高位,如果為 1 ,則顯示字 母“ L ”;如果最高位不為 1 ,則繼續(xù)測試最低位,如果最低位為 1 ,則顯示字 母“ R ”;如果最低位也不為 1 ,則顯示字母“ M ”。解答; 數(shù)據(jù)段 dvar dword 57h; 代碼段 mov eax,dvar test eax,80000

34、000h jnz nextl test eax,1 jnz nextr mov al,Mjmp done nextl: mov al,Ljmp done nextr: mov al,R done: call dispc習(xí)題4.11編寫一個程序,先提示輸入數(shù)字“ In put Number : 09”,然后 在下一行顯示輸入的數(shù)字,結(jié)束;如果不是鍵入了09數(shù)字,就提示錯誤“ Error! ”,繼續(xù)等待輸入數(shù)字。解答; 數(shù)據(jù)段inmsg byte Input number(09): ,0ermsg byte 0dh,0ah,Error! Input again: ,0; 代碼段mov eax,of

35、fset inmsg ; 提示輸入數(shù)字call dispmsgagain: call readc; 等待按鍵cmp al,0; 數(shù)字 9 ?ja erdispcall dispcrlfcall dispcjmp doneerdisp: mov eax,offset ermsgcall dispmsgjmp againdone:習(xí)題 4.12有一個首地址為 ARRAY 的20個雙字的數(shù)組, 說明下列程序段的 功能。mov ecx,20mov eax,0mov esi,eaxsumlp: add eax,arrayesiadd esi,4loop sumlpmov total,eax解答求這 20

36、個雙字的和,保存在 TOTAL 變量,不關(guān)進(jìn)心進(jìn)位和溢出。習(xí)題 4.13 編程中經(jīng)常要記錄某個字符出現(xiàn)的次數(shù)?,F(xiàn)編程記錄某個字符串 中空格出現(xiàn)的次數(shù),結(jié)果保存在 SPACE 單元。 解答; 數(shù)據(jù)段string byte Do you have fun with Assembly ?,0; 以 0 結(jié)尾的字符串space dword ?; 代碼段mov esi,offset stringxor ebx,ebx;EBX 用于記錄空格數(shù)again: mov al,esicmp al,0jz donecmp al,20h; 空格的 ASCII 碼是 20Hjne next; 不相等、不是空格,轉(zhuǎn)移in

37、c bx; 相等、是空格,空格個數(shù)加 1next: inc esijmp again; 繼續(xù)循環(huán)done: mov space,ebx ; 保存結(jié)果習(xí)題 4.14 編寫計算 100 個 16 位正整數(shù)之和的程序。如果和不超過 16 位字 的范圍( 65535 ),則保存其和到 WORDSUM ,如超過則顯示 Overflow ! 。 解答; 數(shù)據(jù)段array word 2005,2008,98 dup (1394) ; 假設(shè) 100 個 16 位正整數(shù) wordsumword ?error byte Overflow !,0; 代碼段and ebx,0mov ecx,100xor ax,axa

38、gain: add ax,arrayebx*2jc overinc ebxloop againmov wordsum,axover: mov eax,offset errorcall dispmsg習(xí)題 4.15在一個已知長度的字符串中查找是否包含“BUG ”子字符串。如果存在,顯示“ 丫”,否則顯示“ N”。解答 ; 數(shù)據(jù)段string byte If you find any error in the program, you can DEBUG it. count = sizeof string bug byte BUG; 代碼段 mov ecx,count mov edi,offset

39、 stringL1: mov esi,offset bug push edi mov edx,sizeof bugLN:mov al,esicmp edi,al jne L2 inc esi inc edi dec edx jne LN pop edimov al,Y jmp L3 L2:pop ediinc edi loop L1mov al,NL3:call dispc習(xí)題 4.16 主存中有一個 8 位壓縮 BCD 碼數(shù)據(jù), 保存在一個雙字變量中。 現(xiàn) 在需要進(jìn)行顯示,但要求不顯示前導(dǎo) 0 。由于位數(shù)較多,需要利用循環(huán)實現(xiàn),但 如何處理前導(dǎo) 0和數(shù)據(jù)中間的 0 呢?不妨設(shè)置一個標(biāo)記。編程

40、實現(xiàn)。解答; 數(shù)據(jù)段bcd dword 00371002h; 代碼段 mov esi,bcd cmp esi,0 jnz goongoon:mov al,0 call dispc jmp done mov ecx,8again:xor ebx,ebx rol esi,4disp:mov eax,esi and eax,0fh cmp ebx,0 jnz disp cmp eax,0 jz next mov ebx,1 add al,30hnext:call dispc loop againdone:;EBX = 0,表示可能是前導(dǎo)0;EAX低4位保存當(dāng)前要顯示的BCD碼;EBX工0,說明不是前

41、導(dǎo)0,要顯示;EBX = 0,說明可能是前導(dǎo)0;EAX = 0,說明是前導(dǎo)0,不顯示;EAX豐0,沒有前導(dǎo)0 了,令EBX= 1工0習(xí)題 4.17已知一個字符串的長度,剔除其中所有的空格字符。請從字符串 最后一個字符開始逐個向前判斷、并進(jìn)行處理。解答; 數(shù)據(jù)段string byte Let us have a try !,0dh,0ah,0; 代碼段mov ecx,sizeof string cmp ecx,2 jb done lea eax,string call dispmsg mov esi,ecx dec esi outlp: cmp stringesi, jnz next mov e

42、di,esi顯示處理前的字符串檢測是否是空格 不是空格繼續(xù)循環(huán) 是空格,進(jìn)入剔除空格分支dec ecxinlp:inc edimov al,stringedi; 前移一個位置mov stringedi-1,alcmp edi,ecxjb inlpnext:dec esi;繼續(xù)進(jìn)行cmp esi,0jnz outlp;為 0 結(jié)束lea eax,string;顯示處理后的字符串call dispmsgdone:習(xí)題 4.19 請按如下說明編寫子程序:子程序功能:把用 ASCII 碼表示的兩位十進(jìn)制數(shù)轉(zhuǎn)換為壓縮 BCD 碼 入口參數(shù):DH =十位數(shù)的ASCII碼,DL =個位數(shù)的ASCII碼 出口

43、參數(shù):AL =對應(yīng)BCD碼解答asctob procshl dh,4mov al,dhand dl,0fhor al,dlretasctob endp習(xí)題 4.21編寫一個源程序,在鍵盤上按一個鍵,將其返回的 ASCII 碼值顯 示出來,如果按下ESC鍵(對應(yīng)ASCII碼是1BH )則程序退出。請調(diào)用書中的 HTOASC 子程序。解答; 代碼段,主程序again: call readccmp al,1bhjz donemov bl,almov al,:call dispcmov al,blrol al,4call htoasc; 調(diào)用子程序call dispc; 顯示一個字符mov al,bl

44、call htoasc; 調(diào)用子程序call dispc; 顯示一個字符call dispcrlfjmp againdone:習(xí)題 4.22 編寫一個子程序,它以二進(jìn)制形式顯示 EAX 中 32 位數(shù)據(jù),并設(shè) 計一個主程序驗證。解答; 代碼段,主程序 mov eax,8F98FF00H call dispbd ; 調(diào)用子程序; 代碼段,子程序dispbd proc ; 32 位二進(jìn)制數(shù)的輸出 push ecx push edx mov ecx,32; 要輸出的字符個數(shù)dbd: rol eax,1; AL 循環(huán)左移一位push eaxand al,01h;取 AL 最低位add al,30h;轉(zhuǎn)

45、化成相應(yīng)的ASCLL碼值call dispc;以二進(jìn)制的形式顯示pop eax loop dbd pop edx pop ecxretdispbd endp習(xí)題 4.26 編制 3 個子程序把一個 32 位二進(jìn)制數(shù)用 8 位十六進(jìn)制形式在屏幕上顯示出來,分別運用如下 3種參數(shù)傳遞方法,并配合 3個主程序驗證它(1) 采用 EAX 寄存器傳遞這個 32 位二進(jìn)制數(shù)(2) 采用temp變量傳遞這個32位二進(jìn)制數(shù)(3) 采用堆棧方法傳遞這個 32位二進(jìn)制數(shù) 解答( 1 ); 數(shù)據(jù)段wvarword 307281AFH ; 代碼段,主程序 mov eax,wvar call disp mov al,H

46、 call dispc; 代碼段,子程序dispproc push ebx push ecxmov ecx,8;8位dhw1: rol eax,4 mov ebx,eaxand al,0fh ; add al,30h cmp al,9 jbe dhw2add al,7轉(zhuǎn)換為 ASCII 碼dhw2: call dispc mov eax,ebx loop dhw1 pop ecx pop ebx retdispendp2); 數(shù)據(jù)段wvarword 307281AFHtempword ?; 代碼段,主程序 mov eax,wvar mov temp,eaxcall disp mov al,H

47、call dispc; 代碼段,子程序disp procpush ebxpush ecxmov ecx,8; 8 位mov eax,temp dhw1: rol eax,4mov ebx,eaxand al,0fh ; 轉(zhuǎn)換為 ASCII 碼 add al,30h cmp al,9 jbe dhw2add al,7dhw2: call dispc; 顯示一個字符mov eax,ebx loop dhw1 pop ecx pop ebx retdisp endp(3); 數(shù)據(jù)段wvar word 307281AFH; 代碼段,主程序 push wvar call disp add esp,4 m

48、ov al,H call dispc; 代碼段,子程序disp procpush ebpmov ebp,esppush ebxpush ecxmov ecx,8; 8 位mov eax,ebp+8dhw1:rol eax,4 mov ebx,eax and al,0fh; 轉(zhuǎn)換為 ASCII 碼add al,30hcmp al,9 jbe dhw2 add al,7dhw2:call dispc mov eax,ebx loop dhw1 pop ecx pop ebx pop ebp retdispendp習(xí)題 4.28 設(shè)計一個簡單的兩個整數(shù)的加法器程序 解答;ex0428.asmmsg1

49、msg2include io32.inc.databyte Enter the integers:,13,10,0byte 13,10,Enter space to continue! Enter any other key toexit!,13,10,0.codestart:mov eax,offset msg1 call dispmsg call readsidmov ebx,eaxmov al,+call dispccall dispcrlfcall readsid add ebx,eaxmov al,=call dispcmov eax,ebxcall dispsidcall disp

50、crlfmov eax,offset msg2call dispmsgcall readccmp al,20hje startexit 0end start習(xí)題 4. 31區(qū)別如下概念:宏定義、宏調(diào)用、宏指令、宏展開、宏匯編。解答宏定義:就是對宏進(jìn)行說明,由一對宏匯編偽指令 MACRO 和 ENDM 來完 成。宏調(diào)用:宏定義之后的使用。 在使用宏指令的位置寫下宏名, 后跟實體參數(shù)。 宏指令:使用宏時,其形式很像指令,所以稱為宏指令。宏展開:在匯編時,匯編程序用對應(yīng)的代碼序列替代宏指令。 宏匯編:指使用宏的方法進(jìn)行匯編語言程序設(shè)計。第 5 章 微機(jī)總線習(xí)題 5.1簡答題(1)為什么稱處理器的數(shù)據(jù)

51、總線是雙向的?(2)8086的地址和數(shù)據(jù)總線為什么要分時復(fù)用?(3)具有三態(tài)能力的引腳輸出高阻意味著什么?(4)總線周期中的等待狀態(tài)是個什么工作狀態(tài)?(6)總線數(shù)據(jù)傳輸為什么要進(jìn)行總線仲裁?(7)異步時序為什么可以沒有總線時鐘信號?解答 數(shù)據(jù)總線承擔(dān)著處理器與存儲器、外設(shè)之間的數(shù)據(jù)交換,既可以輸入也 可以輸出,故其是雙向的。 為減少引腳個數(shù), 8086 采用了地址總線和數(shù)據(jù)總線分時復(fù)用。即數(shù)據(jù)總 線在不同時刻還具有地址總線的功能。 具有三態(tài)能力的引腳當(dāng)輸出呈現(xiàn)高阻狀態(tài)時,相當(dāng)于連接了一個阻抗很高的外部器件,信號無法正常輸出;即放棄對該引腳的控制,與其他部件斷開連 接。 處理器的運行速度遠(yuǎn)遠(yuǎn)快于存儲器和 I/O端口。處理器檢測到存儲器或 I/O端口不能按基本的總線周期進(jìn)行數(shù)據(jù)交換時,插入一個等待狀態(tài)Tw。等待狀態(tài)實際上是一個保持總線信號狀態(tài)不變的時鐘周期。 總線上可能連接多個需要控制總線的主設(shè)備,需要確定當(dāng)前需要控制總 線的主設(shè)備,所以需要總線仲裁。 異步時序是由總線握手(Handshake聯(lián)絡(luò)(應(yīng)答)信號控制,不是由總 線時鐘控制。故總線時鐘信號可有可無。習(xí)題5.3填空題(1) 某個處理器具有16個地址總線,通??梢杂肁表達(dá)最低位 地址信號,用A15表達(dá)最高地址信號。(2)8086有3個最基本的讀寫控制信號,它們是 M/IO,和(3)8086預(yù)取指令時,在其引腳上將

溫馨提示

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

評論

0/150

提交評論