SUM DD ?DATA ENDS ;数据段CODE SEGMENT ;代码段ASSUMECS:CODE,DS:DATA,SS:STAC KSTART: MOVAX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SP,TOPLEA SI,ADD1LEA DI,ADD2MOV AL,[SI]ADD AL,[DI]DAAMOV BYTE PTR SUM,ALMOV AL,[SI+1]ADC AL,[DI+1]DAAMOV BYTE PTR SUM+1,ALMOV AL,[SI+2]ADC AL,[DI+2]DAAMOV BYTE PTR SUM+2,ALMOV AL,[SI+3]ADC AL,[DI+3]DAAMOV BYTE PTR SUM+3,ALMOVAX,WORD PTR SUM+2CALL DISPAXMOV AX,WORD PTR SUMCALL DISPAXMOV AH,4CHINT 21H DISPAL PROC NEAR PUSH AXPUSH CXPUSH DXPUSH AXMOV CL,4SHR AL,CLCALL CHANGMOV AH,02MOV DL,ALINT 21HPOP AXAND AL,0FHCALL CHANGMOV AH,02MOV DL,ALINT 21HPOP DXPOP CXPOP AXRETDISPAL ENDPCHANG PROC NEARCMP AL,10JNGE CHANG1ADD AL,7CHANG1: ADDAL,30HRETCHANG ENDPDISPAX PROC NEARXCHG AL,AHCALL DISPALXCHG AH,ALCALL DISPALRETDISPAX ENDPCODE ENDSEND START2. 有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
STACK SEGMENT STACKDB 256 DUP(?)STACK ENDSDATA SEGMENTDATA1 DW7800H,6832H,0000H,87H,1275 H,0EC34HSTRING1 DB 'input number:',0DH,0AH,'$'STRING2 DB 'The numbersfrom large to smallis:',0DH,0AH,'$'DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,ES:DATA, SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA DX,STRING1MOV AH,09HINT 21HMOV CX,6 LEA SI,DATA1 L1: MOV AX,[SI] ADD SI,2CALL DISPAX CALL DISPCR LOOP L1MOV CX,5LEA SI,DATA1 ADD SI,10LP1: PUSH CXPUSH SILP2: MOV AX,[SI] CMP AX,[SI-2] JBE NOXCHG XCHG AX,[SI-2] MOV [SI],AXNOXCHG: DEC SIDEC SILOOP LP2POP SIPOP CXLOOP LP1LEA DX,STRING2 MOV AH,09HINT 21HMOV CX,6LEA SI,DATA1L2: MOV AX,[SI]ADD SI,2CALL DISPAXCALL DISPCRLOOP L2 MOV AH,4CH INT 21H DISPAL PROCPUSH AXPUSH CXPUSH DXPUSH AXMOV CL,4SHR AL,CLCALL CHANG MOV AH,02H MOV DL,AL INT 21HPOP AXAND AX,0FH CALL CHANGMOV AH,02HMOV DL,ALINT 21HPOP DXPOP CXPOP AXRETDISPAL ENDP CHANG PROCCMP AL,10JNGE CHANG1ADD AL,7 CHANG1: ADD AL,30H RETCHANG ENDP DISPAX PROC XCHG AL,AH CALL DISPAL XCHG AH,AL CALL DISPAL RET DISPAX ENDP DISPCR PROCPUSH AXPUSH DXMOV AH,2MOV DL,0AH INT 21HMOV AH,2MOV DL,0DH INT 21HPOP DXPOP AX RET DISPCR ENDPCODE ENDSEND START3.编写如下程序,并在机器上调试成功。
程序采用菜单式选择,可以接收用户从键盘输入的四个命令(1-4),各命令功能分别为:(1)按下“1”键,完成字符串小写字母变成大写字母。
(2)按下“2”键,完成找最大值(3)按下“3”键,完成排序(4)按下“4”键,结束程序运行,返回系统提示符。
DISPL MACRO STRPUSH DXPUSH AXLEA DX,STRMOV AH,09HINT 21HPOP AXPOP DXENDMISCONTINUE MACRO L DISPS 15,10,SMENU MOV AH,08HINT 21HCMP AL,1BHJNE LJMP MAINENDMCURSOR MACRO CURX,CURY PUSH AXPUSH BXPUSH DXMOV AH,02HMOV DH,CURXMOV DL,CURYMOV BH,0INT 10HPOP DXPOP BXPOP AXENDMDISPS MACRO X,Y,STRPUSH AXPUSH DXMOV AH,02HMOV BH,00HMOV DH,XMOV DL,YINT 10HLEA DX,STRMOV AH,09HINT 21HPOP DXPOP BXPOP AXENDMSCROLL MACRO N,ULR,ULC,LRR,LRC,ATT PUSH AXPUSH CXPUSH DXMOV AH,06H MOV AL,NMOV CH,ULR MOV CL,ULC MOV DH,LRR MOV DL,LRC MOV BH,ATT INT 10HPOP DXPOP CXPOP BXPOP AX ENDMPREP MACRO TLEA SI,INBUF+1LEA DI,OUTBUFSCROLL 21,2,0,22,79,0FHDISPS 3,20,TDISPS 6,2,CAPIONDISPS 8,2,INCAPMOV AH,0AHINT 21HMOV CH,0MOV CL,[SI]INC SIENDMSTACK SEGMENT STACK 'STACK' DB 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBASE DW MAIN,LTC,FMV,SORTS,EXITWELCM DB 'Welcome to this program!$'MMENUC DB 'Please input the number!$'MMENU1 DB ' 1 -Lowercase Letters To Capital Letters$'MMENU2 DB ' 2 -Find The Maximum figure$'MMENU3 DB ' 3 -Sort$'MMENU4 DB ' 4 -Exit!$'SMENU DB 'Press Any Key To restart,Press "ESC" To Return To Main Menu!$'WROCAP DB 'WRONG! You have press " " key! Please input a number between 1 and 4!$'CAPION DB 'Please Input Your Strings and End With "Enter" Key!$'INCAP DB 'Your Input Is: $'INBUF DB 100DB ?DB 100 DUP(?)OUTCAP DB ' My Output Is: $'OUTBUF DB 100 DUP(?)MAXCAP DB 'The char of max ASCII is: .$'ERRINF DB 'ERROR! Please check the format you input!$' TDINV DB ' Invalid time data! Input again!$'NODATCAP DB ' You have input nothing!$'TIME DB 8 DUP (':'),12 DUP (' ')DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPLEA DX,INBUFCLCMAIN: SCROLL 0,0,0,24,79,0 SCROLL 25,0,0,24,79,50HSCROLL 21,2,0,22,79,0FHDISPS 8,20,MMENUCDISPS 10,20,MMENU1DISPS 12,20,MMENU2DISPS 14,20,MMENU3DISPS 16,20,MMENU4 ML: CURSOR 19,1DHMOV AH,01HINT 21HCMP AL,31HJL ERRORCMP AL,35HJG ERRORAND AX,00FHLEA BX,BASESHL AL,1ADD BX,AXJMP WORD PTR [BX] ; CMP AL,'1'; JE LTC; CMP AL,'2'; JE FMV; CMP AL,'3'; JE SORTS; CMP AL,'4'; JE EXITERROR: CMP AL,0DHJE MCRMOV [WROCAP+23],AL ;Other charMOV [WROCAP+24],' 'JMP DMCR: MOV WORD PTR [WROCAP+23],'RC'D: DISPS 20,5,WROCAP ;Show the wrong information JMP MLLTC: CALL LLTOCLISCONTINUE LTCFMV: CALL FMAXVISCONTINUE FMVSORTS: CALL SORTISCONTINUE SORTSEXIT: SCROLL 0,0,0,24,79,0MOV AH,4CHINT 21H LLTOCL PROC REFLASHL:PREP MMENU1CMP CL,0JE REFLASHLLL1: MOV AL,[SI]CMP AL,'a'JB MTOB ;NO CHANGE CMP AL,'z'JA MTOBSUB AL,20H ;Convert MTOB: MOV [DI],ALINC SIINC DILOOP LL1MOV BYTE PTR [DI],'$' DISPS 10,2,OUTCAPDISPS 10,17,OUTBUF RETLLTOCL ENDPFMAXV PROCPUSH BX REFLASHF:PREP MMENU2 CMP CL,0JE REFLASHFMOV AL,0FL1: CMP AL,[SI]JA NEXTMOV AL,[SI]NEXT: INC SILOOP FL1MOV [MAXCAP+26],AL DISPS 10,2,MAXCAPPOP BXRETFMAXV ENDPSORT PROCPREP MMENU3DEC CXADD SI,CXMOV BYTE PTR [SI+1],'$' LP1: PUSH CXPUSH SILP2:MOV AL,[SI]CMP AL,[SI-1]JBE NOXCHGXCHG AL,[SI-1]MOV [SI],AL NOXCHG: DEC SILOOP LP2POP SIPOP CXLOOP LP1DISPS 10,2,OUTCAP DISPS 10,17,INBUF[2] RETSORT ENDP BCDASC PROC NEAR PUSH BXCBWMOV BL,10DIV BLADD AL,30HMOV TIME[SI],AL INC SIADD AH,30HMOV TIME[SI],AH INC SIPOP BXRETBCDASC ENDP CODE ENDSEND START按下4键。