一.这是一个判断某一年是否为润年的程序,运行可执行程序Ifleap.exe后,输入具体的年份,可输出是本年是否为闰年的提示信息。
DATA SEGMENT ;定义数据段INFON DB 0DH,0AH,'PLEASE INPUT A YEAR: $'Y DB 0DH,0AH,'THIS IS A LEAP YEAR! $'N DB 0DH,0AH,'THIS IS NOT A LEAP YEAR! $'W DW 0BUF DB 8DB ?DB 8 DUP(?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AXLEA DX,INFON ;在屏幕上显示提示信息MOV AH,9INT 21HLEA DX,BUF ;从键盘输入年份字符串MOV AH,10INT 21HMOV CL, [BUF+1]LEA DI,BUF+2CALL DATACATECALL IFYEARSJC A1LEA DX,NMOV AH,9INT 21HJMP EXITA1: LEA DX,YMOV AH,9INT 21HEXIT: MOV AH,4CHINT 21H二.这是一个显示系统日期和时间的程序,运行时,在出现的提示信息中输入大写字母“D”,可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序。
DATACATE PROC NEAR;PUSH CX;DEC CXLEA SI,BUF+2TT1: INC SILOOP TT1;LEA SI,CX[DI]POP CXMOV DH,30HMOV BL,10MOV AX,1L1: PUSH AXSUB BYTE PTR [SI],DHMUL BYTE PTR [SI]ADD W,AXPOP AXMUL BLDEC SILOOP L1RETDATACATE ENDPIFYEARS PROC NEARPUSH BXPUSH CXPUSH DXMOV AX,WMOV CX,AXMOV DX,0MOV BX,4DIV BXCMP DX,0JNZ LAB1MOV AX,CXMOV BX,100DIV BXCMP DX,0JNZ LAB2MOV AX,CXMOV BX,400DIV BXCMP DX,0JZ LAB2LAB1: CLCJMP LAB3LAB2: STCLAB3: POP DXPOP CXPOP BXRETIFYEARS ENDPCODE ENDSEND START三.这是一个显示系统时间的程序,运行时,在屏幕的右上角将以“时:分:秒”的形式显示本机系统的时间。
该程序只能在DOS下运行。
STACK SEGMENT STACKDW 200 DUP (?)STACK ENDSDATA SEGMENTSPACE DB 1000 DUP (' ')PATTERN DB 6 DUP (' '),0C9H,26 DUP (0CDH),0BBH,6 DUP (' ')DB 6 DUP (' '),0BAH,26 DUP (20H),0BAH,6 DUP (' ')DB 6 DUP (' '),0C8H,26 DUP (0CDH),0BCH,6 DUP (' ')DBUFFER DB 8 DUP (':'),12 DUP (' ')DBUFFER1 DB 20 DUP (' ')STR DB 0DH,0AH, 'PLEASE INPUT DATE(D) OR TIME(T) OR QUIT(Q): $' DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,0001H ;设置显示方式为40*25彩色文本方式INT 10HMOV AX,DATAMOV DS,AXMOV ES,AXMOV BP,OFFSET SPACEMOV DX,0B00HMOV CX,1000MOV BX,0040HMOV AX,1300HINT 10HMOV BP,OFFSET PATTERN ;显示矩形条MOV DX,0B00HMOV CX,120MOV BX,004EHMOV AX,1301HINT 10HLEA DX,STR ;显示提示信息INT 21HMOV AH,1 ;从键盘输入单个字符INT 21HCMP AL,44H ;AL='D'?JNE ACALL DATE ;显示系统日期A: CMP AL,54H ;AL='T'?JNE BCALL TIME ;显示系统时间B: CMP AL,51H ;AL='Q'?JNE STARTMOV AH,4CH ;返回DOS状态INT 21HDATE PROC NEAR ;显示日期子程序DISPLAY:MOV AH,2AH ;取日期INT 21HMOV SI,0MOV AX,CXMOV BX,100DIV BLMOV BL,AHCALL BCDASC1 ;日期数值转换成相应的ASCII码字符MOV AL,BLCALL BCDASC1INC SIMOV AL,DHCALL BCDASC1INC SIMOV AL,DLCALL BCDASC1MOV BP,OFFSET DBUFFER1MOV DX,0C0DHMOV BX,004EHMOV AX,1301HINT 10HMOV AH,02H ;设置光标位置MOV DX,0300HMOV BH,0INT 10HMOV BX,0018HREPEA: MOV CX,0FFFFH ;延时REPEAT:LOOP REPEATDEC BXJNZ REPEAMOV AH,01H ;读键盘缓冲区字符到AL寄存器INT 16HJE DISPLAYJMP STARTMOV AX,4C00HINT 21HRETDATE ENDPTIME PROC NEAR ;显示时间子程序DISPLAY1:MOV SI,0MOV BX,100DIV BLMOV AH,2CH ;取时间INT 21HMOV AL,CHCALL BCDASC ;将时间数值转换成ASCII码字符INC SIMOV AL,CLCALL BCDASCINC SICALL BCDASCMOV BP,OFFSET DBUFFERMOV DX,0C0DHMOV CX,20MOV BX,004EHMOV AX,1301HINT 10HMOV AH,02HMOV DX,0300HMOV BH,0INT 10HMOV BX,0018HRE: MOV CX,0FFFFHREA: LOOP READEC BXJNZ REMOV AH,01HINT 16HJE DISPLAY1JMP STARTMOV AX,4C00HINT 21HRETTIME ENDPBCDASC PROC NEAR ;时间数值转换成ASCII码字符子程序PUSH BXCBWMOV BL,10DIV BLADD AL,'0'MOV DBUFFER[SI],ALINC SIMOV DBUFFER[SI],AHINC SIPOP BXRETBCDASC ENDPBCDASC1 PROC NEAR ;日期数值转换成ASCII码字符子程序PUSH BXCBWMOV BL,10DIV BLADD AL,'0'MOV DBUFFER1[SI],ALINC SIADD AH,'0'MOV DBUFFER1[SI],AHINC SIPOP BXRETBCDASC1 ENDPCODE ENDSEND START四.这是一个网上电子表CURSOR EQU 45HATTRIB EQU 2FHCODE SEGMENTASSUME CS:CODE,DS:CODESTART:JMP GOOLDCUR DW ?OLD1C DW 2 DUP(?)NEWINT1C:PUSHFCALL DWORD PTR CS:OLD1CPUSH AXPUSH BXPUSH CXPUSH DXXOR BH,BHMOV AH,3INT 10HMOV CS:OLDCUR,DXMOV AH,2XOR BH,BHMOV DX,CURSORINT 10HMOV AH,2 ;读取系统时钟INT 1AHPUSH DXPUSH CXPOP BXPUSH BXCALL SHOWBYTECALL SHOWCOLONPOP BXXCHG BH,BLCALL SHOWBYTECALL SHOWCOLONPOP BXCALL SHOWBYTEMOV DX,CS:OLDCURMOV AH,2XOR BH,BHINT 10HPOP DXPOP CXPOP BXPOP AXIRET SHOWBYTE PROC NEARPUSH BXMOV CL,4MOV AL,BHSHR AL,CLADD AL,30HCALL SHOWCALL CURMOVEPOP BXMOV AL,BHAND AL,0FHADD AL,30HCALL SHOWCALL CURMOVERET SHOWBYTE ENDPSHOWCOLON PROC NEARMOV AL,':'CALL SHOWCALL CURMOVERET SHOWCOLON ENDPCURMOVE PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV AH,3MOV BH,0INT 10HINC DLMOV AH,2INT 10HPOP DXPOP CXPOP BXPOP AXRETCURMOVE ENDPSHOW PROC NEARPUSH AXPUSH BXPUSH CXMOV AH,09HMOV BX,ATTRIBMOV CX,1INT 10HPOP CXPOP BXPOP AXRETSHOW ENDPGO:PUSH CSPOP DSMOV AX,351CH ;取中断向量INT 21HMOV OLD1C,BX ;保存原中断向量MOV BX,ESMOV OLD1C+2,BXMOV DX,OFFSET NEWINT1C ;置新的中断向量MOV AX,251CHINT 21HMOV DX,OFFSET GOSUB DX,OFFSET STARTMOV CL,4SHR DX,CLADD DX,11HMOV AX,3100H ;结束并驻留INT 21HCODE ENDSEND STARTDATA SEGMENT;*****定义PLEASE等提示信息*****STR DB 20DB 50H,7,0,0DB 6CH,7,0,1DB 65H,7,0,1DB 61H,7,0,1DB 73H,7,0,1DB 65H, 7,0,1DB 70H,7,1,-10DB 72H,7,0,1DB 65H,7,0,1DB 73H,7,0,1DB 73H,7,0,1DB 53H,7,0,2DB 6BH,7,0,2DB 65H,7,0,1DB 79H,7,0,1DB 65H,7,0,2DB 78H,7,0,1DB 69H,7,0,1DB 74H,7,0,1DB 21H,7,0,1;*****定义0-9十个图形数字***** S0 DB 6DB 5FH,7,0,0DB 7CH,7,1,-1DB 7CH,7,1,0DB 5FH,7,0,1DB 7CH,7,0,1DB 7CH,7,-1,0SY DB 2DB 7CH,7,1,0DB 7CH,7,1,0S2 DB 5DB 5FH,7,0,0DB 7CH,7,1,1DB 5FH,7,0,-1DB 7CH,7,1,-1DB 5FH,7,0,1S3 DB 5DB 5FH,7,0,0DB 7CH,7,1,1DB 5FH,7,0,-1DB 7CH,7,1,1DB 5FH,7,0,-1S4 DB 4DB 7CH,7,1,0DB 5FH,7,0,1DB 7CH,7,1,1DB 7CH,7,-1,0S5 DB 5DB 5FH,7,0,0DB 7CH,7,1,-1DB 5FH,7,0,1DB 7CH,7,1,1DB 5FH,7,0,-1S6 DB 6DB 5FH,7,0,0DB 7CH,7,1,-1DB 5FH,7,0,1DB 7CH,7,1,1DB 5FH,7,0,-1DB 7CH,7,0,-1S7 DB 3DB 5FH,7,0,0DB 7CH,7,1,1DB 7CH,7,1,0S8 DB 7DB 7CH,7,1,0DB 5FH,7,-1,1DB 7CH,7,1,1DB 5FH,7,0,-1DB 7CH,7,1,1DB 5FH,7,0,-1DB 7CH,7,0,-1S9 DB 6DB 7CH,7,1,0DB 5FH,7,-1,1DB 7CH,7,1,1DB 5FH,7,0,-1DB 7CH,7,1,1DB 5FH,7,0,-1S11 DB 2DB 03H,7,1,0DB 03H,7,1,0 DATA ENDSSTACK SEGMENTDB 200 DUP (0) STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AH,0 ;设置显示方式MOV AL,4INT 10HMOV AH,0BH ;置彩色调板MOV BH,0MOV BL,1INT 10HMOV AH,0BH ;置彩色调板MOV BH,1MOV BL,4INT 10HMOV AH,2 ;取系统时间INT 1AHMOV AX,0MOV BX,0MOV AH,CH ;取系统时间MOV AL,CL ;保存分钟MOV BH,DH ;保存秒MOV BL,DL ;保存百分之一秒TT: PUSH AXPUSH BXMOV AH,0MOV AL,4INT 10HMOV AH,0BHMOV BH,0MOV BL,1INT 10HMOV AH,0BHMOV BH,1MOV BL,4INT 10HMOV AH,1 ;读键盘缓冲区字符INT 16HJZ WWMOV AH,8 ;从键盘输入字符INT 21HCMP AL,'S' ;输入S,结束程序JE TUWW: POP BXPOP AXCALL XIAN ;调用显示子程序PUSH AXQU: MOV AH,2 ;取系统时间INT 1AHCMP BH,DHJE QUPOP AXINC BH ;对时间进行加1CMP BH,100JL TTMOV BH,0INC ALCALL BEEPCMP AL,100JL TTMOV AL,0INC AHCMP AH,24JL TTMOV AH,0JMP TTTU: MOV AH,4CHRETXIAN PROC ;对时间值进行处理并显示的子程序PUSH SIPUSH DIPUSH DXPUSH CXPUSH BXPUSH AXPOP AXPUSH AXMOV BX,AXMOV AX,0MOV AL,BHMOV CL,4SHR AL,CLMOV BL,ALMOV DH,10MOV DL,2CALL FFPOP AXPUSH AXMOV BX,AXMOV AX,0MOV AL, BHAND AL,0FHMOV BL,ALMOV DH,10MOV DL,6CALL FFMOV DH,10MOV DL,10MOV BL,10CALL FFPUSH AX MOV CL,4 SHR AL,CL MOV BL,AL MOV DH,10 MOV DL,14 CALL FF POP AX PUSH AX AND AL ,0FH MOV BL,AL MOV DH,10 MOV DL,18 CALL FF MOV DH,10 MOV DL,22 MOV BL,10 CALL FF POP AX POP BX PUSH BX PUSH AXMOV AX,0 MOV AL,BH MOV CL,4 SHR AL,CL MOV BL,AL MOV DH,10 MOV DL,26 CALL FF POP AX POP BXPUSH AXMOV AL,BHAND AL,0FHMOV BL,ALMOV DH,10MOV DL,30CALL FFMOV DH,0MOV DL,15MOV BL,22CALL FFPOP AXPOP BXPOP CXPOP DXPOP DIPOP SIRETXIAN ENDPFF PROC ;显示具体数值PUSH AXPUSH BXPUSH CXPUSH DXCMP BL,0JE L0CMP BL,1JE L1CMP BL,2JE L2CMP BL,3JE L3CMP BL,4JE L4CMP BL,5JE L5CMP BL,6JE L6CMP BL,7JE L7CMP BL,8JE L8CMP BL,9JE L9CMP BL,10JE L10CMP BL,22JE LDL0: LEA DI,S0JMP TYL1 : LEA DI,SYJMP TYL2: LEA DI,S2JMP TYL3: LEA DI,S3JMP TYL4: LEA DI,S4JMP TYL5: LEA DI,S5JMP TYL6: LEA DI,S6JMP TYL7: LEA DI,S7JMP TYL8: LEA DI,S8JMP TYL9: LEA DI,S9L10: LEA DI,S11JMP TYLD : LEA DI,STRTY: MOV AH,0FH ;示方式INT 10HSUB CX,CXMOV CL,[DI]INC DIPLOT_NEXT: ADD DH,[DI+2]ADD DL,[DI+3]MOV AH,2INT 10HMOV AL,[DI]MOV BL,[DI+1]PUSH CXMOV CX,1MOV AH,09INT 10HPOP CXADD DI,4LOOP PLOT_NEXTPOP DXPOP CXPOP BXPOP AXMOV CX,100GG: DEC CXLOOP GGRETFF ENDPCLEAR PROCPUSH AXPUSH CXPUSH DXMOV AH,6MOV AL,0MOV BH,1INT 10HPOP DXPOP CXPOP BXPOP AXRETCLEAR ENDPBEEP PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV AL ,10110110B OUT 43H,ALMOV AX,533H OUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61HMOV AH,ALOR AL,03OUT 61H,ALSUB CX,CXMOV BL,28HG7: LOOP G7DEC BLJNZ G7MOV AL,AHOUT 61H,ALPOP DXPOP CXPOP BXPOP AX RETBEEP ENDPCODE ENDSEND START。