16/32位微機原理、匯編語言及接口技術__錢曉捷_第2版_課后習題答案new_第1頁
16/32位微機原理、匯編語言及接口技術__錢曉捷_第2版_課后習題答案new_第2頁
16/32位微機原理、匯編語言及接口技術__錢曉捷_第2版_課后習題答案new_第3頁
16/32位微機原理、匯編語言及接口技術__錢曉捷_第2版_課后習題答案new_第4頁
16/32位微機原理、匯編語言及接口技術__錢曉捷_第2版_課后習題答案new_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一章1.1 解:五代,詳細見書1.2 解: 微型計算機:以大規(guī)模、超大規(guī)模集成電路為主要部件,以集成了計算機主要部件控制器和運算器的微處理器為核心,所構造出的計算機系統(tǒng) 。PC機:PC(Personal Computer)機就是面向個人單獨使用的一類微機 。單片機:用于控制的微處理器芯片,內部除CPU外還集成了計算機的其他一些主要部件,如:ROM、RAM、定時器、并行接口、串行接口,有的芯片還集成了A/D、D/A轉換電路等。 數(shù)字信號處理器DSP:主要面向大流量數(shù)字信號的實時處理,在宿主系統(tǒng)中充當數(shù)據(jù)處理中心,在網絡通信、多媒體應用等領域正得到越來越多的應用1.3 解:微機主要有存儲器、I/

2、O設備和I/O接口、CPU、系統(tǒng)總線、操作系統(tǒng)和應用軟件組成,各部分功能如下:CPU:統(tǒng)一協(xié)調和控制系統(tǒng)中的各個部件系統(tǒng)總線:傳送信息存儲器:存放程序和數(shù)據(jù)I/O設備:實現(xiàn)微機的輸入輸出功能I/O接口:I/O設備與CPU的橋梁操作系統(tǒng):管理系統(tǒng)所有的軟硬件資源1.4 解:系統(tǒng)總線:傳遞信息的一組公用導線,CPU通過它們與存儲器和I/O設備進行信息交換 。好處:組態(tài)靈活、擴展方便 三組信號線:數(shù)據(jù)總線、地址總線和控制總線 。其使用特點是:在某一時刻,只能由一個總線主控設備來控制系統(tǒng)總線,只能有一個發(fā)送者向總線發(fā)送信號;但可以有多個設備從總線上同時獲得信號。1.5解:(1)用于數(shù)值計算、數(shù)據(jù)處理及

3、信息管理方向。采用通用微機,要求有較快的工作速度、較高的運算精度、較大的內存容量和較完備的輸入輸出設備,為用戶提供方便友好的操作界面和簡便快捷的維護、擴充手段。(2)用于過程控制及嵌人應用方向。采用控制類微機,要求能抵抗各種干擾、適應現(xiàn)場的惡劣環(huán)境、確保長時間穩(wěn)定地工作,要求其實時性要好、強調其體積要小、便攜式應用強調其省電。1.6 解:1.7 解: I/O通道:位于CPU和設備控制器之間,其目的是承擔一些原來由CPU處理的I/O任務,從而把CPU從繁雜的I/O任務中解脫出來。由10根信號線組成(A9-A0)。1.8解: BIOS:基本輸入輸出系統(tǒng)。主要功能:用來驅動和管理諸如鍵盤、顯示器、打

4、印機、磁盤、時鐘、串行通信接口等基本的輸入輸出設備1.9 解:基本RAM區(qū):640KB保留RAM區(qū):128KB擴展ROM區(qū):128KB基本ROM區(qū):128KB1.10 解:(1)、數(shù)用來直接表征量的大小,包括:定點數(shù)、浮點數(shù)。(2)、碼用來指代某個事物或事物的某種狀態(tài)屬性,包括:二進制、八進制、十進制、十六進制。區(qū)別:使用場合不同,詳見P16.1.11 解:(1)(2)(3)1.12 解:原碼 反碼 補碼+37 00100101/25H 00100101/25H 00100101/25H-37 10100101/A5H 11011010/DAH 11011011/DBH1.13 解: +37

5、-3716位 32位16位 32位00 25H00 00 00 25HFF 5BHFF FF FF 5BH1.14 解:無符號數(shù):70D補碼有符號數(shù):70DBCD碼:46DASCII:F1.15 解:1)、相加后若出現(xiàn)和大于9,則將和減去10后再向高位進12)、若出現(xiàn)組間進位,則將低位加61.16 解:詳見課本16頁。1.17 解:C3 40 20 001.18 解:5050H十進制值5080二進制十六進制二進制十六進制0011 0010B32H0101 0000B50H1.19 解:D:44Hd:64HCR:0DHLF:0AH0:30HSP:20HNUL:00H1.20 解:國標碼:36 5

6、0H機內碼:B6 B0H第二章21算術邏輯單元ALU、寄存器組和控制器;總線接口單元BIU:管理8088與系統(tǒng)總線的接口負責cpu對接口和外設進行訪問執(zhí)行單元EU:負責指令譯碼、執(zhí)行和數(shù)據(jù)運算;8位cpu在指令譯碼前必須等待取指令操作的完成,8088中需要譯碼的指令已經取到了指令隊列,不需要等待取指令。而取指令是cpu最為頻繁的操作,因此8088的結構和操作方式節(jié)省了大量等待時間,比8位cpu節(jié)省了時間,提高了性能。228個8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL;8個16位寄存器:累加器AX、基址寄存器BX、計數(shù)器CX、數(shù)據(jù)寄存器DX、源地址寄存器SI、目的地址寄存器DI、

7、基址指針BP、堆棧指針SP。23標志用于反映指令執(zhí)行結果或者控制指令執(zhí)行形式。狀態(tài)標志用于記錄程序運行結果的狀態(tài)信息;控制標志用于控制指令執(zhí)行的形式。24例:有運算:3AH+7CH=B6H 作為無符號數(shù)運算,沒有進位,CF=0; 作為有符號數(shù)運算,結果超出范圍,OF=1.2.58088中每個存儲單元有唯一的20位地址,稱為物理地址。處理器通過總線存取存儲器數(shù)據(jù)時,采用這個物理地址。在用戶編程過程中采用的“段地址:偏移地址”的形式稱為邏輯地址。將邏輯地址中的段地址左移4位,加上偏移地址就得到物理地址。1MB最多能分成65536個邏輯段。26 代碼段:存放程序的指令序列; 堆棧段:確定堆棧所在的主

8、存儲區(qū); 數(shù)據(jù)段:存放當前運行程序的數(shù)據(jù); 附加段:附加數(shù)據(jù)段,用于數(shù)據(jù)保存。另外串操作指令將其作為目的操作數(shù)的存放區(qū)。278088的存儲空間分段管理,程序設計時采用邏輯地址。由于段地址在默認的或指定的段寄存器中,所以只需要偏移地址,稱為有效地址EA.操作數(shù)在主存中有以下幾種尋址方式:直接尋址、寄存器間接尋址、寄存器相對尋址、基址變址尋址、相對基址變址尋址。28(1)立即數(shù)尋址 ax:1200H(2)寄存器尋址 ax:0100H(3)存儲器直接尋址 ax:4C2AH(4)寄存器間接尋址 ax:3412H(5)寄存器間接尋址 ax:4C2AH(6)基址變址尋址 ax:7856H(7)相對基址變址

9、尋址 ax:65B7H29(1)cx為字寄存器,dl為字節(jié)寄存器,類型不匹配。(2)mov指令的目的操作數(shù)只能是寄存器或者主存單元,ip是指針。(3)不允許立即數(shù)到段寄存器的傳送。(4)不允許段寄存器之間的直接傳送。(5)數(shù)據(jù)溢出。(6)sp不能用于寄存器間接尋址。(7)格式不對。應為:mov ax,bx+di(8)mov指令的操作數(shù)不能是立即數(shù)。210(1)bx得到table的偏移地址,bx=200H.(2)將立即數(shù)8送到al。(3)換碼,al=12H.211(1)al=89H(2)al=12H,cf=1,zf=0,sf=0,of=1,pf=1(3)al=0AFH,cf=0,zf=0,sf=

10、1,of=0,pf=1(4)al=0AFH,cf=1,zf=0,sf=1,of=1,pf=1(5)al=0,cf=0,zf=1,sf=0,of=0,pf=1(6)al=0FFH,cf=0,zf=0,sf=1,of=0,pf=1(7)al=0,cf=0,zf=1,sf=0,of=0,pf=1212(1) add dx,bx(2) add al,bx+si(3) add word ptrbx+0B2H,cx(4) add word ptr0520H,3412H(5)add al,0A0H213運算公式:。商存儲在ax,余數(shù)存儲在dx。214(1)ax=1470H(2)ax=1470H,cf=0,o

11、f=0,sf=0,zf=0,pf=0(3)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0(4)ax=0,cf=0,of=0,sf=0,zf=1,pf=1(5)ax=0FFFFH,cf=0,of=0,sf=0,zf=1,pf=1(6)ax=0FFFFH,cf=0,of=0,sf=1,zf=0,pf=12.15相對尋址方式、直接尋址方式、間接尋址方式。216(1)1256H(2)3280H217(1)ax=1E1EH(2)al的D0、D7位不全為0(3)cx64H218執(zhí)行65536次。219功能:將數(shù)組中每個字元素相加,結果存儲于total。220(1)lea si,stri

12、ng Mov dh,si Mov dl,si+5(2)mov ax word ptr buffer1 Sub ax word ptr buffer2 Mov dx word ptr buffer1+2 Sbb dx word ptr buffer2+2(3) test dx,0F000Hjz eveneven: mov ax,0(4) mov cx,4again: sar dx,1 rcr ax,1 loop again(5) mov cx,100mov si,0again: mov al,0FFH add al,arraysi mov arraysi,al inc si loop again

13、2.21Htoasc proc Mov bl,al Mov al,ah Mov bh,10 Mul bh And ax,00FFH Add al,blHtoend: retHtoasc endp2.22計算機系統(tǒng)利用中斷為用戶提供硬件設備驅動程序。在IBM-PC系列微機中,基本輸入輸出系統(tǒng)ROM-BIOS和DOS都提供了豐富的中斷服務程序,稱為系統(tǒng)功能調用。調用步驟(1)AH中設置系統(tǒng)功能調用號 (2)在指定寄存器中設置入口參數(shù) (3)使用中斷調用指令執(zhí)行功能調用 (4)根據(jù)出口參數(shù)分析調用情況223Htoasc proc And al,0FH Add al,90H Daa Adc al,40

14、H Daa Mov ah,02H Mov dl,al Int 21H RetHtoasc endp2.24Numout proc Xor ah,ah Aam Add ax,3030H Mov dl,ah Mov ah,02H Int 21H Mov dl,al Mov ah,02H Int 31H RetNumout endp2.25Msgkey db”input number 0-9”,”$”Msgwrg db”error”,”$” Mov ah,09H Mov dx,offset msgkey Int 21HAgain: mov ah,01H Int 21H Cmp al,30H Jb d

15、isp Cmp al,39H Ja disp Mov dl,al Mov ah,02H Int 21H Jmp doneDisp: mov dx,offset msgwrg Mov ah,09H Int 21H Jmp againDone: mov ah,02H Mov dl,al Int 21H第3章 3.1解:匯編語言是一種以處理器指令系統(tǒng)為基礎的低級程序設計語言,它采用助記符表達指令操作碼,采用標識符號表示指令操作數(shù),可以直接、有效地控制計算機硬件,因而容易創(chuàng)建代碼序列短小、運行快速的可執(zhí)行程序3.2 解:(1)完整的匯編語言源程序由段組成(2)一個匯編語言源程序可以包含若干個代碼段、數(shù)

16、據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列(3)需獨立運行的程序必須包含一個代碼段,并指示程序執(zhí)行的起始點,一個程序只有一個起始點(4)所有的可執(zhí)行性語句必須位于某一個代碼段內,說明性語句可根據(jù)需要位于任一段內(5)通常,程序還需要一個堆棧段3.3 解:存儲模式特 點TINYCOM類型程序,只有一個小于64KB的邏輯段(MASM 6.x支持)SMALL小應用程序,只有一個代碼段和一個數(shù)據(jù)段(含堆棧段),每段不大于64KBCOMPACT代碼少、數(shù)據(jù)多的程序,只有一個代碼段,但有多個數(shù)據(jù)段MEDIUM代碼多、數(shù)據(jù)少的程序,可有多個代碼段,只有一個數(shù)據(jù)段LARGE大應用程序,可有多個代碼段和多

17、個數(shù)據(jù)段(靜態(tài)數(shù)據(jù)小于64KB)HUGE更大應用程序,可有多個代碼段和多個數(shù)據(jù)段(對靜態(tài)數(shù)據(jù)沒有限制)FLAT32位應用程序,運行在32位80x86CPU和Windows 9x或NT環(huán)境3.4 解:開始位置:用標號指明返回DOS:利用DOS功能調用的4CH子功能來實現(xiàn)匯編停止:執(zhí)行到一條END偽指令時,停止匯編3.5 解:段定位、段組合和段類型。3.6 解:stack segment stackdb 1024(0)stack endsdata segment string db Hello,Assembly!,0dH,0aH,$data ends code segment codeassume

18、 cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7 解:(1). EXE程序程序可以有多個代碼段和多個數(shù)據(jù)段,程序長度可以超過64KB通常生成EXE結構的可執(zhí)行程序(2). COM程序只有一個邏輯段,程序長度不超過64KB需要滿足一定條件才能生成COM結構的可執(zhí)行程序(MASM 6.x需要采用TINY模式)3.8 解:符號定義偽指令有“等價EQU”和“等號”:符號名 EQU 數(shù)值表達式符號名 EQU 符號名 數(shù)值表達式EQU用于數(shù)值等價時不能重復定義符號名,但“”允許有

19、重復賦值。例如:X= 7;等效于:X equ 7X= X+5;“X EQU X+5”是錯誤的3.9 解:(1) al=67h(2) ax=133h,dx=4h(3) ax=0230h(4) al=41h(4) ax=7654h3.10 解:(1)41h42h43h1010h45h46h-1?444-1?444-1?444(2)10h00h0fbh0ffh?3.11 解:.data my1b db Personal Computermy2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c = 100my7c = 3.12 解:利用定位

20、偽指令控制,如org,even,align3.13 解:包括邏輯地址和類型兩種屬性。3.14 解:;數(shù)據(jù)段org 100hvarwdw1234h,5678hvarbdb3,4varddd12345678hbuffdd10dup(?)messdbHello;代碼段movax,offsetvarb+ offsetmessmovax,typebuff+ typemess+typevardmovax,sizeofvarw+ sizeofbuff+ sizeof messmovax,lengthofvarw+ lengthofvard3.15 解:(1) 1000超過一個字節(jié)所能表達的最大整數(shù)(2)SI

21、應為偶數(shù)(3)兩個內存單元不能直接運算(4)應改為al+1(5)條件轉移指令后面應接標號,而不是變量3.16 解:mov ah,1;只允許輸入小寫字母int 21hsub al,20h;轉換為大寫字母mov dl,almov ah,2int 21h;顯示3.17 解:mov bx,offset LEDtablemov al,lednumxlat3.18 解:mov ax, bufXcmp ax, bufYjae donemov ax, bufYdone:mov bufZ, ax3.19 解:.model small.stack.databufXdw -7signXdb ?.code.start

22、upcmp bufX,0;test bufX,80hjl next;jnz nextmov signX,0jmp donenext:mov signX,-1done:.exit 0end3.20 解:mov dl,2mov ax,bufXcmp ax,bufYje next1dec dlnext1:cmp ax,bufZje next2dec dlnext2:mov ah,2int 21h3.21 解:;代碼段mov al,numbermov bx,0;BX記錄為1的位數(shù)restart:cmp al,0;AL0結束jz doneagain:shr al,1;最低位右移進入CFjc next;為

23、1,轉移inc bx;不為1,繼續(xù)jmp againnext:push axpush bxshl bx,1;位數(shù)乘以2(偏移地址要用2個字節(jié)單元)jmp addrsbx;間接轉移:IPtableBX;以下是各個處理程序段fun0:mov dl,0jmp dispfun1:mov dl,1jmp dispfun2:mov dl,2jmp dispfun3:mov dl,3jmp dispfun4:mov dl,4jmp dispfun5:mov dl,5jmp dispfun6:mov dl,6jmp dispfun7:mov dl,7jmp disp;disp:mov ah,2;顯示一個字符i

24、nt 21hpop bxpop axjmp restartdone: 3.22 編制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10個字節(jié)數(shù)據(jù)之和,并將結果存入字節(jié)變量SUM中(不考慮溢出和進位)。;wjxt322.asm.model small.stack.datab_datadb 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始數(shù)據(jù)numequ 10;數(shù)據(jù)個數(shù)sumdb ?;預留結果單元.code.startupxor si, si;位移量清零xor al, al;取第一個數(shù)mov cx, num;

25、累加次數(shù)again:add al, b_datasi;累加inc si;指向下一個數(shù)loop again;如未完,繼續(xù)累加mov sum, al;完了,存結果.exit 0end3.23 求主存0040h:0開始的一個64KB物理段中共有多少個空格?; wjxt323.asm.model small.codestart:mov ax,0040h;送段地址mov ds, axmov si, 0;偏移地址mov cx, si;計數(shù)(循環(huán)次數(shù))xor ax, ax;空格計數(shù)器清零again:cmp byte ptr si, 20h;與空格的ASCII碼比較jne next;不是空格,轉inc ax;

26、是空格,空格數(shù)加1next:inc si;修改地址指針loop again;cxcx1,如cx0 退出循環(huán).exit 0end start3.24 編寫計算100個16位正整數(shù)之和的程序。如果和不超過16位字的范圍(65535),則保存其和到wordsum,如超過則顯示overflow。答:;數(shù)據(jù)段countequ 100parraydw count dup(?);假設有100個數(shù)據(jù)wordsumdw 0msgdb overflow,$;代碼段mov cx,countmov ax,0mov bx,offset parrayagain:add ax,bxjnc nextmov dx,offset

27、 msgmov ah,9int 21h;顯示溢出信息jmp done;然后,跳出循環(huán)體next:add bx,2loop againmov wordsum,axdone:3.25 編程把個16位無符號二進制數(shù)轉換成為用8421BCD碼表示的5位十進制數(shù)。轉換算法可以是:用二進制數(shù)除以10000,商為“萬位”,再用余數(shù)除以1000,得到“千位”;依次用余數(shù)除以l00、10和l,得到“百位”、“十位”和“個位”。;wjxt325.asm .model small .stack 256 .data arraydw ?;源字數(shù)據(jù) dbcddb 5 dup(?);五位bcd結果,高對高低對低 .code

28、 .startup mov dx, array;取源數(shù)據(jù)(余數(shù)) mov bx, 10000;除數(shù) mov cx, 10;除數(shù)系數(shù) mov si, 4;目的數(shù)據(jù)高位位移量 again:mov ax, dx;dx.ax中存放被除數(shù) mov dx, 0div bx;除于bx,商ax,余數(shù)dx mov dbcdsi, al;商10,存結果 push dx;暫存余數(shù)mov ax, bx;除數(shù)除于10 mov dx,0div cx;dx.ax除于cx,商ax、余數(shù)0存在dx mov bx, ax;bx是除數(shù) pop dxdec si;目的數(shù)據(jù)位移量減1jnz againmov dbcd, dl;存?zhèn)€位數(shù)

29、( 10 ) .exit 0end3.26 解:(1)匯編語言中,子程序要用一對過程偽指令PROC和ENDP聲明,格式如下:過程名PROC NEAR|FAR;過程體過程名ENDP(2)保護用到的寄存器內容,以便子程序返回時進行相應的恢復。(3)改錯:crazyprocpishbxpushcxxorax,axxordx,dxagain:adda,bxadcdx,0incbxincbxloopagainpopcxpopbx3.27 解(不需調用HTOASC子程序):again:mov ah,1int 21hcmp al,1bh;ESC的ASCII碼是1bhje donemov dl,almov a

30、h,2int 21h;是大寫字母則轉換為小寫字母jmp againdone:3.28 解答:asctobprocpush cxand dh,0fh;先轉換十位數(shù)shl dh,1;十位數(shù)乘以10(采用移位指令)mov ch,dhshl dh,1shl dh,1add dh,chand dl,0fh;轉換個位數(shù)add dh,dl;十位數(shù)加個位數(shù)mov al,dh;設置出口參數(shù)pop cxretasctobendp3.29 解:DIPASCproc;入口參數(shù):AL要顯示的一個16進制數(shù)push cxpush dxpush axmov cl,4;轉換高位shr al,clcall HTOASCmov

31、dl,al;顯示mov ah,2int 21hpop ax;轉換低位call HTOASCmov dl,al;顯示mov ah,2int 21hmov dl,H;顯示一個字母“H”mov ah,2int 21hpop dxpop cxretDIPASCendpHTOASCproc;將AL低4位表達的一位16進制數(shù)轉換為ASCII碼and al,0fhcmp al,9jbe htoasc1add al,37h;是0AH0FH,加37H轉換為ASCII碼ret;子程序返回htoasc1:add al,30h;是09,加30H轉換為ASCII碼ret;子程序返回HTOASCendp3.30 解:lu

32、caseprocpush bxmov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0:cmp byte ptr bx,0je donecmp byte ptr bx,Ajb next0cmp byte ptr bx,Zja next0add byte ptr bx,20hnext0:inc bxjmp case0case1:cmp byte ptr bx,0je donecmp byte ptr bx,ajb next1cmp byte ptr bx,zja next1sub byte

33、ptr bx,20hnext1:inc bxjmp case1case2:cmp byte ptr bx,0je donecmp byte ptr bx,Ajb next2cmp byte ptr bx,Zja next20add byte ptr bx,20hjmp next2next20:cmp byte ptr bx,ajb next2cmp byte ptr bx,zja next2sub byte ptr bx,20hnext2:inc bxjmp case2done:pop bxretlucaseendp3.31 解:(1)用寄存器傳遞參數(shù):最簡單和常用的參數(shù)傳遞方法是通過寄存器,

34、只要把參數(shù)存于約定的寄存器中就可以了由于通用寄存器個數(shù)有限,這種方法對少量數(shù)據(jù)可以直接傳遞數(shù)值,而對大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護和恢復,帶有入口參數(shù)的寄存器可以保護、也可以不保護,但最好能夠保持一致(2)用共享變量傳遞參數(shù)子程序和主程序使用同一個變量名存取數(shù)據(jù)就是利用共享變量(全局變量)進行參數(shù)傳遞如果變量定義和使用不在同一個源程序中,需要利用PUBLIC、EXTREN聲明如果主程序還要利用原來的變量值,則需要保護和恢復利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)(3)用堆棧傳遞參數(shù)參數(shù)傳遞還可以

35、通過堆棧這個臨時存儲區(qū)。主程序將入口參數(shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序將出口參數(shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語言與高級語言混合編程時的常規(guī)方法3.32 解:方法:主程序將入口參數(shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序將出口參數(shù)壓入堆棧,主程序彈出堆棧取得它們注意:壓棧與彈棧必須要一一對應。3.33 解:方法1:neg32proc;入口參數(shù):DX.AX32位有符號數(shù)neg ax;實現(xiàn)0DX.AX功能neg dx sbb dx,0;這條指令也可以用dec dx代替retneg32endp;出口參數(shù):DX.AX32位有符號

36、數(shù)的補碼方法2:neg32proc;入口參數(shù):DX.AX32位有符號數(shù)not ax;實現(xiàn)DX.AX求反加1not dx add ax,1adc dx,0retneg32endp;出口參數(shù):DX.AX32位有符號數(shù)的補碼3.34 解:;數(shù)據(jù)段arraydb 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;數(shù)組countequ $-array;數(shù)組元素個數(shù)resultdb ?;校驗和;代碼段mov bx,offset array;BX數(shù)組的偏移地址mov cx,count;CX數(shù)組的元素個數(shù)call checksum;調用求和過程mov result,al;處理

37、出口參數(shù)mov ax,4c00hint 21h;計算字節(jié)校驗和的通用過程;入口參數(shù):DS:BX數(shù)組的段地址:偏移地址,CX元素個數(shù);出口參數(shù):AL校驗和;說明:除AX/BX/CX外,不影響其他寄存器checksumprocxor al,al;累加器清0sum:add al,bx;求和inc bx;指向下一個字節(jié)loop sumretchecksumendpend3.35 解:.model small.stack.datawdatadw 34abh.code.startupmov ax,wdatacall dispa.exit 0;dispaprocpush cxpush dxmov cl,4m

38、ov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxretdispaendp;dldispprocpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend.model small.stack.datawdatadw 34abhwordtempdw ?.code.star

39、tupmov ax,wdatamov wordtemp,axcall dispa.exit 0;dispaprocpush cxpush dxmov cl,4mov dl,byte ptr wordtemp+1shr dl,clcall dldispmov dl,byte ptr wordtemp+1and dl,0fhcall dldispmov dl,byte ptr wordtempshr dl,clcall dldispmov dl,byte ptr wordtempand dl,0fhcall dldisppop dxpop cxretdispaendp;dldispprocpush

40、 axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend.model small.stack.datawdatadw 34abh.code.startuppush wdatacall dispapop ax;add sp,2.exit 0;dispaprocpush bpmov bp,sppush axpush cxpush dxmov ax,bp+4mov cl,4mov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldi

41、spmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxpop axpop bpretdispaendp;dldispprocpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend3.36 解: 如果利用共享變量傳遞函數(shù),且變量定義和使用不在同一個源程序中,需要利用PUBLIC、EXTERN聲明。3.37 解: (1)宏定義由一對宏匯編偽指令MACRO和ENDM來完成,格式如下:宏

42、名MACRO 形參表;宏定義體ENDM宏定義之后就可以使用它,即宏調用:宏名 實參表 (2)宏調用的格式同一般指令一樣:在使用宏指令的位置寫下宏名,后跟實體參數(shù);如果有多個參數(shù),應按形參順序填入實參,也用逗號分隔 (3)宏展開:在匯編時,宏指令被匯編程序用對應的代碼序列替代,這就是宏展開 宏展開的具體過程是:當匯編程序掃描源程序遇到已有定義的宏調用時,即用相應的宏定義體完全替代源程序的宏指令,同時用位置匹配的實參對形參進行取代3.38 解: 宏調用的參數(shù)通過形參、實參結合實現(xiàn)傳遞,簡捷直觀、靈活多變。宏匯編的一大特色是它的參數(shù)。宏定義時既可以無參數(shù),也可以有一個或多個參數(shù);宏調用時實參的形式也

43、非常靈活,可以是常數(shù)、變量、存儲單元、指令(操作碼)或它們的一部分,也可以是表達式;只要宏展開后符合匯編語言的語法規(guī)則即可。3.39 解: 宏:僅是源程序級的簡化:宏調用在匯編時進行程序語句的展開,不需要返回;不減小目標程序,執(zhí)行速度沒有改變通過形參、實參結合實現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變 子程序:還是目標程序級的簡化:子程序調用在執(zhí)行時由CALL指令轉向、RET指令返回;形成的目標代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲單元或堆棧等傳遞參數(shù) 選擇:宏與子程序具有各自的特點,程序員應該根據(jù)具體問題選擇使用那種方法。通常,當程序段較短或要求較快執(zhí)行時,應選用宏;當程序段較長或為減小目標代碼時

44、,要選用子程序3.40 編寫一個宏指令move doprnd,soprnd,它實現(xiàn)任意尋址方式的字量源操作數(shù)soprnd送到目的操作數(shù)doprnd,包括存儲單元到存儲單元的傳送功能。答:movemacro doprnd,soprndmov ax,soprndmov doprnd,axendm3.41 定義一個宏logical,用它代表4條邏輯運算指令:and/or/xor/test。注意需要利用3個形式參數(shù),并給出一個宏調用以及對應宏展開的例子。答:logicalmacro lcode,dopd,sopdlcode dopd,sopdendm例如,如果使用“and ax,bx”指令,可以利用該

45、宏定義,寫出宏指令如下:logical and,ax,bx3.42 解:utolmacrolocal nextcmp al,A;小于“A”不轉換jb nextcmp al,Z;大于“A”不轉換ja nextadd al,20h;是大寫字母則轉換為小寫字母next:endm3.43 定義一個宏movestr strn,dstr,sstr,它將strn個字符從一個字符區(qū)sstr傳送到另一個字符區(qū)dstr解:(假設它們都在數(shù)據(jù)段)movestrmacro strn,dstr,sstrmov cx,dsmov es,cxmov cx,strnmov di,offset dstrmov si,offse

46、t sstrcldrep movsb;重復傳送ES:DIDS:SIendm第四章4.120;65536;擴展板4.4總線操作周期中,8088在第三個時鐘周期的前沿測試READY引腳,若無效,表明被訪問的設備與CPU操作不同步,CPU插入等待周期。4.5最小組態(tài)模式用于小規(guī)模系統(tǒng),MN/MX*接高電平,分時復用引腳是:,當MN/MX*接低電平,8088構成最大組態(tài)模式,應用大規(guī)模應用程序。4.6引腳三態(tài)能力主要針對引腳輸出信號狀態(tài):高電平、低電平和高阻。輸出高阻意味著芯片放棄對引腳的控制。這樣它所連接的設備就可以接管該引腳及連接導線的控制權。4.7RESET:復位請求,高電平有效時,CPU回到初

47、始狀態(tài)。HOLD:總線請求,高電平有效時,其他總線主控設備向CPU申請占用總線。NMI:不可屏蔽中斷請求。外界向CPU申請不可屏蔽中斷。INTR:可屏蔽中斷請求。高電平有效時,中斷請求設備向CPU申請可屏蔽中斷。4.10(1)T1周期,CPU進行讀操作。 (2)T2-T4期間,CPU對數(shù)據(jù)總線輸出高阻態(tài),選通存儲器或I/O接口,向CPU傳送數(shù)據(jù)。(3)T4的下降沿,CPU對數(shù)據(jù)總線采樣。4.15三態(tài)透明鎖存器指芯片具有三態(tài)輸出能力。當G有效,允許數(shù)據(jù)輸出,否則不允許。當?shù)刂份敵龆薉E*無效,說明不允許CPU向總線輸出地址。4.16數(shù)據(jù)收發(fā)器指向兩個方向驅動數(shù)據(jù)。74LS245的G*標示輸出控制端,DIR標示方向控制端。4.17(1)8086是真正的16位微處理器。8088的數(shù)據(jù)總線只有8位;(2)8086指令隊列長度為4字節(jié),8088為6字節(jié);(3)最小組態(tài)下,8088選擇訪問對象的信號為IO/M*,8086為M/IO*(4)8086數(shù)據(jù)存儲按照16位數(shù)據(jù)寬度組織,由奇偶兩個對稱的存儲器組織,提高訪問效率。第五章5.1 解:主存的作用:保存正在使用的、處于活動狀態(tài)的程序和數(shù)據(jù)。輔存的作用:長期保存程序文件和數(shù)據(jù)文件

溫馨提示

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

評論

0/150

提交評論