新編匯編語言程序設計四五章習題參考解答_第1頁
新編匯編語言程序設計四五章習題參考解答_第2頁
新編匯編語言程序設計四五章習題參考解答_第3頁
新編匯編語言程序設計四五章習題參考解答_第4頁
新編匯編語言程序設計四五章習題參考解答_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、習題四4.5已知(AX)=836BH, X分別取下列值,執(zhí)行“CMP AX.X”后,標志位ZF、CF、OF、SF各是什么? (l)X=3000H (2)X=8000H (3)X=7FFFFH (4)X=0FFFFH (5)X=0答:上述指令執(zhí)行后,標志位ZF、CF、OF、SF的狀態(tài)分別是:(1) ZCOS=0010 (2) ZCOS=0000 (3) ZCOS=0010 (4) ZCOS=0101(5) ZCOS=0001 4.7測試名為X的一個字節(jié),如果X的第1, 3位均為1,轉移到L1,如果只有一位為1,轉移到L2,如果兩位全為0, 轉移到L3。寫出對應的指令序列。答: MOV AL.XA

2、NDAL,0000 1010BJZL3CMPALOOOO 10I0BJELIJMPL2X-3X<-24.12計算分段函數(shù):Y = <5X+6 -2<X<32X >3X的值從鍵盤輸入,Y的值送顯示器輸出,答: INCLUDE YLIB.HDATA SEGEMNTMESSI DB ODH OAH. 'Input value ofX please : $MESS2 DB 0DH0AH.'Y=:$'DATA ENDSCODE SEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX. DATAMOVDS, AXLEADX

3、. MESSICALLREADINT:輸入X的值CMPAX. -2JGEL2LI:SUBAX. 3:AX-X-3JMPDONEL2:CMPAX, 3JGL3MOVBX. AXADDAX. AX;AX2XADDAX. AX;AX-4XADDAX. BX;AX-5XADDAX. 6:AX-5XYJMPDONEL3:MOVAX. 2:AX-2DONE:LEA DX. MESS2CALL WRITEINT ;輸出 Y 的值CALL CRLFMOV AX, 4C00HINT 21HCODE ENDSEND START4.14編寫程序,求10元素字數(shù)組LIST中絕對值最小的數(shù),存入MIN單元。答: DAT

4、A SEGEMNTLIST DW -56, +12, 88,-126 -5,16, 32, -99. 72, -18MIN DW ?MINABS DW ?DATA ENDSCODE SEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX. DATAMOVDS, AXMOVAX. LISTMOVMIN. AX將數(shù)組第一個元素假設為絕對值最小的數(shù)MOVMINABS, 32767最小的絕對值假設為32767LEASI, LISTMOVCX. 10AGAIN:MOVAX. SICMPAX.OJGESKIP1NEGAX求絕對值SKIP1:CMPAX. MINABS絕對值與假

5、設的最小絕對值比較JGESKIP2假設的絕對值較小,跳過MOVMINABS. AX保存新的最小絕對值MOVAX. SI取出新的絕對值最小的數(shù)MOVMIN. AX保留新的絕對值最小的數(shù)SKIP2:ADDSL2LOOPAGAINMOVAX. 4C00HINT21HCODEENDSENDSTART說明:一定要預設最小的絕對值和絕對值最小的數(shù),而且這個絕對值最小的數(shù)必須來自LIST數(shù)組04.16 一個有符號字數(shù)組以0為結束標志,求這個數(shù)組的:最大值、最小值、平均值。答:DATASEGEMNTLISTDW-56, +12, 88, -126, -5, 16. 32,-99, 72,-18,0MINDW9

6、MAXDW?AVGDW9 DATAENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOVAX. DATAMOVDS, AXMOVMIN,32767:將32767假設為最小的數(shù)MOVMAX, -32768:將-32768假設為最大的數(shù)MOVAVGO:AVG用作累加器,清零LEASL LISTMOVCX.OAGAIN:MOVAX. SICMPAX.OJZDONE:找到零元素,轉DONE結束處理INCCX:紀錄非零元素個數(shù)ADDAVG, AX:累加CMPAX. MINJGESKIP1MOVMIN. AX:比預設最小值還小,保留SKIP1:CMPAX. M

7、AXJLESKIP2MOVMAX. AX:比預設最大值還大,保留SKIP2:ADDSL2JMPAGAINDONE:JCXZNULL:元素個數(shù)為零,轉NULL處理MOVAX. AVGCWDIDIVCXMOVAVG, AX:計算平均值JMPEXITNULL:MOVMIN, 0:元素個數(shù)為0,將“最大值”、“最小值”MOVMAX. 0:“平均值”清零MOVAVGOEXIT:MOVAX. 4C00HINT21HCODEENDSENDSTART4.21編寫程序,把一個30個元素的有符號字數(shù)組ARRAY按照各元素的正負分別送入數(shù)組P和M,正數(shù)和零元素送P數(shù)組,負數(shù)送M數(shù)組。答: DATA SEGEMNTA

8、RRAYDWPDWMDWDATA ENDSCODE SEGMENT30 DUP(?)30 DUP(?)30 DUP(?);匯編之前置入數(shù)據(jù)ASSUMECS: CODE, DS: DATA8 / 15START:MOV AX. DATAMOVDS, AXLEABX, ARRAY: ARRAY 數(shù)組指針MOVSI.O: P數(shù)組指針MOVDI.0: M數(shù)組指針MOVCX, 30ONE: MOVAX. |BX;從ARRAY數(shù)組取出一個數(shù)據(jù)ANDAX. ALJGEPLUS:正數(shù)、零轉PLUSMINUS: MOVMDI,AX:負數(shù)存入M數(shù)組ADDDL2JMPNEXTPLUS: MOVP|SI, AX:正數(shù)

9、、零存入P數(shù)組ADDSL2NEXT: ADDBX,2LOOPONEMOVAX. 4C00HINT21HCODE ENDSENDSTART4.30編寫程序,輸入N,計算:S=1 *2+2*3+.+(N-1)*N答:INCLUDE YLIB.HCODE SEGMENTMESSIDBODH. 0AH, 'Input N please: $'MESS2DBODH. 0AH/S=S,START:PUSHcsPOPDSLEADX. MESSICALLREADDEC:輸入NMOVCX. AXXORBX. BX;BX用作累加器ONE:MOVAX. CXMOVSL AXDECSIMULSI:計算

10、ADDBX. AX:累加LOOPONELEADX. MESS2MOVAX. BXCALLWRITEDEC;輸出結果CALLCRLFMOVAX. 4C00HINT21HCODEENDSENDSTARTASSUMECS: CODE4.31編寫程序,輸入N,輸出如下矩陣(設N=5)111112 2 2 2 13 3 3 2 14 4 3 2 15 4 3 2 1答:設I為行(卜5), J為列(15),則(I,J)位置上的數(shù)據(jù)為:I>(6-J)?I:6-J ,INCLUDE YLIB.HCODE SEGMENTASSUMECS: CODESTART:CALLCRLFMOVSI. 1:SI為行號R

11、OW: MOVCX. 5:CX為6-列號COL: CMPSL CX:判斷當前位置JBUPDOWN: MOVAX. CX:下半三角,取6-列號JMPOUTPUTUP:MOVAX. SI:上半三角,取行號OUTPUT:MOVDX.-lCALLWRITEDEC:輸出一個數(shù)據(jù)LOOPCOLCALLCRLF:結束本行INCSI;修改行號CMPSL5JBEROW:未滿5行,繼續(xù)MOVAX. 4C00HINT21HCODE ENDSENDSTART習題五5.4閱讀下面的程序,指出該程序計劃完成的功能,同時指出程序中尚存在的錯誤, CODE SEGMENTASSUME: CS: CODESTART: MOV

12、LOOPO: CALLLOOPMOVINT PRINTSPACEMOVCX, 20PRINTSPACELOOPOAH. 4CH21HPROC NEARCX, 40;該行上面添加:PUSHexPSLOOP:MOVALJ 'MOVAH. 02HINT21HLOOPPSLOOPMOVAL, OAHMOVAH. 02HINT21HMOVAL. ODHMOVAH. 02HINT21HRETPRINTSPACE ENDP CODE ENDS END START;該行卜面添加:POP ex功能:輸出20行空行,每行有40個空格。5.6閱讀下面的子程序,敘述它完成的功能,它的入口參數(shù)和出口參數(shù)各是什么

13、?CLSCREENMOVMOVMOVMOVMOVINTRETCLSCREENPROCAX. 0600HCX,0 DH,X DL, YBH. 07H 10HENDP解:屏幕窗口上卷,左上角為(0, 0),右下角為(y,x),卷入行屬性為黑底白字。5.7 編寫程序,鍵入一個以$為結束符的數(shù)字串,統(tǒng)計其中'O'“9”各個數(shù)字出現(xiàn)的次數(shù),分別存放到S0S9這1。個 單元中去。解:.MODEL SMALL.DATASO DB 0SI DB ?S2 DB 0S3DB 0S4DB 0S5DB 0S6DB 0S7DB 0S8DB 0S9DB 0KEYINDB 100 DUP(O).CODEST

14、ART:MOVAX, DATAMOVDS. AXMOVCX,0LEABX. KEYINNEXT:MOVAH.01HINT21HCMPAL. $JZCOUNTINCCXMOV|BX.ALINCBXJMPNEXTCOUNT: LEABX. KEYINCOUNT1:LEADL SOMOVAL BXSUBAL. 30HMOVAH,0ADDDL AXINCBYTE PTRDIINCBXLOOPCOUNT 1MOVAX. 4C00HINT21HENDSTART5.8 下而程序求某數(shù)據(jù)區(qū)中無符號數(shù)據(jù)最大值,觀察程序執(zhí)行中堆棧變化,畫出以下5個堆棧狀態(tài)圖。(DCALL MAX指令執(zhí)行之前(2)CALL MAX

15、指令執(zhí)行之后。(3)保護現(xiàn)場之前(4)恢復現(xiàn)場之后(5)執(zhí)行指令POP SMAX之后程序清單如下:DATABUF COUNTSMAXDATACODE ASSUMESEGMENTDWEQU DW98, 34, 897, 345, 678, 21345, 67, 2 ($-BUF)/29ENDSSEGMENTCS: CODE, DS: DATASPCOUNTBUF的偏移地址SP返回偏移地址 COUNT -BUF的偏移地址START:MOVAX. DATAMOVDS, AXLEAAX. BUF;入口參數(shù)進棧PUSHAXMOVAX. COUNTPUSHAXCALLMAXPOPSMAX;最大值出棧,送S

16、MAXMOVAH. 4CHINT21HMAXPROCPUSHBPMOVBP, SPMOVSI. BP+6;BUF的偏移地址送SIMOVCX. BP+4;COUNT送 CXMOVBX, SI;取第一個數(shù)據(jù)至BXDECexMAXI:ADDSL2CMPBX. SIJAENEXTMOVAX. SI;取第二個數(shù)至AXNEXT:LOOPMAXIMOVBP+6L BX;最大值進棧POPBPRET2;返回后SP指向最大值MAXENDPCODEENDSENDSTARTCALL MAX執(zhí)行之前CALL MAX執(zhí)行之后SP返回偏移地址COUNTBUF的偏移地址保護現(xiàn)場之前SPBP返回偏移地址COUNT 最大值恢復現(xiàn)

17、場之后BP返回偏移地址COUNTSP最大值執(zhí)行RET 2之后5.9 編寫求絕對值的子程序,利用它計算三個變量的絕對值之和。解:.MODEL SMALL.DATAVALUEDW-5, 5,-10SUMDW0.CODESTART:MOVAX. DATAMOVDS. AXLEABX. VALUEMOVCX, 3MOVSUM. 0ONE:CALLABSADDSUM. AXADDBX,2LOOPONEMOVAX. 4C00HINT21H;子程序ABS;功能:求一個字整數(shù)的絕對值;入口:字整數(shù)的偏移地址在BX中;出口:該字整數(shù)的絕對值在AX中ABSPROCMOVSUM, 0AGAIN:MOVAX. BXA

18、NDAX, AXJGESKIPNEGAXSKIP:RETABSENDPENDSTART5.10 子程序計算從2開始的N(N<50)個偶數(shù)之和(2+4+6+),主程序從鍵盤輸入整數(shù)N,調用子程序求出N個偶數(shù)9 / 15之和,并顯示結果。用以下3種方法編寫完整程序。(1)子程序和主程序在同一代碼段。(2)在同一模塊(源程序文件),但不在同一代碼段。(3)各自獨立成模塊,即在不同的源程序文件中。解:(l)INCLUDE YLIB.H.MODEL SMALL.DATASUM DW 0PROMPT 1 DB ODH. OAH. INPUT THE NUMBER N$PROMPT? DB ODH.

19、OAH. THE SUM IS $.CODESTART:MOVAX. DATAMOVDS, AXLEADX. PROMPT 1CALLREADDECCMPAX.OJZEXITMOVCX. AXCALLSUMMLEADX. PROMPT2CALLWRITEDECCALLCRLFEXIT:MOVAX. 4C00HINT21HSUMMPROCMOVAX.ONEXT:MOVBX. CXADDBX. BXADDAX. BXLOOPNEXTRETSUMMENDPENDSTART(2)INCLUDE YLIB.H DATA SEGMENTDWODB ODH. OAH. INPUT THE NUMBER*DB

20、 ODH. OAH. 'THE SUM IS:DS: DATA, CS: CODEISUMPROMPT 1PROMPT?DATA ENDSCODEI SEGMENT ASSUME18 / 15START: MOVMOV LEA CALLAX. DATADS. AXDX. PROMPT 1READDECCMPAX.OJZEXITMOVCX, AXCALLFAR PTR SUMMLEADX, PROMPT2CALLWRITEDECCALLCRLFEXIT:MOVAX. 4C00HINT21HCODEIENDSC0DE2 SEGMENTASSUME CS: C0DE2. DS: DATASU

21、MMPROCFARMOVAX.ONEXT:MOVBX, CXADDBX, BXADDAX. BXLOOPNEXTRETSUMMENDPCODE2ENDSENDSTART(3);EXEC51O3A.ASMPUBLICCODE2ASSUMESUMMSUMMSEGMENTCS: CODE2PROC FARMOV AX, 0NEXT:MOVBX, CXADDBX. BXADDAX. BXLOOPNEXTRETSUMMCODE2ENDPENDS END;EXEC51O3B.ASMINCLUDE EXTRN DATA SUM PROMPT 1 PROMPT? DATA CODEIYLIB.HSUMMSEG

22、MENTDW 0DB ODH, OAH. INPUT THE NUMBER*DB ODH, OAH, THE SUM IS$ENDSSEGMENTASSUMEDS: DATA, CS: CODEISTART:MOVAX, DATAMOVDS. AXLEADX, PROMPT 1CALLREADDECCMPAX,0JZEXITMOVCX, AXCALLFAR PTR SUMMLEADX. PROMPT2CALLWRITEDECCALLCRLFEXIT:MOVAX. 4C00HINT21HCODEIENDSENDSTART5.19 編寫排序子程序SORT,以DS、SI和CX作為入口參數(shù),把DS:S

23、I為起始地址的一個帶符號的字數(shù)組進行由小到 大排序,參數(shù)CX中存放的是數(shù)組中元素個數(shù)。解:DATAREASEGMENTARRAYDW 1,9,6, 8,5,4CNTDW6ADDRDW ?DATAREAENDSCODE SEGMENTASSUME CS: CODE. DS: DATAREASTART:MOVAX. DATAREAMOVDS. AXLEASI. ARRAYMOVCX. CNTCALLSORTMOVAX. 4C00HINT21HSORTPROCPUSHCXPUSHAXPUSHBXPUSHSIINIT:MOVBX. 1DECCXJZSORTEDPUSHSIPUSHCXNEXT:MOVAX. SICMPSI+2,AXJGEXCHGCONTSI+2,AXMOVSI, AXXORBX. BXCONT: ADDSL2LOOPNEXTPOPSIPOPCXCMPBX.OJEINITSORTED:POPSIPOPBXPOPAXPOPCXRETSORT ENDPCODE ENDSENDSTART;置交換標志5.20 編寫一個子程序,以AX為入口參數(shù),把AX中的各個二進制位顛倒次序后還放回AX中。例如,入口參數(shù)AX=11001

溫馨提示

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

評論

0/150

提交評論