版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第一章1.1 解:五代,詳細(xì)見書1.2 解: 微型計(jì)算機(jī):以大規(guī)模、超大規(guī)模集成電路為主要部件,以集成了計(jì)算機(jī)主要部件控制器和運(yùn)算器的微處理器為核心,所構(gòu)造出的計(jì)算機(jī)系統(tǒng) 。PC機(jī):PC(Personal Computer)機(jī)就是面向個(gè)人單獨(dú)使用的一類微機(jī) 。單片機(jī):用于控制的微處理器芯片,內(nèi)部除CPU外還集成了計(jì)算機(jī)的其他一些主要部件,如:ROM、RAM、定時(shí)器、并行接口、串行接口,有的芯片還集成了A/D、D/A轉(zhuǎn)換電路等。 數(shù)字信號(hào)處理器DSP:主要面向大流量數(shù)字信號(hào)的實(shí)時(shí)處理,在宿主系統(tǒng)中充當(dāng)數(shù)據(jù)處理中心,在網(wǎng)絡(luò)通信、多媒體應(yīng)用等領(lǐng)域正得到越來越多的應(yīng)用1.3 解:微機(jī)主要有存儲(chǔ)器、I/
2、O設(shè)備和I/O接口、CPU、系統(tǒng)總線、操作系統(tǒng)和應(yīng)用軟件組成,各部分功能如下:CPU:統(tǒng)一協(xié)調(diào)和控制系統(tǒng)中的各個(gè)部件系統(tǒng)總線:傳送信息存儲(chǔ)器:存放程序和數(shù)據(jù)I/O設(shè)備:實(shí)現(xiàn)微機(jī)的輸入輸出功能I/O接口:I/O設(shè)備與CPU的橋梁操作系統(tǒng):管理系統(tǒng)所有的軟硬件資源1.4 解:系統(tǒng)總線:傳遞信息的一組公用導(dǎo)線,CPU通過它們與存儲(chǔ)器和I/O設(shè)備進(jìn)行信息交換 。好處:組態(tài)靈活、擴(kuò)展方便 三組信號(hào)線:數(shù)據(jù)總線、地址總線和控制總線 。其使用特點(diǎn)是:在某一時(shí)刻,只能由一個(gè)總線主控設(shè)備來控制系統(tǒng)總線,只能有一個(gè)發(fā)送者向總線發(fā)送信號(hào);但可以有多個(gè)設(shè)備從總線上同時(shí)獲得信號(hào)。1.5解:(1)用于數(shù)值計(jì)算、數(shù)據(jù)處理及
3、信息管理方向。采用通用微機(jī),要求有較快的工作速度、較高的運(yùn)算精度、較大的內(nèi)存容量和較完備的輸入輸出設(shè)備,為用戶提供方便友好的操作界面和簡便快捷的維護(hù)、擴(kuò)充手段。(2)用于過程控制及嵌人應(yīng)用方向。采用控制類微機(jī),要求能抵抗各種干擾、適應(yīng)現(xiàn)場的惡劣環(huán)境、確保長時(shí)間穩(wěn)定地工作,要求其實(shí)時(shí)性要好、強(qiáng)調(diào)其體積要小、便攜式應(yīng)用強(qiáng)調(diào)其省電。1.6 解:1.7 解: I/O通道:位于CPU和設(shè)備控制器之間,其目的是承擔(dān)一些原來由CPU處理的I/O任務(wù),從而把CPU從繁雜的I/O任務(wù)中解脫出來。由10根信號(hào)線組成(A9-A0)。1.8解: BIOS:基本輸入輸出系統(tǒng)。主要功能:用來驅(qū)動(dòng)和管理諸如鍵盤、顯示器、打
4、印機(jī)、磁盤、時(shí)鐘、串行通信接口等基本的輸入輸出設(shè)備1.9 解:基本RAM區(qū):640KB保留RAM區(qū):128KB擴(kuò)展ROM區(qū):128KB基本ROM區(qū):128KB1.10 解:(1)、數(shù)用來直接表征量的大小,包括:定點(diǎn)數(shù)、浮點(diǎn)數(shù)。(2)、碼用來指代某個(gè)事物或事物的某種狀態(tài)屬性,包括:二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制。區(qū)別:使用場合不同,詳見P16.1.11 解:(1)(2)(3)1.12 解:原碼 反碼 補(bǔ)碼+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 解:無符號(hào)數(shù):70D補(bǔ)碼有符號(hào)數(shù):70DBCD碼:46DASCII:F1.15 解:1)、相加后若出現(xiàn)和大于9,則將和減去10后再向高位進(jìn)12)、若出現(xiàn)組間進(jìn)位,則將低位加61.16 解:詳見課本16頁。1.17 解:C3 40 20 001.18 解:5050H十進(jìn)制值5080二進(jìn)制十六進(jìn)制二進(jìn)制十六進(jìn)制0011 0010B32H0101 0000B50H1.19 解:D:44Hd:64HCR:0DHLF:0AH0:30HSP:20HNUL:00H1.20 解:國標(biāo)碼:36 5
6、0H機(jī)內(nèi)碼:B6 B0H第二章21算術(shù)邏輯單元ALU、寄存器組和控制器;總線接口單元BIU:管理8088與系統(tǒng)總線的接口負(fù)責(zé)cpu對(duì)接口和外設(shè)進(jìn)行訪問執(zhí)行單元EU:負(fù)責(zé)指令譯碼、執(zhí)行和數(shù)據(jù)運(yùn)算;8位cpu在指令譯碼前必須等待取指令操作的完成,8088中需要譯碼的指令已經(jīng)取到了指令隊(duì)列,不需要等待取指令。而取指令是cpu最為頻繁的操作,因此8088的結(jié)構(gòu)和操作方式節(jié)省了大量等待時(shí)間,比8位cpu節(jié)省了時(shí)間,提高了性能。228個(gè)8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL;8個(gè)16位寄存器:累加器AX、基址寄存器BX、計(jì)數(shù)器CX、數(shù)據(jù)寄存器DX、源地址寄存器SI、目的地址寄存器DI、
7、基址指針BP、堆棧指針SP。23標(biāo)志用于反映指令執(zhí)行結(jié)果或者控制指令執(zhí)行形式。狀態(tài)標(biāo)志用于記錄程序運(yùn)行結(jié)果的狀態(tài)信息;控制標(biāo)志用于控制指令執(zhí)行的形式。24例:有運(yùn)算:3AH+7CH=B6H 作為無符號(hào)數(shù)運(yùn)算,沒有進(jìn)位,CF=0; 作為有符號(hào)數(shù)運(yùn)算,結(jié)果超出范圍,OF=1.2.58088中每個(gè)存儲(chǔ)單元有唯一的20位地址,稱為物理地址。處理器通過總線存取存儲(chǔ)器數(shù)據(jù)時(shí),采用這個(gè)物理地址。在用戶編程過程中采用的“段地址:偏移地址”的形式稱為邏輯地址。將邏輯地址中的段地址左移4位,加上偏移地址就得到物理地址。1MB最多能分成65536個(gè)邏輯段。26 代碼段:存放程序的指令序列; 堆棧段:確定堆棧所在的主
8、存儲(chǔ)區(qū); 數(shù)據(jù)段:存放當(dāng)前運(yùn)行程序的數(shù)據(jù); 附加段:附加數(shù)據(jù)段,用于數(shù)據(jù)保存。另外串操作指令將其作為目的操作數(shù)的存放區(qū)。278088的存儲(chǔ)空間分段管理,程序設(shè)計(jì)時(shí)采用邏輯地址。由于段地址在默認(rèn)的或指定的段寄存器中,所以只需要偏移地址,稱為有效地址EA.操作數(shù)在主存中有以下幾種尋址方式:直接尋址、寄存器間接尋址、寄存器相對(duì)尋址、基址變址尋址、相對(duì)基址變址尋址。28(1)立即數(shù)尋址 ax:1200H(2)寄存器尋址 ax:0100H(3)存儲(chǔ)器直接尋址 ax:4C2AH(4)寄存器間接尋址 ax:3412H(5)寄存器間接尋址 ax:4C2AH(6)基址變址尋址 ax:7856H(7)相對(duì)基址變址
9、尋址 ax:65B7H29(1)cx為字寄存器,dl為字節(jié)寄存器,類型不匹配。(2)mov指令的目的操作數(shù)只能是寄存器或者主存單元,ip是指針。(3)不允許立即數(shù)到段寄存器的傳送。(4)不允許段寄存器之間的直接傳送。(5)數(shù)據(jù)溢出。(6)sp不能用于寄存器間接尋址。(7)格式不對(duì)。應(yīng)為: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運(yùn)算公式:。商存儲(chǔ)在ax,余數(shù)存儲(chǔ)在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相對(duì)尋址方式、直接尋址方式、間接尋址方式。216(1)1256H(2)3280H217(1)ax=1E1EH(2)al的D0、D7位不全為0(3)cx<64H218執(zhí)行65536次。219功能:將數(shù)組中每個(gè)字元素相加,結(jié)果存儲(chǔ)于total。220(1)lea si,
12、string 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 a
13、gain2.21Htoasc proc Mov bl,al Mov al,ah Mov bh,10 Mul bh And ax,00FFH Add al,blHtoend: retHtoasc endp2.22計(jì)算機(jī)系統(tǒng)利用中斷為用戶提供硬件設(shè)備驅(qū)動(dòng)程序。在IBM-PC系列微機(jī)中,基本輸入輸出系統(tǒng)ROM-BIOS和DOS都提供了豐富的中斷服務(wù)程序,稱為系統(tǒng)功能調(diào)用。調(diào)用步驟(1)AH中設(shè)置系統(tǒng)功能調(diào)用號(hào) (2)在指定寄存器中設(shè)置入口參數(shù) (3)使用中斷調(diào)用指令執(zhí)行功能調(diào)用 (4)根據(jù)出口參數(shù)分析調(diào)用情況223Htoasc proc And al,0FH Add al,90H Daa Adc a
14、l,40H 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
15、Jb disp 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)為基礎(chǔ)的低級(jí)程序設(shè)計(jì)語言,它采用助記符表達(dá)指令操作碼,采用標(biāo)識(shí)符號(hào)表示指令操作數(shù),可以直接、有效地控制計(jì)算機(jī)硬件,因而容易創(chuàng)建代碼序列短小、運(yùn)行快速的可執(zhí)行程序3.2 解:(1)完整的匯編語言源程序由段組成(2)一個(gè)匯編語言源程序可以包含若干個(gè)代
16、碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列(3)需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起始點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)(4)所有的可執(zhí)行性語句必須位于某一個(gè)代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)(5)通常,程序還需要一個(gè)堆棧段3.3 解:存儲(chǔ)模式特 點(diǎn)TINYCOM類型程序,只有一個(gè)小于64KB的邏輯段(MASM 6.x支持)SMALL小應(yīng)用程序,只有一個(gè)代碼段和一個(gè)數(shù)據(jù)段(含堆棧段),每段不大于64KBCOMPACT代碼少、數(shù)據(jù)多的程序,只有一個(gè)代碼段,但有多個(gè)數(shù)據(jù)段MEDIUM代碼多、數(shù)據(jù)少的程序,可有多個(gè)代碼段,只有一個(gè)數(shù)據(jù)段LARGE大應(yīng)用程序,可有多個(gè)代
17、碼段和多個(gè)數(shù)據(jù)段(靜態(tài)數(shù)據(jù)小于64KB)HUGE更大應(yīng)用程序,可有多個(gè)代碼段和多個(gè)數(shù)據(jù)段(對(duì)靜態(tài)數(shù)據(jù)沒有限制)FLAT32位應(yīng)用程序,運(yùn)行在32位80x86CPU和Windows 9x或NT環(huán)境3.4 解:開始位置:用標(biāo)號(hào)指明返回DOS:利用DOS功能調(diào)用的4CH子功能來實(shí)現(xiàn)匯編停止:執(zhí)行到一條END偽指令時(shí),停止匯編3.5 解:段定位、段組合和段類型。3.6 解:stack segment stackdb 1024(0)stack endsdata segment string db 'Hello,Assembly!',0dH,0aH,$data ends code segm
18、ent 'code'assume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7 解:(1). EXE程序程序可以有多個(gè)代碼段和多個(gè)數(shù)據(jù)段,程序長度可以超過64KB通常生成EXE結(jié)構(gòu)的可執(zhí)行程序(2). COM程序只有一個(gè)邏輯段,程序長度不超過64KB需要滿足一定條件才能生成COM結(jié)構(gòu)的可執(zhí)行程序(MASM 6.x需要采用TINY模式)3.8 解:符號(hào)定義偽指令有“等價(jià)EQU”和“等號(hào)”:符號(hào)名 EQU 數(shù)值表達(dá)式符號(hào)名 EQU <字符串>
19、 符號(hào)名 數(shù)值表達(dá)式EQU用于數(shù)值等價(jià)時(shí)不能重復(fù)定義符號(hào)名,但“”允許有重復(fù)賦值。例如:X= 7;等效于:X equ 7X= X+5;“X EQU X+5”是錯(cuò)誤的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 Computer'my2b db 20my3b db 14hmy4b db 00010100
20、bmy5w dw 20 dup(?)my6c = 100my7c = <'Personal Computer'>3.12 解:利用定位偽指令控制,如org,even,align3.13 解:包括邏輯地址和類型兩種屬性。3.14 解:;數(shù)據(jù)段org 100hvarwdw1234h,5678hvarbdb3,4varddd12345678hbuffdd10dup(?)messdb'Hello';代碼段movax,offsetvarb+ offsetmessmovax,typebuff+ typemess+typevardmovax,sizeofvarw+
21、 sizeofbuff+ sizeof messmovax,lengthofvarw+ lengthofvard3.15 解:(1) 1000超過一個(gè)字節(jié)所能表達(dá)的最大整數(shù)(2)SI應(yīng)為偶數(shù)(3)兩個(gè)內(nèi)存單元不能直接運(yùn)算(4)應(yīng)改為al+1(5)條件轉(zhuǎn)移指令后面應(yīng)接標(biāo)號(hào),而不是變量3.16 解:mov ah,1;只允許輸入小寫字母int 21hsub al,20h;轉(zhuǎn)換為大寫字母mov dl,almov ah,2int 21h;顯示3.17 解:mov bx,offset LEDtablemov al,lednumxlat3.18 解:mov ax, bufXcmp ax, bufYjae d
22、onemov ax, bufYdone:mov bufZ, ax3.19 解:.model small.stack.databufXdw -7signXdb ?.code.startupcmp 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 解:;代碼段mo
23、v al,numbermov bx,0;BX記錄為1的位數(shù)restart:cmp al,0;AL0結(jié)束jz doneagain:shr al,1;最低位右移進(jìn)入CFjc next;為1,轉(zhuǎn)移inc bx;不為1,繼續(xù)jmp againnext:push axpush bxshl bx,1;位數(shù)乘以2(偏移地址要用2個(gè)字節(jié)單元)jmp addrsbx;間接轉(zhuǎn)移:IPtableBX;以下是各個(gè)處理程序段fun0:mov dl,'0'jmp dispfun1:mov dl,'1'jmp dispfun2:mov dl,'2'jmp dispfun3:m
24、ov dl,'3'jmp dispfun4:mov dl,'4'jmp dispfun5:mov dl,'5'jmp dispfun6:mov dl,'6'jmp dispfun7:mov dl,'7'jmp disp;disp:mov ah,2;顯示一個(gè)字符int 21hpop bxpop axjmp restartdone: 3.22 編制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10個(gè)字節(jié)數(shù)據(jù)之和,并將結(jié)果存入字節(jié)變量SUM中(不考慮溢出和進(jìn)位)。;wjxt
25、322.asm.model small.stack.datab_datadb 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始數(shù)據(jù)numequ 10;數(shù)據(jù)個(gè)數(shù)sumdb ?;預(yù)留結(jié)果單元.code.startupxor si, si;位移量清零xor al, al;取第一個(gè)數(shù)mov cx, num;累加次數(shù)again:add al, b_datasi;累加inc si;指向下一個(gè)數(shù)loop again;如未完,繼續(xù)累加mov sum, al;完了,存結(jié)果.exit 0end3.23 求主存0040h:0開始的一個(gè)64KB物理段中共有多少個(gè)空格?; wj
26、xt323.asm.model small.codestart:mov ax,0040h;送段地址mov ds, axmov si, 0;偏移地址mov cx, si;計(jì)數(shù)(循環(huán)次數(shù))xor ax, ax;空格計(jì)數(shù)器清零again:cmp byte ptr si, 20h;與空格的ASCII碼比較jne next;不是空格,轉(zhuǎn)inc ax;是空格,空格數(shù)加1next:inc si;修改地址指針loop again;cxcx1,如cx0 退出循環(huán).exit 0end start3.24 編寫計(jì)算100個(gè)16位正整數(shù)之和的程序。如果和不超過16位字的范圍(65535),則保存其和到wordsum,
27、如超過則顯示overflow。答:;數(shù)據(jù)段countequ 100parraydw count dup(?);假設(shè)有100個(gè)數(shù)據(jù)wordsumdw 0msgdb overflow,$;代碼段mov cx,countmov ax,0mov bx,offset parrayagain:add ax,bxjnc nextmov dx,offset msgmov ah,9int 21h;顯示溢出信息jmp done;然后,跳出循環(huán)體next:add bx,2loop againmov wordsum,axdone:3.25 編程把個(gè)16位無符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換成為用8421BCD碼表示的5位十進(jìn)制數(shù)。轉(zhuǎn)換
28、算法可以是:用二進(jìn)制數(shù)除以10000,商為“萬位”,再用余數(shù)除以1000,得到“千位”;依次用余數(shù)除以l00、10和l,得到“百位”、“十位”和“個(gè)位”。;wjxt325.asm .model small .stack 256 .data arraydw ?;源字?jǐn)?shù)據(jù) dbcddb 5 dup(?);五位bcd結(jié)果,高對(duì)高低對(duì)低 .code .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 b
29、x;除于bx,商ax,余數(shù)dx mov dbcdsi, al;商10,存結(jié)果 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ù)( < 10 ) .exit 0end3.26 解:(1)匯編語言中,子程序要用一對(duì)過程偽指令PROC和ENDP聲明,格式如下:過程名PROC NEAR|FAR;過程體過程名ENDP(2)保護(hù)用到的寄存器內(nèi)容,以便子程序返回時(shí)進(jìn)行相應(yīng)的恢復(fù)。(3)改錯(cuò)
30、:crazyprocpishbxpushcxxorax,axxordx,dxagain:adda,bxadcdx,0incbxincbxloopagainpopcxpopbx3.27 解(不需調(diào)用HTOASC子程序):again:mov ah,1int 21hcmp al,1bh;ESC的ASCII碼是1bhje donemov dl,almov ah,2int 21h;是大寫字母則轉(zhuǎn)換為小寫字母jmp againdone:3.28 解答:asctobprocpush cxand dh,0fh;先轉(zhuǎn)換十位數(shù)shl dh,1;十位數(shù)乘以10(采用移位指令)mov ch,dhshl dh,1shl
31、 dh,1add dh,chand dl,0fh;轉(zhuǎn)換個(gè)位數(shù)add dh,dl;十位數(shù)加個(gè)位數(shù)mov al,dh;設(shè)置出口參數(shù)pop cxretasctobendp3.29 解:DIPASCproc;入口參數(shù):AL要顯示的一個(gè)16進(jìn)制數(shù)push cxpush dxpush axmov cl,4;轉(zhuǎn)換高位shr al,clcall HTOASCmov dl,al;顯示mov ah,2int 21hpop ax;轉(zhuǎn)換低位call HTOASCmov dl,al;顯示mov ah,2int 21hmov dl,H;顯示一個(gè)字母“H”mov ah,2int 21hpop dxpop cxretDIPA
32、SCendpHTOASCproc;將AL低4位表達(dá)的一位16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼and al,0fhcmp al,9jbe htoasc1add al,37h;是0AH0FH,加37H轉(zhuǎn)換為ASCII碼ret;子程序返回htoasc1:add al,30h;是09,加30H轉(zhuǎn)換為ASCII碼ret;子程序返回HTOASCendp3.30 解:lucaseprocpush bxmov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0:cmp byte ptr bx,0je donecmp
33、 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 ptr bx,20hnext1:inc bxjmp case1case2:cmp byte ptr bx,0je donecmp byte ptr bx,Ajb next2cmp byte ptr bx,Zja next20add byte ptr
34、 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ù)傳遞方法是通過寄存器,只要把參數(shù)存于約定的寄存器中就可以了由于通用寄存器個(gè)數(shù)有限,這種方法對(duì)少量數(shù)據(jù)可以直接傳遞數(shù)值,而對(duì)大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護(hù)和恢復(fù),帶有入口參數(shù)的寄存器可以保護(hù)、也可以不保護(hù),但最好能夠保持一致(2)
35、用共享變量傳遞參數(shù)子程序和主程序使用同一個(gè)變量名存取數(shù)據(jù)就是利用共享變量(全局變量)進(jìn)行參數(shù)傳遞如果變量定義和使用不在同一個(gè)源程序中,需要利用PUBLIC、EXTREN聲明如果主程序還要利用原來的變量值,則需要保護(hù)和恢復(fù)利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個(gè)程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)(3)用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過堆棧這個(gè)臨時(shí)存儲(chǔ)區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語言與高級(jí)語言混合編程時(shí)的常規(guī)方法3.32 解:方法:主程序?qū)⑷?/p>
36、口參數(shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們注意:壓棧與彈棧必須要一一對(duì)應(yīng)。3.33 解:方法1:neg32proc;入口參數(shù):DX.AX32位有符號(hào)數(shù)neg ax;實(shí)現(xiàn)0DX.AX功能neg dx sbb dx,0;這條指令也可以用dec dx代替retneg32endp;出口參數(shù):DX.AX32位有符號(hào)數(shù)的補(bǔ)碼方法2:neg32proc;入口參數(shù):DX.AX32位有符號(hào)數(shù)not ax;實(shí)現(xiàn)DX.AX求反加1not dx add ax,1adc dx,0retneg32endp;出口參數(shù):DX.AX32位有符號(hào)數(shù)的補(bǔ)碼3.34 解:;數(shù)據(jù)段arra
37、ydb 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;數(shù)組countequ $-array;數(shù)組元素個(gè)數(shù)resultdb ?;校驗(yàn)和;代碼段mov bx,offset array;BX數(shù)組的偏移地址mov cx,count;CX數(shù)組的元素個(gè)數(shù)call checksum;調(diào)用求和過程mov result,al;處理出口參數(shù)mov ax,4c00hint 21h;計(jì)算字節(jié)校驗(yàn)和的通用過程;入口參數(shù):DS:BX數(shù)組的段地址:偏移地址,CX元素個(gè)數(shù);出口參數(shù):AL校驗(yàn)和;說明:除AX/BX/CX外,不影響其他寄存器checksumprocxor al,al;累加器
38、清0sum:add al,bx;求和inc bx;指向下一個(gè)字節(jié)loop sumretchecksumendpend3.35 解:.model small.stack.datawdatadw 34abh.code.startupmov ax,wdatacall dispa.exit 0;dispaprocpush cxpush dxmov cl,4mov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxp
39、op cxretdispaendp;dldispprocpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend.model small.stack.datawdatadw 34abhwordtempdw ?.code.startupmov ax,wdatamov wordtemp,axcall dispa.exit 0;dispaprocpush cxpush dxmov cl,4mov dl,byte ptr wordtemp+1shr dl,clcall dldis
40、pmov 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 axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend.model small.stack.datawdatadw 34abh.c
41、ode.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 dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxpop axpop bpretdispaendp;dldispprocpush axor dl,30h
42、cmp dl,39hjbe dldisp1add dl,7dldisp1:mov ah,2int 21hpop axretdldispendpend3.36 解: 如果利用共享變量傳遞函數(shù),且變量定義和使用不在同一個(gè)源程序中,需要利用PUBLIC、EXTERN聲明。3.37 解: (1)宏定義由一對(duì)宏匯編偽指令MACRO和ENDM來完成,格式如下:宏名MACRO 形參表;宏定義體ENDM宏定義之后就可以使用它,即宏調(diào)用:宏名 實(shí)參表 (2)宏調(diào)用的格式同一般指令一樣:在使用宏指令的位置寫下宏名,后跟實(shí)體參數(shù);如果有多個(gè)參數(shù),應(yīng)按形參順序填入實(shí)參,也用逗號(hào)分隔 (3)宏展開:在匯編時(shí),宏指令被匯
43、編程序用對(duì)應(yīng)的代碼序列替代,這就是宏展開 宏展開的具體過程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體完全替代源程序的宏指令,同時(shí)用位置匹配的實(shí)參對(duì)形參進(jìn)行取代3.38 解: 宏調(diào)用的參數(shù)通過形參、實(shí)參結(jié)合實(shí)現(xiàn)傳遞,簡捷直觀、靈活多變。宏匯編的一大特色是它的參數(shù)。宏定義時(shí)既可以無參數(shù),也可以有一個(gè)或多個(gè)參數(shù);宏調(diào)用時(shí)實(shí)參的形式也非常靈活,可以是常數(shù)、變量、存儲(chǔ)單元、指令(操作碼)或它們的一部分,也可以是表達(dá)式;只要宏展開后符合匯編語言的語法規(guī)則即可。3.39 解: 宏:僅是源程序級(jí)的簡化:宏調(diào)用在匯編時(shí)進(jìn)行程序語句的展開,不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒有改變通過形
44、參、實(shí)參結(jié)合實(shí)現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變 子程序:還是目標(biāo)程序級(jí)的簡化:子程序調(diào)用在執(zhí)行時(shí)由CALL指令轉(zhuǎn)向、RET指令返回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲(chǔ)單元或堆棧等傳遞參數(shù) 選擇:宏與子程序具有各自的特點(diǎn),程序員應(yīng)該根據(jù)具體問題選擇使用那種方法。通常,當(dāng)程序段較短或要求較快執(zhí)行時(shí),應(yīng)選用宏;當(dāng)程序段較長或?yàn)闇p小目標(biāo)代碼時(shí),要選用子程序3.40 編寫一個(gè)宏指令move doprnd,soprnd,它實(shí)現(xiàn)任意尋址方式的字量源操作數(shù)soprnd送到目的操作數(shù)doprnd,包括存儲(chǔ)單元到存儲(chǔ)單元的傳送功能。答:movemacro doprnd,soprndmov ax,s
45、oprndmov doprnd,axendm3.41 定義一個(gè)宏logical,用它代表4條邏輯運(yùn)算指令:and/or/xor/test。注意需要利用3個(gè)形式參數(shù),并給出一個(gè)宏調(diào)用以及對(duì)應(yīng)宏展開的例子。答:logicalmacro lcode,dopd,sopdlcode dopd,sopdendm例如,如果使用“and ax,bx”指令,可以利用該宏定義,寫出宏指令如下:logical and,ax,bx3.42 解:utolmacrolocal nextcmp al,A;小于“A”不轉(zhuǎn)換jb nextcmp al,Z;大于“A”不轉(zhuǎn)換ja nextadd al,20h;是大寫字母則轉(zhuǎn)換為小
46、寫字母next:endm3.43 定義一個(gè)宏movestr strn,dstr,sstr,它將strn個(gè)字符從一個(gè)字符區(qū)sstr傳送到另一個(gè)字符區(qū)dstr解:(假設(shè)它們都在數(shù)據(jù)段)movestrmacro strn,dstr,sstrmov cx,dsmov es,cxmov cx,strnmov di,offset dstrmov si,offset sstrcldrep movsb;重復(fù)傳送ES:DIDS:SIendm第四章4.120;65536;擴(kuò)展板4.4總線操作周期中,8088在第三個(gè)時(shí)鐘周期的前沿測(cè)試READY引腳,若無效,表明被訪問的設(shè)備與CPU操作不同步,CPU插入等待周期。4
47、.5最小組態(tài)模式用于小規(guī)模系統(tǒng),MN/MX*接高電平,分時(shí)復(fù)用引腳是:,當(dāng)MN/MX*接低電平,8088構(gòu)成最大組態(tài)模式,應(yīng)用大規(guī)模應(yīng)用程序。4.6引腳三態(tài)能力主要針對(duì)引腳輸出信號(hào)狀態(tài):高電平、低電平和高阻。輸出高阻意味著芯片放棄對(duì)引腳的控制。這樣它所連接的設(shè)備就可以接管該引腳及連接導(dǎo)線的控制權(quán)。4.7RESET:復(fù)位請(qǐng)求,高電平有效時(shí),CPU回到初始狀態(tài)。HOLD:總線請(qǐng)求,高電平有效時(shí),其他總線主控設(shè)備向CPU申請(qǐng)占用總線。NMI:不可屏蔽中斷請(qǐng)求。外界向CPU申請(qǐng)不可屏蔽中斷。INTR:可屏蔽中斷請(qǐng)求。高電平有效時(shí),中斷請(qǐng)求設(shè)備向CPU申請(qǐng)可屏蔽中斷。4.10(1)T1周期,CPU進(jìn)行讀
48、操作。 (2)T2-T4期間,CPU對(duì)數(shù)據(jù)總線輸出高阻態(tài),選通存儲(chǔ)器或I/O接口,向CPU傳送數(shù)據(jù)。(3)T4的下降沿,CPU對(duì)數(shù)據(jù)總線采樣。4.15三態(tài)透明鎖存器指芯片具有三態(tài)輸出能力。當(dāng)G有效,允許數(shù)據(jù)輸出,否則不允許。當(dāng)?shù)刂份敵龆薉E*無效,說明不允許CPU向總線輸出地址。4.16數(shù)據(jù)收發(fā)器指向兩個(gè)方向驅(qū)動(dòng)數(shù)據(jù)。74LS245的G*標(biāo)示輸出控制端,DIR標(biāo)示方向控制端。4.17(1)8086是真正的16位微處理器。8088的數(shù)據(jù)總線只有8位;(2)8086指令隊(duì)列長度為4字節(jié),8088為6字節(jié);(3)最小組態(tài)下,8088選擇訪問對(duì)象的信號(hào)為IO/M*,8086為M/IO*(4)8086數(shù)據(jù)存儲(chǔ)按照16位數(shù)據(jù)寬度組織,由奇偶兩個(gè)對(duì)稱的存儲(chǔ)器組織,提高訪問效率。第五章5.1 解:主存的作用:保存正在使用的、處于活動(dòng)狀態(tài)的程序和數(shù)據(jù)。輔存的作用:長期保存程序文件和數(shù)據(jù)文件,在需要時(shí)將
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能機(jī)器人研發(fā)及產(chǎn)業(yè)化合作協(xié)議
- 精準(zhǔn)醫(yī)療技術(shù)研發(fā)與轉(zhuǎn)讓合同
- 2024年城市公共交通系統(tǒng)優(yōu)化改進(jìn)研究合作合同
- 建筑設(shè)計(jì)施工合同
- 2025年度建筑工程發(fā)包合同范本新編2篇
- 2025年度農(nóng)田承包權(quán)評(píng)估合同范本
- 2025年度兩人合伙體育用品銷售合作協(xié)議范本2篇
- 2025年度農(nóng)產(chǎn)品電商平臺(tái)供應(yīng)鏈金融合作協(xié)議范本
- 2025年商業(yè)綜合體安全管理與保安人員聘用協(xié)議4篇
- 2025年度老年夫妻離婚協(xié)議書子女撫養(yǎng)權(quán)爭議解決2篇
- 鋼結(jié)構(gòu)施工管理培訓(xùn)課件
- 2024年度工程建設(shè)項(xiàng)目安全評(píng)價(jià)合同2篇
- 《飛機(jī)操縱面》課件
- 商業(yè)咨詢報(bào)告范文大全
- 自我發(fā)展與團(tuán)隊(duì)管理課件
- 《婦產(chǎn)科學(xué)》課件-17.盆腔器官脫垂
- 監(jiān)理報(bào)告范本
- 店鋪交割合同范例
- 大型活動(dòng)LED屏幕安全應(yīng)急預(yù)案
- 2024年內(nèi)蒙古包頭市中考道德與法治試卷
- 湖南省長沙市2024-2025學(xué)年高二上學(xué)期期中考試地理試卷(含答案)
評(píng)論
0/150
提交評(píng)論