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

下載本文檔

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

文檔簡介

8/32位微機原理、匯編語言及接口技術(shù)__錢曉捷_第2版_課后習(xí)題答案(JJ修改)118/32位微機原理、匯編語言及接口技術(shù)錢曉捷第2版課后習(xí)題答案(JJ修改)第一章1.1解:五代,詳細見書1.3解:微機主要有存儲器、I/O設(shè)備和I/O接口、CPU、系統(tǒng)總線、操作系統(tǒng)和應(yīng)用軟件組成,各部分功能如下:CPU:統(tǒng)一協(xié)調(diào)和控制系統(tǒng)中的各個部件系統(tǒng)總線:傳送信息存儲器:存放程序和數(shù)據(jù)I/O設(shè)備:實現(xiàn)微機的輸入輸出功能I/O接口:I/O設(shè)備與CPU的橋梁操作系統(tǒng):管理系統(tǒng)所有的軟硬件資源1.9解:基本RAM區(qū):640KB保留RAM區(qū):128KB擴展ROM區(qū):128KB基本ROM區(qū):128KB1.10解:(1)、數(shù)—用來直接表征量的大小,包括:定點數(shù)、浮點數(shù)。(2)、碼—用來指代某個事物或事物的某種狀態(tài)屬性,包括:二進制、八進制、十進制、十六進制。區(qū)別:使用場合不同,詳見P18.1.11解:(1)(2)(3)1.12解:原碼反碼補碼+37

00100101/25H

00100101/25H

00100101/25H-37

10100101/A5H

11011010/DAH

11011011/DBH1.13解:+37-3718位32位18位32位0025H00000025HFF5BHFFFFFF5BH1.14解:無符號數(shù):70D補碼有符號數(shù):70DBCD碼:46DASCII:F1.15解:1)、相加后若出現(xiàn)和大于9,則將和減去10后再向高位進12)、若出現(xiàn)組間進位,則將低位加61.18解:詳見課本18頁。1.17解:C34020001.18解:

5050H十進制值5080

二進制十六進制二進制十六進制

00110010B32H01010000B50H1.19解:D:44Hd:64HCR:0DHLF:0AH0:30HSP:20HNUL:00H1.20解:國標(biāo)碼:3650H機內(nèi)碼:B6B0H第二章2.1算術(shù)邏輯單元ALU、寄存器組和控制器;總線接口單元BIU:管理8088與系統(tǒng)總線的接口負責(zé)cpu對接口和外設(shè)進行訪問執(zhí)行單元EU:負責(zé)指令譯碼、執(zhí)行和數(shù)據(jù)運算;8位cpu在指令譯碼前必須等待取指令操作的完成,8088中需要譯碼的指令已經(jīng)取到了指令隊列,不需要等待取指令。而取指令是cpu最為頻繁的操作,因此8088的結(jié)構(gòu)和操作方式節(jié)省了大量等待時間,比8位cpu節(jié)省了時間,提高了性能。2.28個8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL;8個18位寄存器:累加器AX、基址寄存器BX、計數(shù)器CX、數(shù)據(jù)寄存器DX、源地址寄存器SI、目的地址寄存器DI、基址指針BP、堆棧指針SP。2.3標(biāo)志用于反映指令執(zhí)行結(jié)果或者控制指令執(zhí)行形式。狀態(tài)標(biāo)志用于記錄程序運行結(jié)果的狀態(tài)信息;控制標(biāo)志用于控制指令執(zhí)行的形式。2.4例:有運算:3AH+7CH=B6H作為無符號數(shù)運算,沒有進位,CF=0;作為有符號數(shù)運算,結(jié)果超出范圍,OF=1.2.58088中每個存儲單元有唯一的20位地址,稱為物理地址。處理器通過總線存取存儲器數(shù)據(jù)時,采用這個物理地址。在用戶編程過程中采用的“段地址:偏移地址”的形式稱為邏輯地址。將邏輯地址中的段地址左移4位,加上偏移地址就得到物理地址。1MB最多能分成65536個邏輯段。2.6代碼段:存放程序的指令序列;堆棧段:確定堆棧所在的主存儲區(qū);數(shù)據(jù)段:存放當(dāng)前運行程序的數(shù)據(jù);附加段:附加數(shù)據(jù)段,用于數(shù)據(jù)保存。另外串操作指令將其作為目的操作數(shù)的存放區(qū)。2.78088的存儲空間分段管理,程序設(shè)計時采用邏輯地址。因為段地址在默認的或指定的段寄存器中,所以只需要偏移地址,稱為有效地址EA.操作數(shù)在主存中有以下幾種尋址方式:直接尋址、寄存器間接尋址、寄存器相對尋址、基址變址尋址、相對基址變址尋址。2.8(1)立即數(shù)尋址ax:1200H(2)寄存器尋址ax:0100H(3)存儲器直接尋址ax:4C2AH(4)寄存器間接尋址ax:3412H(5)寄存器間接尋址ax:4C2AH(6)基址變址尋址ax:7856H(7)相對基址變址尋址ax:65B7H2.9(1)cx為字寄存器,dl為字節(jié)寄存器,類型不匹配。(2)mov指令的目的操作數(shù)只能是寄存器或者主存單元,ip是指針。(3)不允許立即數(shù)到段寄存器的傳送。(4)不允許段寄存器之間的直接傳送。(5)數(shù)據(jù)溢出。(6)sp不能用于寄存器間接尋址。(7)格式不對。應(yīng)為:movax,[bx+di](8)mov指令的操作數(shù)不能是立即數(shù)。2.10(1)bx得到table的偏移地址,bx=200H.(2)將立即數(shù)8送到al。(3)換碼,al=12H.2.11(1)al=89H(2)al=12H,cf=1,zf=0,sf=0,of=1,pf=1(3)al=0AFH,cf=0,zf=0,sf=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=12.12(1)adddx,bx(2)addal,[bx+si](3)addwordptr[bx+0B2H],cx(4)addwordptr[0520H],3412H(5)addal,0A0H2.13運算公式:。商存儲在ax,余數(shù)存儲在dx。2.14(1)ax=1470H(2)ax=1470H,cf=0,of=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相對尋址方式、直接尋址方式、間接尋址方式。2.18(1)1256H(2)3280H2.17(1)ax=1E1EH(2)al的D0、D7位不全為0(3)cx<64H2.18執(zhí)行65536次。2.19功能:將數(shù)組中每個字元素相加,結(jié)果存儲于total。2.20(1)leasi,stringMovdh,[si]Movdl,[si+5](2)movaxwordptrbuffer1Subaxwordptrbuffer2Movdxwordptrbuffer1+2Sbbdxwordptrbuffer2+2(3)testdx,0F000Hjzeveneven:movax,0(4)movcx,4again:sardx,1rcrax,1loopagain(5)movcx,100movsi,0again:moval,0FFHaddal,array[si]movarray[si],alincsiloopagain2.21Htoasc

procMovbl,alMoval,ahMovbh,10MulbhAndax,00FFHAddal,blHtoend:retHtoasc

endp2.22計算機系統(tǒng)利用中斷為用戶提供硬件設(shè)備驅(qū)動程序。在IBM-PC系列微機中,基本輸入輸出系統(tǒng)ROM-BIOS和DOS都提供了豐富的中斷服務(wù)程序,稱為系統(tǒng)功能調(diào)用。調(diào)用步驟(1)AH中設(shè)置系統(tǒng)功能調(diào)用號(2)在指定寄存器中設(shè)置入口參數(shù)(3)使用中斷調(diào)用指令執(zhí)行功能調(diào)用(4)根據(jù)出口參數(shù)分析調(diào)用情況2.23Htoasc

procAndal,0FHAddal,90HDaaAdcal,40HDaaMovah,02HMovdl,alInt21HRetHtoasc

endp2.24Numout

procXorah,ahAamAddax,3030HMovdl,ahMovah,02HInt21HMovdl,alMovah,02HInt31HRetNumout

endp2.25Msgkey

db”inputnumber0-9”,”$”Msgwrg

db”error”,”$”Movah,09HMovdx,offsetmsgkeyInt21HAgain:

movah,01HInt21HCmpal,30HJbdispCmpal,39HJadispMovdl,alMovah,02HInt21HJmpdoneDisp:

movdx,offsetmsgwrgMovah,09HInt21HJmpagainDone:

movah,02HMovdl,alInt21H第3章3.1解:匯編語言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級程序設(shè)計語言,它采用助記符表達指令操作碼,采用標(biāo)識符號表示指令操作數(shù),可以直接、有效地控制計算機硬件,因而容易創(chuàng)建代碼序列短小、運行快速的可執(zhí)行程序3.2

解:(1)完整的匯編語言源程序由段組成(2)一個匯編語言源程序可以包含若干個代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列(3)需獨立運行的程序必須包含一個代碼段,并指示程序執(zhí)行的起始點,一個程序只有一個起始點(4)所有的可執(zhí)行性語句必須位于某一個代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)(5)通常,程序還需要一個堆棧段3.3解:存儲模式特點TINYCOM類型程序,只有一個小于64KB的邏輯段(MASM6.x支持)SMALL小應(yīng)用程序,只有一個代碼段和一個數(shù)據(jù)段(含堆棧段),每段不大于64KBCOMPACT代碼少、數(shù)據(jù)多的程序,只有一個代碼段,但有多個數(shù)據(jù)段MEDIUM代碼多、數(shù)據(jù)少的程序,可有多個代碼段,只有一個數(shù)據(jù)段LARGE大應(yīng)用程序,可有多個代碼段和多個數(shù)據(jù)段(靜態(tài)數(shù)據(jù)小于64KB)HUGE更大應(yīng)用程序,可有多個代碼段和多個數(shù)據(jù)段(對靜態(tài)數(shù)據(jù)沒有限制)FLAT32位應(yīng)用程序,運行在32位80x86CPU和Windows9x或NT環(huán)境3.4解:開始位置:用標(biāo)號指明返回DOS:利用DOS功能調(diào)用的4CH子功能來實現(xiàn)匯編停止:執(zhí)行到一條END偽指令時,停止匯編3.5解:段定位、段組合和段類型。3.6解:stack

segment

stackdb

1024(0)stack

endsdata

segment

string

db

'Hello,Assembly!',0dH,0aH,‘$’data

endscode

segment

'code'assume

cs:code,ds:data,ss:stackstart:

mov

dx,offsetstringmov

ah,9int

21hcode

endsend

start3.7解:(1).EXE程序程序可以有多個代碼段和多個數(shù)據(jù)段,程序長度可以超過64KB通常生成EXE結(jié)構(gòu)的可執(zhí)行程序(2).COM程序只有一個邏輯段,程序長度不超過64KB需要滿足一定條件才能生成COM結(jié)構(gòu)的可執(zhí)行程序(MASM6.x需要采用TINY模式)3.8解:符號定義偽指令有“等價EQU”和“等號=”:符號名EQU數(shù)值表達式符號名EQU<字符串>符號名=數(shù)值表達式EQU用于數(shù)值等價時不能重復(fù)定義符號名,但“=”允許有重復(fù)賦值。例如:X=7;等效于:Xequ7X=X+5;“XEQUX+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解:.datamy1b

db

'Personal

Computer'my2b

db

20my3b

db

14hmy4b

db

00010100bmy5w

dw

20dup(?)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+sizeofbuff+sizeofmessmovax,lengthofvarw+lengthofvard3.15解:(1)1000超過一個字節(jié)所能表達的最大整數(shù)(2)SI應(yīng)為偶數(shù)(3)兩個內(nèi)存單元不能直接運算(4)應(yīng)改為[al+1](5)條件轉(zhuǎn)移指令后面應(yīng)接標(biāo)號,而不是變量3.18

解:movah,1;只允許輸入小寫字母int21hsubal,20h;轉(zhuǎn)換為大寫字母movdl,almovah,2int21h;顯示3.17

解:movbx,offsetLEDtablemoval,lednumxlat3.18

解:movax,bufXcmpax,bufYjaedonemovax,bufYdone:movbufZ,ax3.19

解:.modelsmall.stack.databufXdw-7signXdb?.code.startupcmpbufX,0;testbufX,80hjlnext;jnznextmovsignX,0jmpdonenext:movsignX,-1done:.exit0end3.20

解:movdl,’2’movax,bufXcmpax,bufYjenext1decdlnext1:cmpax,bufZjenext2decdlnext2:movah,2int21h3.21

解:;代碼段moval,numbermovbx,0;BX←記錄為1的位數(shù)restart:cmpal,0;AL=0結(jié)束jzdoneagain:shral,1;最低位右移進入CFjcnext;為1,轉(zhuǎn)移incbx;不為1,繼續(xù)jmpagainnext:pushaxpushbxshlbx,1;位數(shù)乘以2(偏移地址要用2個字節(jié)單元)jmpaddrs[bx];間接轉(zhuǎn)移:IP←[table+BX];以下是各個處理程序段fun0:movdl,'0'jmpdispfun1:movdl,'1'jmpdispfun2:movdl,'2'jmpdispfun3:movdl,'3'jmpdispfun4:movdl,'4'jmpdispfun5:movdl,'5'jmpdispfun6:movdl,'6'jmpdispfun7:movdl,'7'jmpdisp;disp:movah,2;顯示一個字符int21hpopbxpopaxjmprestartdone:…3.22

編制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10個字節(jié)數(shù)據(jù)之和,并將結(jié)果存入字節(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

?;預(yù)留結(jié)果單元.code.startupxorsi,si;位移量清零xoral,al;取第一個數(shù)movcx,num;累加次數(shù)again:addal,b_data[si];累加incsi;指向下一個數(shù)loopagain;如未完,繼續(xù)累加movsum,al;完了,存結(jié)果.exit0end3.23

求主存0040h:0開始的一個64KB物理段中共有多少個空格?;wjxt323.asm.modelsmall.codestart:movax,0040h;送段地址movds,axmovsi,0;偏移地址movcx,si;計數(shù)(循環(huán)次數(shù))xorax,ax;空格計數(shù)器清零again:cmpbyteptr[si],20h;與空格的ASCII碼比較jnenext;不是空格,轉(zhuǎn)incax;是空格,空格數(shù)加1next:incsi;修改地址指針loopagain;cx=cx-1,如cx=0退出循環(huán).exit0endstart3.24

編寫計算100個18位正整數(shù)之和的程序。如果和不超過18位字的范圍(65535),則保存其和到wordsum,如超過則顯示‘overflow’。答:;數(shù)據(jù)段countequ100parraydwcountdup(?);假設(shè)有100個數(shù)據(jù)wordsumdw0msgdb‘overflow’,’$’;代碼段movcx,countmovax,0movbx,offsetparrayagain:addax,[bx]jncnextmovdx,offsetmsgmovah,9int21h;顯示溢出信息jmpdone;然后,跳出循環(huán)體next:addbx,2loopagainmovwordsum,axdone:…3.25

編程把—個18位無符號二進制數(shù)轉(zhuǎn)換成為用8421BCD碼表示的5位十進制數(shù)。轉(zhuǎn)換算法可以是:用二進制數(shù)除以10000,商為“萬位”,再用余數(shù)除以1000,得到“千位”;依次用余數(shù)除以l00、10和l,得到“百位”、“十位”和“個位”。;wjxt325.asm.modelsmall.stack256.dataarraydw?;源字?jǐn)?shù)據(jù)dbcddb5dup(?);五位bcd結(jié)果,高對高低對低.code.startup

movdx,array;取源數(shù)據(jù)(余數(shù))movbx,10000;除數(shù)movcx,10;除數(shù)系數(shù)movsi,4;目的數(shù)據(jù)高位位移量again:movax,dx;dx.ax中存放被除數(shù)movdx,0divbx;除于bx,商ax,余數(shù)dxmovdbcd[si],al;商<10,存結(jié)果pushdx;暫存余數(shù)movax,bx;除數(shù)除于10movdx,0divcx;dx.ax除于cx,商ax、余數(shù)0存在dxmovbx,ax;bx是除數(shù)popdxdecsi;目的數(shù)據(jù)位移量減1jnzagainmovdbcd,dl;存?zhèn)€位數(shù)(<10).exit0end3.26解:(1)匯編語言中,子程序要用一對過程偽指令PROC和ENDP聲明,格式如下:過程名PROC[NEAR|FAR]……;過程體過程名ENDP(2)保護用到的寄存器內(nèi)容,以便子程序返回時進行相應(yīng)的恢復(fù)。(3)改錯:crazyprocpishbxpushcxxorax,axxordx,dxagain:adda,[bx]adcdx,0incbxincbxloopagainpopcxpopbx3.27

解(不需調(diào)用HTOASC子程序):again:movah,1int21hcmpal,1bh;ESC的ASCII碼是1bhjedonemovdl,almovah,2int21h;是大寫字母則轉(zhuǎn)換為小寫字母jmpagaindone:…3.28

解答:asctobprocpushcxanddh,0fh;先轉(zhuǎn)換十位數(shù)shldh,1;十位數(shù)乘以10(采用移位指令)movch,dhshldh,1shldh,1adddh,chanddl,0fh;轉(zhuǎn)換個位數(shù)adddh,dl;十位數(shù)加個位數(shù)moval,dh;設(shè)置出口參數(shù)popcxretasctobendp3.29

解:DIPASCproc;入口參數(shù):AL=要顯示的一個18進制數(shù)pushcxpushdxpushaxmovcl,4;轉(zhuǎn)換高位shral,clcallHTOASCmovdl,al;顯示movah,2int21hpopax;轉(zhuǎn)換低位callHTOASCmovdl,al;顯示movah,2int21hmovdl,’H’;顯示一個字母“H”movah,2int21hpopdxpopcxretDIPASCendpHTOASCproc;將AL低4位表達的一位18進制數(shù)轉(zhuǎn)換為ASCII碼andal,0fhcmpal,9jbehtoasc1addal,37h;是0AH~0FH,加37H轉(zhuǎn)換為ASCII碼ret;子程序返回htoasc1:addal,30h;是0~9,加30H轉(zhuǎn)換為ASCII碼ret;子程序返回HTOASCendp3.30

解:lucaseprocpushbxmovbx,offsetstringcmpal,0jecase0cmpal,1jzcase1cmpal,2jzcase2jmpdonecase0:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’jbnext0cmpbyteptr[bx],’Z’janext0addbyteptr[bx],20hnext0:incbxjmpcase0case1:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’a’jbnext1cmpbyteptr[bx],’z’janext1subbyteptr[bx],20hnext1:incbxjmpcase1case2:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’jbnext2cmpbyteptr[bx],’Z’janext20addbyteptr[bx],20hjmpnext2next20:cmpbyteptr[bx],’a’jbnext2cmpbyteptr[bx],’z’janext2subbyteptr[bx],20hnext2:incbxjmpcase2done:popbxretlucaseendp3.31解:(1)用寄存器傳遞參數(shù):最簡單和常用的參數(shù)傳遞方法是通過寄存器,只要把參數(shù)存于約定的寄存器中就可以了因為通用寄存器個數(shù)有限,這種方法對少量數(shù)據(jù)可以直接傳遞數(shù)值,而對大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護和恢復(fù),帶有入口參數(shù)的寄存器可以保護、也可以不保護,但最好能夠保持一致(2)用共享變量傳遞參數(shù)子程序和主程序使用同一個變量名存取數(shù)據(jù)就是利用共享變量(全局變量)進行參數(shù)傳遞如果變量定義和使用不在同一個源程序中,需要利用PUBLIC、EXTREN聲明如果主程序還要利用原來的變量值,則需要保護和恢復(fù)利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)(3)用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過堆棧這個臨時存儲區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語言與高級語言混合編程時的常規(guī)方法3.32解:方法:主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們注意:壓棧與彈棧必須要一一對應(yīng)。3.33

解:方法1:neg32proc;入口參數(shù):DX.AX=32位有符號數(shù)negax;實現(xiàn)0-DX.AX功能negdxsbbdx,0;這條指令也可以用decdx代替retneg32endp;出口參數(shù):DX.AX=32位有符號數(shù)的補碼方法2:neg32proc;入口參數(shù):DX.AX=32位有符號數(shù)notax;實現(xiàn)DX.AX求反加1notdxaddax,1adcdx,0retneg32endp;出口參數(shù):DX.AX=32位有符號數(shù)的補碼3.34

解:;數(shù)據(jù)段arraydb12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;數(shù)組countequ$-array;數(shù)組元素個數(shù)resultdb?;校驗和;代碼段movbx,offsetarray;BX←數(shù)組的偏移地址movcx,count;CX←數(shù)組的元素個數(shù)callchecksum;調(diào)用求和過程movresult,al;處理出口參數(shù)movax,4c00hint21h;計算字節(jié)校驗和的通用過程;入口參數(shù):DS:BX=數(shù)組的段地址:偏移地址,CX=元素個數(shù);出口參數(shù):AL=校驗和;說明:除AX/BX/CX外,不影響其他寄存器checksumprocxoral,al;累加器清0sum:addal,[bx];求和incbx;指向下一個字節(jié)loopsumretchecksumendpend3.35

解:⑴.modelsmall.stack.datawdatadw34abh.code.startupmovax,wdatacalldispa.exit0;dispaprocpushcxpushdxmovcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,0fhcalldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,0fhcalldldisppopdxpopcxretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend⑵.modelsmall.stack.datawdatadw34abhwordtempdw?.code.startupmovax,wdatamovwordtemp,axcalldispa.exit0;dispaprocpushcxpushdxmovcl,4movdl,byteptrwordtemp+1shrdl,clcalldldispmovdl,byteptrwordtemp+1anddl,0fhcalldldispmovdl,byteptrwordtempshrdl,clcalldldispmovdl,byteptrwordtempanddl,0fhcalldldisppopdxpopcxretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend⑶.modelsmall.stack.datawdatadw34abh.code.startuppushwdatacalldispapopax;addsp,2.exit0;dispaprocpushbpmovbp,sppushaxpushcxpushdxmovax,[bp+4]movcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,0fhcalldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,0fhcalldldisppopdxpopcxpopaxpopbpretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend3.36解:如果利用共享變量傳遞函數(shù),且變量定義和使用不在同一個源程序中,需要利用PUBLIC、EXTERN聲明。3.37解:(1)宏定義由一對宏匯編偽指令MACRO和ENDM來完成,格式如下:宏名MACRO[形參表]……;宏定義體ENDM宏定義之后就可以使用它,即宏調(diào)用:宏名[實參表](2)宏調(diào)用的格式同一般指令一樣:在使用宏指令的位置寫下宏名,后跟實體參數(shù);如果有多個參數(shù),應(yīng)按形參順序填入實參,也用逗號分隔(3)宏展開:在匯編時,宏指令被匯編程序用對應(yīng)的代碼序列替代,這就是宏展開宏展開的具體過程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時,即用相應(yīng)的宏定義體完全替代源程序的宏指令,同時用位置匹配的實參對形參進行取代3.38解:宏調(diào)用的參數(shù)通過形參、實參結(jié)合實現(xiàn)傳遞,簡捷直觀、靈活多變。宏匯編的一大特色是它的參數(shù)。宏定義時既可以無參數(shù),也可以有一個或多個參數(shù);宏調(diào)用時實參的形式也非常靈活,可以是常數(shù)、變量、存儲單元、指令(操作碼)或它們的一部分,也可以是表達式;只要宏展開后符合匯編語言的語法規(guī)則即可。3.39解:宏:僅是源程序級的簡化:宏調(diào)用在匯編時進行程序語句的展開,不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒有改變通過形參、實參結(jié)合實現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變子程序:還是目標(biāo)程序級的簡化:子程序調(diào)用在執(zhí)行時由CALL指令轉(zhuǎn)向、RET指令返回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲單元或堆棧等傳遞參數(shù)選擇:宏與子程序具有各自的特點,程序員應(yīng)該根據(jù)具體問題選擇使用那種方法。通常,當(dāng)程序段較短或要求較快執(zhí)行時,應(yīng)選用宏;當(dāng)程序段較長或為減小目標(biāo)代碼時,要選用子程序3.40

編寫一個宏指令movedoprnd,soprnd,它實現(xiàn)任意尋址方式的字量源操作數(shù)soprnd送到目的操作數(shù)doprnd,包括存儲單元到存儲單元的傳送功能。答:movemacrodoprnd,soprndmovax,soprndmovdoprnd,axendm3.41

定義一個宏logical,用它代表4條邏輯運算指令:and/or/xor/test。注意需要利用3個形式參數(shù),并給出一個宏調(diào)用以及對應(yīng)宏展開的例子。答:logicalmacrolcode,dopd,sopdlcodedopd,sopdendm例如,如果使用“andax,[bx]”指令,可以利用該宏定義,寫出宏指令如下:logicaland,ax,[bx]3.42

解:utolmacrolocalnextcmpal,’A’;小于“A”不轉(zhuǎn)換jbnextcmpal,’Z’;大于“A”不轉(zhuǎn)換janextaddal,20h;是大寫字母則轉(zhuǎn)換為小寫字母next:endm3.43

定義一個宏movestrstrn,dstr,sstr,它將strn個字符從一個字符區(qū)sstr傳送到另一個字符區(qū)dstr解:(假設(shè)它們都在數(shù)據(jù)段)movestrmacrostrn,dstr,sstrmovcx,dsmoves,cxmovcx,strnmovdi,offsetdstrmovsi,offsetsstrcldrepmovsb;;重復(fù)傳送ES:[DI]←DS:[SI]endm第四章4.120;;65536;;擴展板4.4總線操作周期中,8088在第三個時鐘周期的前沿測試READY引腳,若無效,表明被訪問的設(shè)備與CPU操作不同步,CPU插入等待周期。第五章5.2在半導(dǎo)體存儲器中,RAM指的是隨機存取存儲器,他可讀可寫,但斷電后信息一般會丟失;而ROM指的是只讀存儲器,正常工作時只能從中讀取信息,但斷電后信息不會丟失。以EPROM芯片2764為例,其存儲容量為8K×8位,共有8條數(shù)據(jù)線和13條地址線。用它組成64KB的ROM存儲區(qū)共需8片2764芯片。掩膜ROM:信息制作在芯片中,不可更改PROM:允許一次編程,此后不可更改EPROM:用紫外光擦除,擦除后可編程;并允許用戶多次擦除和編程EEPROM(E2PROM):采用加電方法在線進行擦除和編程,也可多次擦寫FlashMemory(閃存):能夠快速擦寫的EEPROM,但只能按塊(Block)擦除組成32KB存儲空間,用SRAM2114(1K×4)需要64個芯片;組成32KB存儲空間,用DRAM4118(18K×1)需要18個芯片;它們都需要進行位擴充和地址擴充5.9解:24=185.10解:5.11解:5.12解:5.13解:5.15解:4256KBA19-A184第六章6.1獨立,I/O,2,直接尋址和DX間接尋址。6.2(1)數(shù)據(jù)寄存器:輸入時保存從外設(shè)發(fā)往CPU的數(shù)據(jù),輸出時保護從CPU發(fā)往外設(shè)的數(shù)據(jù)。(2)狀態(tài)寄存器:保存狀態(tài)數(shù)據(jù)。CPU可以獲取當(dāng)前接口電路或外設(shè)的狀態(tài)。(3)控制寄存器:保存控制數(shù)據(jù)。CPU可以向其寫入命令,選擇接口電路工作方式,控制外設(shè)。6.4Task

movdx,8000HInal,dxNotalCmpal,1Jz

status1Cmpal,2Jz

status2Moval,0Outdx,alJmpdoneStatus1:rolal,1Outdx,alCalldelayJmpstatus1Status2:roral,1Outdx,alCalldelayJmpstatus2Done:

……6.5CodeStart:

movax,2000HMovds,axMovbx,2000HMovdx,0FFE2HMovcx,100Next:

inal,dxTestal,1Jz

nextSubdx,2Inal,dxMov[bx],alIncbxAdddx,2Loopnext6.6CodeStart:movdx,80HLeabx,ADDRNext:

inal,dxTestal,80HJnznextCmp[bx],’$’Jz

doneMoval,[bx]Outdx,alIncbxJmp

nextDone:

……9.4解:(1)moval,50hmovdx,207hout

dx,almoval,128;80hmovdx,205hout

dx,al(2)

moval,33hmovdx,207hout

dx,almovax,3000h;不是3000movdx,204hout

dx,almoval,ahout

dx,al(3)

moval,0b4hmovdx,207hout

dx,almoval,02f0hmovdx,206hout

dx,almoval,ahout

dx,al9.5解:moval,33hout

0fbh,al;寫入計數(shù)器0地址:0fbhmoval,80h;out0f8h,al;寫入低字節(jié)計數(shù)初值moval,50hout0f8h,al;寫入高字節(jié)計數(shù)初值作用:計數(shù)器0的計數(shù)初值為5080hP274第十一章部分習(xí)題參考答案11.1答:

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論