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

下載本文檔

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

文檔簡介

微機原理與接口技術(shù)(第3版)習(xí)題答案第4章習(xí)題答案練習(xí)題14.1-1設(shè)A=10,B=20,Q=30,D=2,執(zhí)行下列指令后,AL的值為多少?(1)MOVAL,A5-B+D (2)MOVAL,QMOD(A?D)(3)MOVAL,AAND7 (4)MOVAL,QLEB(5) (6)M【解答】(1)32(2)6(3)1010AND0111=0010B,2(4)0(5)0(6)1604.1-2有如下數(shù)據(jù)定義:DA1DB4DUP(5),2COUNTEQU10DA2 DDCOUNTDUP(?)問:(1)上述數(shù)據(jù)定義為變量DA1分配多少字節(jié)存儲空間?(2)為變量DA2分配多少字節(jié)存儲空間?【解答】(1)為DA1分配5字節(jié);(2)為DA1分配40字節(jié)4.1-3畫出以下偽指令所定義的數(shù)據(jù)在存儲器中的存放示意圖。DATA1DB66H,33HDATA2DW12ABH,99H,?DATA3DB05H,3DUP(1,2)【解答】66HDATA133HABHDATA212H99H00H??55HDATA31212124.1-4有如下數(shù)據(jù)定義:D1 DB 20 DUP(?)D2 DW 01H請寫出用一條指令實現(xiàn)取D1的偏移地址到SI的2種方法【解答】LEA SI,D1或者MOVSI,OFFSETD14.1-5寫出具有下列功能的偽指令語句:(1)在DATA為首地址的存儲單元中連續(xù)存放字節(jié)數(shù)據(jù):4個18,5個‘B’,10個(2,4,6);(2)【解答】(1)DATADBDUP4(18),5DUP(‘B’),10DUP(2,4,6)(2)VAR DB34H,12H,0BCH,0AH4.1-6假設(shè)程序中的數(shù)據(jù)定義如下:LNAME DB 30DUP(?)ADDRESS DB 30DUP(?)CODE_LIST DB 1,7,8,3,2CITY DB 15DUP(?)(1)用一條MOV指令將LNAME的偏移地址存入AX。(2)用一條指令將CODE_LIST的頭兩個字節(jié)存入SI。(3)寫一條偽指令使CODE_LENGTH的值等于CODE_LIST的實際長度?!窘獯稹?1)MOVAX,OFFSETLNAME(2)MOV SI,WORDPTRCODE_LIST(3)CODE_LENGTH=CITYCODE_LIST練習(xí)題24.2-1判斷:匯編語言程序通常由幾個段組成,可以沒有數(shù)據(jù)段,沒有堆棧段,但不能沒有代碼段。()【解答】(對)4.2-2完整的段定義是由偽指令SEGMENT定義段的開始,用偽指令ENDS作為段的結(jié)束。而段的性質(zhì)可以由段的名字來決定嗎?【解答】:在完整段定義結(jié)構(gòu)中,段的性質(zhì)(也就是說改段是代碼段、還是數(shù)據(jù)段、堆棧段)不能由段的名字決定,必須由偽指令A(yù)SSUME指明。4.2-3閱讀下列程序,找出其中不符合匯編語言規(guī)范之處,并修改。DATA SEGMENTA: DB 35,01000111B,24H,‘XYZ’B: DB N DUP(0)N: EQU $-A ENDSCODE SEGMENTSTART: MOVAX,DATA MOVDS,AX LEA SI,A LEA DI,B MOVCX,NLOP MOVAL,[SI] MOV[DI],AL INC SI INC DI LOOPLOP ;跳轉(zhuǎn)到標(biāo)號LOP處構(gòu)成循環(huán)結(jié)構(gòu) MOVAH,4CH INT 21H ENDS END START【解答】存在以下錯誤:=1\*GB3①變量定義時變量名后不要加“:”=2\*GB3②DATA段定義結(jié)束時ENDS前少了段名DATA=3\*GB3③少了ASSUME語句=4\*GB3④標(biāo)號LOP后少了“:”修改如下DATA SEGMENTA DB 35,01000111B,24H,‘XYZ’N EQU $-AB DB N DUP(0) ENDSCODE ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX LEA SI,A LEA DI,B MOVCX,NLOP: MOVAL,[SI] MOV[DI],AL INC SI INC DI LOOPLOP ;跳轉(zhuǎn)到標(biāo)號LOP處構(gòu)成循環(huán)結(jié)構(gòu) MOVAH,4CH INT 21HCODE ENDS END START4.2-4【解答】DATA SEGMENT BCD DB18H ;待轉(zhuǎn)換的壓縮BCD碼 RESULT DB2DUP(?) ;存放轉(zhuǎn)換得到的2個字節(jié)的ASCII碼 ASCTAB DB'0123456789' ;ASCII碼表DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVAL,BCD LEABX,ASCTAB MOVCL,4 SHRAL,CL ;取出壓縮BCD碼的高位 XLAT ;轉(zhuǎn)換成ASCII碼 MOVRESULT,AL ;存入RESULT MOVAL,BCD ANDAL,0FH ;取出壓縮BCD碼的低位 XLAT ;轉(zhuǎn)換成ASCII碼 MOVRESULT+1,AL ;存入RESULT+1 MOVAH,4CH INT21HCODE ENDS ENDSTART4.2-5編寫程序,求出Z=[(X+Y)8X]2中的Z值,結(jié)果存放在RESULT單元中(設(shè)X、Y和Z均為16位)?!窘獯稹考僭O(shè)X、Y、Z都是有符號數(shù),不考慮計算溢出的情況DATA SEGMENT VARX DW6 ;變量X VARY DW7 ;變量Y RESULT DW? ;結(jié)果ZDATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVAX,VARX ADDAX,VARY ;X+Y ADCDX,0 SALAX,1 ;(X+Y)2 RCL DX,1 SALAX,1 ;(X+Y)4 RCL DX,1 SALAX,1 ;(X+Y)8 RCL DX,1 SUBAX,VARX ;X SBB DX,0 SAR DX,1 ;/2 RCRAX,1 MOVRESULT,AX ;因為Z不超過16位MOVAH,4CH INT21HCODE ENDS ENDSTART4.2-6編寫程序,將內(nèi)存中4位壓縮BCD碼數(shù)據(jù)DATA1和DATA2相加,結(jié)果仍然為BCD碼并保存在SUM中【解答】DATA SEGMENT DATA1 DB 34H,67H ;低位在前高位在后 DATA2 DB 78H,12H SUM DB3DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX CLC MOVAX,0 MOVAL,DATA1 ADDAL,DATA2 DAA MOVSUM,AL MOVAL,DATA1+1 ADCAL,DATA2+1 DAA MOVSUM+1,AL ADCAH,0 MOVSUM+2,AH MOVAH,4CH INT21HCODE ENDS END START練習(xí)題34.3-1判斷:段內(nèi)轉(zhuǎn)移要改變IP、CS的值。()4.3-2判斷:條件轉(zhuǎn)移指令只能進行段內(nèi)短轉(zhuǎn)移。()4.3-3條件轉(zhuǎn)移指令的目的地址應(yīng)該在本條件轉(zhuǎn)移指令的下一條指令地址的字節(jié)范圍內(nèi)。4.3-4段內(nèi)和段間的轉(zhuǎn)移指令的尋址方式有和兩種。4.3-5計算以下指令中轉(zhuǎn)移目的地址中的偏移地址。設(shè)DS

=

1200H,AX

=

200H,BX

=

0080H,SI

=

0002H,位移量DISP

=

0600H,(12680H)

=

18H,(12681H)

=

98H,(12082H)

=

9AH,(12083H)

=

22H,(12600H)

=

10H,(12601H)=

20H。(1)JMPBX (2)JMPWORDPTRDISP[BX](3)JMPWORDPTR[BX][SI] (4)JMPWORDPTR[DISP]【解答】(1)IP=BX=0080H(2)IP=(DS16+BX+DISP)=(12000H+0080H+0600H)=(12680H)=9818H(3)IP=(DS16+BX+SI)=(12000H+0080H+0002H)=(12082H)=229AH(4)IP=(DS16+DISP)=(12000H+0600H)=(12600H)=2010H4.3-6閱讀下面的程序段,分析AL滿足什么條件時,程序轉(zhuǎn)移到標(biāo)號LOP處執(zhí)行。 CMP AL,0FFH JNL LOP LOP:【解答】4.3-7根據(jù)下列要求,寫出程序段。(1)判斷AL為負(fù),則跳轉(zhuǎn)至NEXT。(2)判斷字節(jié)變量DA為0,則跳轉(zhuǎn)至NEXT。(3)判斷AL的D0位為1,則跳轉(zhuǎn)至NEXT。(4)判斷字變量DA的D7位為0,則跳轉(zhuǎn)至NEXT。(5)比較AH與字節(jié)變量DA的值,若不相等,則跳轉(zhuǎn)至NEXT。(6)比較字節(jié)變量DA與字符‘A’,若DA≥‘A’,則跳轉(zhuǎn)至NEXT。4.3-8閱讀程序段,說明程序執(zhí)行后轉(zhuǎn)移到哪里? MOVAX,8756H MOVBX,1234H SUB AX,BX JNO L1 JNCL2 JMP L3【解答】本題意為AXBX無溢出則程序轉(zhuǎn)移到L1,有溢出但沒有進位程序?qū)⑥D(zhuǎn)移到L2,否則程序轉(zhuǎn)移到L3.由于AXBX=8756H1234H=7522H,OF=1,CF=0,則轉(zhuǎn)L2.4.3-9假設(shè)內(nèi)存單元中存儲了3個字節(jié)變量A、B和C,編寫程序判斷它們能否構(gòu)成三角形。如果可以,將CF設(shè)為1,否則將CF設(shè)為0。練習(xí)題4--閱讀下面的程序段,分析其功能 START: LEA BX,CHAR ;CHAR是已定義的變量 MOVAL,‘A’ MOVCX,26 LOP1: MOV[BX],AL INC AL INCBX LOOPLOP1 HLT‘A’~‘Z’--編寫程序段,將從地址2B000H開始的256個存儲單元中的內(nèi)容均減去1,如果發(fā)現(xiàn)某個存儲單元的內(nèi)容減為0,則立即退出循環(huán),其后的存儲單元不再減1。2B000H是一個物理地址,可以設(shè)置DS=2B00H,偏移地址則為0。程序如下: MOV AX,2B00H MOV DS,AX ;給DS賦初值 MOV DI,0 ;DI指向內(nèi)存數(shù)據(jù)區(qū) MOV CX,256 ;設(shè)置循環(huán)次數(shù)AGN: DEC BYTEPTR[DI] ;由DI指向的內(nèi)存單元內(nèi)容減1 MOV AL,BYTEPTR[DI] ;減1后的值保存與AL INC DI ;DI加1指向下一個單元 CMP AL,0 ;減1后的值與0比較 LOOPNZAGN ;不為0,則跳轉(zhuǎn)至AGN繼續(xù)處理下一個數(shù)據(jù) HLT ;為0,則退出循環(huán)練習(xí)題54.5-1閱讀程序并完成填空,從BUFFER單元開始放置一個數(shù)據(jù)塊,其中BUFFER單元存放的是預(yù)計的數(shù)據(jù)塊長度20H,BUFFER+1單元存放的是實際從鍵盤輸入的字符串的長度,從BUFFER+2單元開始存放的是從鍵盤上接收的字符,請將這些從鍵盤上接收的字符再在屏幕上顯示出來。MOVDX,OFFSETBUFFERMOV AH,(1)INT 21H ;讀入字符串LEA DX,(2)MOV BX,DXMOV AL,(3) ;讀入字符串的字符個數(shù)MOV AH,0ADD BX,AXMOV AL,(4) MOV [BX+1],ALMOV AH,(5) INC DX ;確定顯示字符串的首地址INT 21HMOV AH,(6) INT 21H【解答】(1)0AH;(2)BUFFER+1;(3)[BX];(4)‘$’;(5)9;(6)4CH4.5-2閱讀下列程序段,說明程序段的功能。AGAIN: MOVAH,01H INT 21H CMP AL,41H JB AGAIN CMP AL,5AH JA AGAIN MOVDL,AL ADDDL,20H MOVAH,02H INT21H【解答】因為‘A’的ASCII碼是41H,‘Z’的ASCII碼是5AH,對應(yīng)大小寫字母的ASCII碼相差20H,所以本程序段的功能是:從鍵盤上輸入一個字符,如果是大寫的26個英文字母,就將其轉(zhuǎn)換成對應(yīng)的小寫字母顯示在屏幕上,否則重新輸入,直到輸入一個大寫的英文字母為止。練習(xí)題64.6-1子程序設(shè)計中,常用的參數(shù)傳遞方式有、和?!窘獯稹考拇嫫鱾鬟f參數(shù)、內(nèi)存單元傳遞參數(shù)、堆棧傳遞參數(shù)4.6-2在如下子程序中,已知AL的值為0~F中的一位十六進制數(shù),問:HEAC PROCFAR CMPAL,10 JC KK ADDAL,7KK: ADDAL,30H MOVDL,AL MOVAH,2 INT 21H RETFHEAC ENDP(1)如果調(diào)用子程序時AL=2,子程序執(zhí)行后,DL=?(2)如果調(diào)用子程序時AL=0AH,子程序執(zhí)行后,DL=?(3)該子程序完成什么功能?【解答】(1)DL=32H;(2)DL=41H;(3)將十六進制數(shù)轉(zhuǎn)換成對應(yīng)的ASCII碼,并輸出顯示。如果是0~9的數(shù)字,則求ASCII碼時在數(shù)值的基礎(chǔ)上加上30H即可,如果是A~F則相應(yīng)的加上37H。4.6-3假設(shè)程序段執(zhí)行前DS=3000H、SS=2000H、SP=3000H、AX=4567H、BX=1234H、CX=6789H,完成下列填空。ANDBX,00FFHCALLMYSUBNOP ;SP=___________ ;AX=___________;BX=___________ HLTMYSUB PROC PUSH AX PUSH BX PUSH CX SUB AX,BX ;SP=___________ POP CX POP AX POP BX ;SP=___________ RETMYSUB ENDP【解答】SP=3000HAX=0034HBX=4567H SP=2FF8H SP=2FFEH練習(xí)題74.7-1字符串操作指令的兩個隱含指針寄存器是和?!窘獯稹縎I、DI4.7-2有如下程序段:DATA SEGMENT ORG 20H BUF DB‘ABCDEFGH’ FLAGDB?DATA ENDS LEA DI,BUF MOVAL,‘E’ CLD MOVCX,8 REPNZSCANS JZ OK MOVFLAG,-1 JMP DONEOK: DEC DI MOVFLAG,1DONE: 問:上述程序段執(zhí)行后,DI和FLAG的值是多少?【解答】上述程序的作用是在BUF為首地址的字符串中查找給定字符’E’。能夠找到’E’,DI的值是’E’的偏移地址,即24H,F(xiàn)LAG的值為1時表示找到了給定字符,如果為-1則表示沒有找到給定字符,這里找到了,所以FLAG的值是1。4.7-3下列程序?qū)崿F(xiàn)把含有20個字符‘A’的字符串從源緩沖區(qū)傳送到目的緩沖區(qū)的功能,試在程序中的空白處填上適當(dāng)?shù)闹噶?每空只填一條指令)。DATA SEGMENT SOURCE_STRINGDB20DUP(‘A’)DATA ENDSEXTRA SEGMENT DEST_STRINGDB 20DUP(?)EXTRA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:EXTRASTART: MOVAX,DATA MOVDS,AX MOVAX,EXTRA MOVES,AX (1) LEADI,DEST_STRING CLD MOVCX,20 (2) MOVAH,4CH INT 21HCODE ENDS ENDSTART【解答】(1)LEA SI,SOURCE_STRING (2)REP MOVSB4.7-4下列程序的功能是:將從內(nèi)存2000H:0A00H開始的2KB存儲單元清零。請在下列空格中填入合適的指令。程序執(zhí)行后DI的內(nèi)容是多少?CLDMOVAX,2000H (1)(2)XOR AL,AL(3)(4)【解答】(1)MOVES,AX(2)MOVDI,0A00H(3)MOVCX,2048(4)REPSTOSB本章習(xí)題4-1編寫一個程序,統(tǒng)計32位數(shù)DX:AX中二進制位是1的位數(shù)。【解答】CODE SEGMENT ASSUMECS:CODESTART: MOV BL,0 ;用BL存放是1的位數(shù) MOV CX,16AGAING: ROL AX,1 ADC BL,0 ROL DX,1 ADC BL,0 LOOP AGAIN MOV AH,4CH INT 21HCODE ENDS END START4-2編制兩個子程序,將十六進制數(shù)轉(zhuǎn)換成ASCII碼,并顯示ASCII碼字符。【解答】DATA SEGMENT DATA1DB 12H,34H,56H,78H,0ABH,0CDH,0EFH LEN =$-DATA1 STRINGDB2*LENDUP(?),'$'DATA ENDSSTACK SEGMENT DB100DUP(?) TOPLABELWORDSTACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSETTOP MOV CX,LEN LEA SI,DATA1 LEA DI,STRINGAGAIN: CALL CHA INC SI ;取下一個數(shù)據(jù) LOOP AGAIN LEA DX,STRING ;輸出ASCII碼 MOV AH,09H INT 21H MOV AX,4C00H INT 21HCHA PROC ;對一個字節(jié)進行轉(zhuǎn)換的子程序 MOV AL,[SI] MOV BL,AL ;轉(zhuǎn)換高半字節(jié) PUSH CX MOV CL,4 SHR AL,CL POP CX CALL CHANGE MOV AL,BL ;轉(zhuǎn)換低半字節(jié) AND AL,0FH CALL CHANGE RETCHA ENDPCHANGE PROC ;獲得單個字符CMP AL,10JAE ADD1ADD AL,30HJMP L1ADD1: ADD AL,37HL1: MOV [DI],ALINC DIRETCHANGE ENDPCODE ENDS ENDSTART4-3編寫程序?qū)SCII碼轉(zhuǎn)換成十六進制數(shù),要求從鍵盤上輸入十進制整數(shù)(假定范圍0~65535),然后轉(zhuǎn)換成十六進制數(shù)來存儲?!窘獯稹繌逆I盤輸入的十進制數(shù)實際上是數(shù)字字符對應(yīng)的ASCII碼,所以先要把ASCII碼轉(zhuǎn)換成0~9的數(shù)值,然后還要乘以每一位的權(quán)值。DATA SEGMENT BUFDB10 ;接受字符串輸入的空間大小 DB? ;實際輸入的字符個數(shù),待填入 DB10DUP(?) DATA1DW? ;存儲對應(yīng)的十六進制結(jié)果DATA ENDSSTACK SEGMENT DB100DUP(?) TOP LABELWORDSTACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOVAX,DATA MOVDS,AX MOVES,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSETTOP MOVDX,OFFSETBUF ;接收鍵盤輸入的數(shù)字字符 MOVAH,0AH INT21H LEA SI,BUF INC SI ;SI指向字符實際個數(shù) MOVCL,[SI] ;將字符實際個數(shù)送入CX MOVCH,0 INCSI ;SI指向最高位數(shù)字 MOVAX,0AGAIN: MOVDX,10 MULDX ;乘以位權(quán)10 MOVDH,0 MOVDL,[SI] AND DL,0FH ;ASCII碼轉(zhuǎn)換成十六進制 ADD AX,DX INC SI ;取一下位數(shù)字 LOOPAGAIN MOVDATA1,AX MOVAX,4C00H INT 21HCODE ENDS END START4-4編寫程序?qū)⒆肿兞恐械臒o符號二進制數(shù)轉(zhuǎn)換成ASCII字符串輸出?!窘獯稹咳绻枰敵龆M制位串,需要將每一個二進制位轉(zhuǎn)換成對應(yīng)的ASCII碼。DATA SEGMENT DATA1 DW12F3H ;字變量 STRING DBSIZEDATA1*8DUP(?),'$'DATA ENDSSTACK SEGMENT DB100DUP(?) TOPLABELWORDSTACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOVAX,DATA MOVDS,AX MOVES,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSETTOP LEADI,STRING MOVCX,LENGTHSTRING ;LENGTHSTRING等于16 MOVBX,DATA1AGAIN: RCLBX,1 ;移出一位置CF,判斷是0還是1 JC L1 MOVAL,30H JMP NEXTL1: MOVAL,31HNEXT: MOV[DI],AL INCDI LOOPAGAIN LEADX,STRING ;顯示二進制字符串 MOVAH,09H INT21H MOVAX,4C00H INT 21HCODE ENDS END START4-5從鍵盤輸入一個長度為10的字符串,用冒泡法對其從小到大進行排序,并在屏幕上輸出排序結(jié)果,要求將排序定義成子程序,主程序和子程序在同一段內(nèi)?!窘獯稹緿ATA SEGMENT BUF DB10DUP(?) LEN=($-BUF) MESS1 DB'Input10characterswhichwillbesorted:$' MESS2 DB'sorthavecompleted,resultis:$' CRLF DB0AH,0DH,'$' ;回車換行DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVDX,OFFSETMESS1 ;顯示提示信息1 MOVAH,09H INT21H MOVDX,OFFSETCRLF ;回車換行 MOVAH,09H INT21H MOVCX,LEN LEABX,BUFINPUT: MOVAH,01H ;從鍵盤接收帶排序的10個字符 INT21H MOV[BX],AL INCBX MOVAH,02H ;顯示時字符之間用空格隔開 MOVDL,20H INT 21H LOOPINPUT MOVDX,OFFSETCRLF ;回車換行 MOVAH,09H INT 21H MOVCX,LEN MOVBX,OFFSETBUF CALLBUBBLE ;調(diào)用冒泡排序子程序 MOVAH,09H MOVDX,OFFSETMESS2 ;顯示提示信息1 INT21H MOVBX,OFFSETBUF MOVCX,LENAGAIN: MOVDL,[BX] ;顯示排序后的10個字符 MOVAH,02H INT 21H INC BX MOVAH,02H ;顯示時字符之間用空格隔開 MOVDL,20H INT 21H LOOPAGAINEXIT: MOVAH,4CH INT21HBUBBLE PROC ;冒泡排序子程序 DEC CXCYCLE1: PUSHCX ;外層循環(huán),每執(zhí)行一輪,最大的數(shù)值排到該輪的最后,共執(zhí)行9次 MOVSI,BXCYCLE2: MOVAL,[SI] ;內(nèi)存循環(huán),第i輪執(zhí)行9-i次 CMPAL,[SI+1] JBECONTINUE XCHGAL,[SI+1] MOV[SI],AL ;如果當(dāng)前元素大于下一個元素則交換CONTINUE:INC SI LOOPCYCLE2 POPCX LOOPCYCLE1 RETBUBBLE ENDPCODE ENDS ENDSTART4-6編寫程序求某數(shù)據(jù)區(qū)中無符號字?jǐn)?shù)據(jù)的最大值和最小值,結(jié)果送入RESULT單元。要求:最大值和最小值分別用于子程序計算,主程序和子程序之間分別用:(1)寄存器傳遞參數(shù);(2)存儲單元傳遞參數(shù);(3)堆棧傳遞參數(shù)?!窘獯稹?1)DATA SEGMENT BUFDW123,67,88,53,12,90,99,0 LEN=($-BUF)/2 RESULT DW2DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX LEASI,BUF ;SI用于將BUF首地址傳遞給子程序 MOVCX,LEN ;CX用于循環(huán)次數(shù)傳遞給子程序 CALLMAX LEA SI,BUF ;SI用于將BUF首地址傳遞給子程序 MOVCX,LEN ;CX用于循環(huán)次數(shù)傳遞給子程序 CALLMIN MOVRESULT,BX ;將最大值送入RESULT處的字?jǐn)?shù)據(jù) MOVRESULT+2,DX ;將最小值送入RESULT+2處的字?jǐn)?shù)據(jù)EXIT: MOVAX,4C00H INT21HMAX PROC MOVBX,[SI] ;取第一個數(shù)至BX,BX存放最大值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個數(shù)據(jù)MAX1: MOVAX,[SI] ;取1個字?jǐn)?shù)據(jù)至AX中 CMPAX,BX JNANEXT1 ;AX不高于BX,與下一個比較 XCHGAX,BX ;否則將較大的數(shù)據(jù)送至BXNEXT1: ADDSI,2 ;SI指向下一個數(shù)據(jù) LOOPMAX1 RETMAX ENDPMINP ROC MOVDX,[SI] ;取第一個數(shù)至DX,DX存放最小值 DECCX ;字?jǐn)?shù)據(jù)減1 ADD SI,2 ;SI指向下一個數(shù)據(jù)MIN1: MOVAX,[SI] ;取1個字?jǐn)?shù)據(jù)至AX中 CMPAX,DX JNBNEXT2 ;AX不低于DX,與下一個比較 XCHGAX,DX ;否則將較小的數(shù)據(jù)送至DXNEXT2: ADDSI,2 LOOPMIN1 RETMIN ENDPCODE ENDS ENDSTART(2)DATA SEGMENT BUF DW123,67,88,53,12,90,99,0 LEN=($-BUF)/2 RESULT DW2DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX CALLMAX CALLMINEXIT: MOVAX,4C00H INT21HMAX PROC LEASI,BUF ;SI取BUF首地址 MOVCX,LEN ;CX取BUF長度 MOVBX,[SI] ;取第一個數(shù)至BX,BX存放最大值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個數(shù)據(jù)MAX1: MOVAX,[SI] ;取1個字?jǐn)?shù)據(jù)至AX中 CMPAX,BX JNANEXT1 ;AX不高于BX,與下一個比較 XCHGAX,BX ;否則將較大的數(shù)據(jù)送至BXNEXT1: ADD SI,2 ;SI指向下一個數(shù)據(jù) LOOPMAX1 MOVRESULT,BX ;將最大值送入RESULT處的字?jǐn)?shù)據(jù) RETMAX ENDPMIN PROC LEASI,BUF ;SI取BUF首地址 MOVCX,LEN ;CX取BUF長度 MOVDX,[SI] ;取第一個數(shù)至DX,DX存放最小值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個數(shù)據(jù)MIN1: MOVAX,[SI] ;取1個字?jǐn)?shù)據(jù)至AX中 CMPAX,DX JNBNEXT2 ;AX不低于DX,與下一個比較 XCHGAX,DX ;否則將較小的數(shù)據(jù)送至DXNEXT2: ADDSI,2 LOOPMIN1 MOVRESULT+2,DX ;將最小值送入RESULT+2處的字?jǐn)?shù)據(jù) RETMIN ENDPCODE ENDS ENDSTART(3)DATA SEGMENT BUF DW123,67,88,53,12,90,99,0 LEN=($-BUF)/2 RESULT DW2DUP(?)DATA ENDSSTACK SEGMENT DW 100DUP(?) TOP LABEL WORDSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSETTOP MOVAX,OFFSETBUF ;入口參數(shù)進棧 PUSHAX MOVAX,LEN PUSHAX CALLMAX POP RESULT ;最大值出棧 MOVAX,OFFSETBUF ;入口參數(shù)進棧 PUSHAX MOVAX,LEN PUSHAX CALLMIN POP RESULT+2 ;最小值出棧EXIT: MOVAX,4C00H INT21HMAX PROC PUSHBP MOVBP,SP PUSHSI PUSHAX PUSHBX PUSHCX PUSHF MOVSI,[BP+6] MOVCX,[BP+4] MOVBX,[SI] ;取第一個數(shù)至BX,BX存放最大值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個數(shù)據(jù)MAX1: MOVAX,[SI] ;取1個字?jǐn)?shù)據(jù)至AX中 CMPAX,BX JNANEXT1 ;AX不高于BX,與下一個比較 XCHGAX,BX ;否則將較大的數(shù)據(jù)送至BXNEXT1: ADDSI,2 ;SI指向下一個數(shù)據(jù) LOOPMAX1 MOV[BP+6],BX ;最大值進棧以便傳遞回主程序 POPF POPCX POPBX POPAX POPSI POPBP RET2 ;返回后SP指向最大值MAX ENDPMIN PROC PUSHBP MOVBP,SP PUSHSI PUSHAX PUSHBX PUSHCX PUSHF MOVSI,[BP+6] MOVCX,[BP+4] MOVBX,[SI] ;取第一個數(shù)至BX,BX存放最小值 DEC CX ;字?jǐn)?shù)據(jù)減1 ADD SI,2 ;SI指向下一個數(shù)據(jù)MIN1: MOVAX,[SI] ;取1個字?jǐn)?shù)據(jù)至AX中 CMPAX,BXJNBNEXT2 ;AX不低于BX,與下一個比較 XCHGAX,BX ;否則將較小的數(shù)據(jù)送至BXNEXT2: ADDSI,2 ;SI指向下一個數(shù)據(jù) LOOPMIN1 MOV[BP+6],BX ;最小值進棧以便傳遞回主程序 POPF POP CX POP BX POP AX POP SI POP BP RET2 ;返回后SP指向最小值MIN ENDPCODE ENDS ENDSTART4-7設(shè)有兩個長度相等的字符串分別放在以STR1和STR2為首地址的數(shù)據(jù)區(qū)中,試編寫程序檢查這兩個字符串是否相同。若相同,標(biāo)志變量FLAG設(shè)置為0,否則設(shè)置為-1?!窘獯稹緿ATA SEGMENT STR1DB'abcdefgh' STR2DB'abcdefgh' LENEQUSTR2-STR1 FLAGDB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,SEGSTR1 MOVDS,AX MOVES,AX LEASI,STR1 ;置源串偏移地址 LEADI,STR2 ;置目的串偏移地址 MOVCX,LEN ;置串長度 CLD ;方向標(biāo)志復(fù)位 REPECMPSB ;字符串傳送 JNENOEQUAL ;有一個字符不相等說明兩個串不等 MOVFLAG,0 JMPEXITNOEQUAL:MOVFLAG,-1EXIT: MOVAX,4C00H INT21HCODE ENDS ENDSTART4-8某程序可以從鍵盤接收命令(0~5),分別轉(zhuǎn)向6個子程序,子程序入口地址分別為P0~P5,編寫程序,用跳轉(zhuǎn)表實現(xiàn)分支結(jié)構(gòu)?!窘獯稹考僭O(shè)主程序和子程序不在同一個代碼段中DATA SEGMENT ORG 1000H PRMT DB 'PLEASEINPUTYOURCHOICE(0~9ORQ/q):','$' CHOICE DB? ER DB 'ERROR',0AH,0DH,'$' EX DB 'QUIT',0AH,0DH,'$' PMT0 DB'ThisisaprocedureP0',0AH,0DH,'$' PMT1 DB'ThisisaprocedureP1',0AH,0DH,'$' PMT2 DB'ThisisaprocedureP2',0AH,0DH,'$' PMT3 DB'ThisisaprocedureP3',0AH,0DH,'$' PMT4 DB'ThisisaprocedureP4',0AH,0DH,'$' PMT5 DB'ThisisaprocedureP5',0AH,0DH,'$' AD DB 0AH,0DH,'$' ;回車換行 JADT DD P0 ;跳轉(zhuǎn)表 DD P1 DD P2 DD P3 DD P4 DD P5DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AXDO: MOVAH,9 ;輸出提示信息 MOVDX,OFFSETPRMT INT21H MOVAH,01H ;接收鍵盤輸入字符 INT21H MOVCHOICE,AL MOVAH,9 ;輸出回車換行 MOVDX,OFFSETAD INT21H MOVAL,CHOICE ;判斷是否是退出鍵 CMPAL,'Q' JEEXIT CMPAL,'q' JEEXIT CMPAL,30H ;判斷是否是數(shù)字鍵 JBERROR CMPAL,35H JAERROR SUBAL,30H ;計算數(shù)字鍵對應(yīng)下標(biāo) MOVAH,0 MOVCL,2 SHLAX,CL ;AL*4 MOVDI,AX ;得到偏移量 CALLJADT[DI] JMPDOERROR: MOVAH,9 ;輸出錯誤提示信息 MOVDX,OFFSETER INT21H JMPDO EXIT: MOVAH,9 ;輸出退出信息 MOVDX,OFFSETEX INT21H MOVAH,4CH INT21HCODE ENDSCCODE SEGMENT ASSUMECS:CCODE P0 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT0 INT21H RETFP0 ENDP P1 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT1 INT21H RETFP1 ENDPP2 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT2 INT21H RETFP2 ENDPP3 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT3 INT21H RETFP3 ENDPP4 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT4 INT21H RETFP4 ENDPP5 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT5 INT21H RETFP5 ENDPCCODE ENDS END START4-9編寫程序計算N!(N=0~6),N由鍵盤輸入,結(jié)果輸出到屏幕上?!窘獯稹緿ATA SEGMENT P1DB'InputthenumberN:(0~6)','$' ;提示輸入信息 P2DB'Theresultis:','$' ;提示輸出結(jié)果 P3DB

溫馨提示

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

評論

0/150

提交評論