Freexploit: Data Segment M2 DB '0'; Ten M1 DB '0'; Differential DB '; Interval S2 DB' 0 '; Second Ten S1 DB' 0 '; second DB ':'; Interval MS2 DB '0'; percent seconds MS1 DB '0'; very second Row DB 0; Route Data Endsstack Segment DW 16 DUP (0) Stack Ends Code Segment Assume CS: CODE , DS: DATA, SS: StackStart: Call CLall2; Call clear full screen AG: Call clear; call clear display section screen call list; call display call second; call a second delay MOV AH, 0BH; detect a key button? INT 21H CMP AL, 00H; Al = 0, key Press JZ AG; key presses, turn AG MOV AH, 08H; Key, read key value Al Int 21h CMP Al, 'n' jnz end1 nao: Call Dingshi; call timed subroutine JMP AG END1: CMP Al, 's' JNZ G1 CALL FAR PTR MB JMP AG G1: CMP Al, 1BH JNZ AG MOV AH, 4CH INT 21h; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------- Date List Proc Near
Push AX Push BX Push CX Push DX
MOV AH, 2AH INT 21H; System Function Call, Read System Date Push DX; Push DX Forte MOV DL, 0AGAIN1: SUB CX, 03E8H; CX Save Year, CX-1000 JS Next1; CX is a NexT1 INC DL; Otherwise, DL 1 JMP AGAIN1; Jump to CX-1000Next1: Add CX, 03E8H; CX 1000 Send CX Add DL, 30H MOV AH, 02H INT 21H; Display DL, MOV DL, 0; DL Clear Again2: SUB CX, 0064H; CX-100 JS next2 Inc DL JMP AGAIN2NEXT2: ADD CX, 0064H Add DL, 30H MOV AH, 02H INT 21H; Display DL, That is, CX's 100 MOV DL, 0 AGAIN3: SUB CX, 000AH; CX-10 JS Next3 Inc DL JMP Again3 Next3: Add CX, 000AH Add DL, 30H MOV AH, 02H INT 21H; Show DL, Ten ADD CL, 30H MOV DL, CL MOV AH, 02H INT 21h Displaying CL DL, '-' MOV AH, 02H INT 21H; Display "-" POP DX; pops up DX MOV BL, DL; send DL to BL MOV DL, 0; clear DL Clear Again4: Sub DH , 000AH; DH, DH-10 JS Next4 Inc DL JMP AGAIN4 Next4: Add DH, 000AH Add DL, 30H MOV AH, 02H INT 21H; Show DH Ten, the 10th ADD DH, 30H MOV DL, DH MOV AH, 02H INT 21H; Display DH Dial MOV DL, '-'
MOV AH, 02H INT 21h MOV DL, 0AGAIN5: SUB BL, 000AH; DL Save Day JS Next5 Inc DL JMP Again5 Next5: Add BL, 000AH Add DL, 30H MOV AH, 02H INT 21h Add BL, 30H MOV DL, BL MOV AH, 02H INT 21h MOV DL, ''; Show space MOV AH, 02H INT 21h; ------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------- Time MOV AH, 2CH; System Function Call, Read System Time INT 21h Push DX MOV DL, 0A1: SUB CH, 000AH; CH Save Hour JS N1 Inc DL JMP A1 N1: ADD CH, 000AH Add DL, 30H MOV AH, 02H INT 21H ADD CH, 30H MOV DL, CH MOV AH, 02H INT 21H MOV DL, ':' MOV AH, 02H INT 21H; Display ":" MOV DL, 0A2: SUB Cl, 000AH; CL Save Minute JS N2 INC DL JMP A2 N2: Add Cl, 000AH ADD DL, 30H MOV AH, 02H INT 21h Add Cl, 30H MOV DL, CL MOV AH, 02H INT 21H MOV DL, ':' ; Display ":" MOV AH, 02H INT 21h POP DX MOV DL, 0 A3: SUB DH, 000AH; DH Anti-second JS N3 Inc DL JMP A3 N3: Add DH, 000AH Add DL, 30H MOV AH, 02H INT 21h Add DH, 30H MOV DL, DH MOV AH, 02H INT 21h
POP DX POP CX POP BX POP AX Retlist Endp; ---------------------------------- Timers Dingshi Proc Near Push AX Push BX Push CX Push DX Call Clear; Call Clear Display Some Screen MOV DL, 'I' MOV AH, 02H INT 21H MOV DL, 'N' MOV AH, 02H INT 21HMOV AX, DATA MOV DX, AX MOV AH, 01H INT 21h Sub Al, 30H MOV BH, Al Mov Ah, 01H INT 21h Sub Al, 30H MOV BL, Al Mov DL, ':' MOV AH, 02H INT 21h MOV AH, 01H INT 21h SUB Al, 30H MOV DH, Al Mov AH, 01H INT 21h SUB Al, 30H MOV DL, Al; Deposit Data, BHBL: DHDL PUSH DX; ---------------------------------------------------------------------------------------------------------------- ------------------ Hour's ten judgment Shi10: MOV AH, 2CH INT 21H MOV DL, 0DAO1: SUB CH, 0AH JS DAO2 INC DL JMP DAO1DAO2: CMP BH , DL; Judging the ten jnz shi10; ------------------------------------- - hours Judging Shi: Mov Ah, 2CH INT 21h MOV DL, 0 DAO3: SUB CH, 0AH JMP DAO3 DAO4: ADD CH, 0AH CMP CH, BL; Judgment Hours JNZ SHI
; ------------------------------------------ minute ten Judging FEN10: MOV AH, 2CH INT 21H MOV DL, 0DAO5: SUB CL, 0AH JS DAO6 INC DL JMP DAO5 DAO6: MOV BL, DL; send ten bits in DL to BL POP DX; will input DH, DL Pop-up CMP BL, DH; Judgment Ten Push DX JNZ FEN10; -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------- Minute Dragonfly FEN: MOV AH, 2CH INT 21h MOV DL, 0DAO7: SUB CL, 0AH JS DAO8 JMP DAO7 DAO8: Add Cl, 0ah Pop DXCMP CL, DL; Judgment Division Push DX JNZ FENPOP DXMOV DL, 'S'MOV AH, 02HINT 21HMOV DL,' T'MOV AH, 02HINT 21HMOV DL, 'O'MOV AH, 02HINT 21HMOV DL,' P'MOV AH, 02HINT 21H; End of Timed, Show StopPop DXPOP CXPOP BXPOP AXRET DINGSHI ENDP; ------------------------------ Second PROC NEAR; 1 second delay subroutine Push AX Push BX Push DX MOV AH, 00H INT 1AH; Reading unit Add DX, 1 MOV BX, DX L1: MOV AH, 00H INT 1AH CMP DX, BX; over 1 second? , No, continue to accumulate JNZ L1 POP DX POP POP AX RET Second Endp; --------------------------------- ---- Clear Proc Near; Save Registers Push Ax Push Bx Push CX Push Dx; Clear Screen
; 0; Lower Right ROW MOV DL, 20; LOWER LEFT Column Int 10h; Call Video ROM; Locate MOV CH, 0 MOV CL, 24 MOV AH, 01H INT 10H MOV DH, 0 MOV DL, 0 MOV BH, 0 MOV AH, 02H INT 10H; Locate Cursor MOV DX, 0 MOV AH, 2; To Locate Column INT 10H; Call Video Bios; Restore Registers Pop DX Pop Cx Pop Bx Pop Ax RetClear Endp; -------------- ------------ CLALL2 Proc Near Push AX Push Bx Push CX Push DX MOV AH, 6; To Scroll Up Screen Mov Al, 0; Blank Screen MoV Bh, 7; Blank Line Mov Ch, 0 Upper Left Row Mov Cl, 0; Upper Left Column MoV DH, 24; Lower Right Row Mov DL, 79; LOWER LEFT Column INT 10H; Call Video Bios Pop DX Pop CX Pop Bx Pop Ax RetCLall2 Endp; -------------------------------------------------------------------------------------------------------------------------------------- ------------ MB Proc Far Push AX Push BX Push CX Push DX
MOV AH, 0; detect the keyboard, the key is pressed to start int 16h; set the interrupt vector CLI; clear the interrupt flag CLD; Clear direction flag MOV AX, 0000H; Set Interrupt Vector MOV DS, AX MOV SI, 0020H Lodsw Mov BX, Ax Lodsw Push Ax; Push Bx; Mov AX, Data; MOV DS, AX MOV AX, 0000H; MOV ES, AX; MOV Di, 0020H; MOV AX, Offset Timer; Stosw Mov AX, SEG TIMER; Stosw; Initialization 8253 MOV Al, 00110110B; 0 counter, work mode 3, write the best valid byte, write the highest effective byte OUT 43H, Al Mov AX, 10923; set the initial value OUT 40H, Al Mov Al, Ah OUT 40H, Al IN Al, 21h Push Ax Mov Al, 0FCH; Interrupt Shield, Only the keyboard IRQ1 and electronic clock reference IRQ0 open interrupt OUT 21H, Al STI
Call clearll: Call clear1; positioning clear screen call show; display stopwatch MOV AH, 0BH; detects whether the key is pressed? INT 21H CMP AL, 00H; Al = 0, key Press JZ Forever; Press, turn LOP MOV AH, 08H; By, read key value Al Int 21h CMP Al, 'd' jz exit; is D exiting CMP Al, 'm'; is M recorded data JNZ G Mov AH, 2 MOV BH, 0 MOV DH, ROW MOV DL, 25 INT 10h Call show inc ROW G: CMP Al, 'R'; is R, restarted JNZ Forever MOV M2, '0'; zero MOV M1, '0' MOV S2, '0' MOV S1, '0' MOV MS2, '0' MOV MS1, '0' MOV ROW, 0 CALL CLEARALL JMP Forever ; Display stopwatch exit: POP DX POP CX Pop BX pop AX RET MB ENDP; ------------------------------- ---------------- Show Proc Near Push AX Push BX Push CX MOV BX, OFFSET M2; Read M2 First Address MOV CX, 8; RC 8 DISP1: MOV Al, [BX ]; Take the M2 value Call Dispchr corresponding to BX; display [BX] Inc BX; point to the next storage unit Loop DISP1 MOV Al, 0DH; Enter Call Dispchr POP CX Pop BX Pop Ax Retshow Endp
; ---------------------------------------- Clear1 Proc Near Push AX Push BX Push CX Push DX; Clear Screen; Wide MOV AH, 7; To Scroll Up Screen Mov Al, 0; Blank Screen MOV BH, 70H; Blank Line Mov CH, 1; Upper Left Row Mov Cl, 0; Upper Left Column MoV DH, 0; Lower Right Row Mov DL, 7; LOWER LEFT Column INT 10H; Call Video Bios; DIN Wei MoV CH, 0 MOV CL, 24 MOV DH, ROW MOV DL, 0 MOV BH, 0 MOV AH, 02H INT 10H; LOCATE CURSOR MOV DX, 0 MOV AH, 2; To Locate Column Int 10h; Call Video Bios Pop DX Pop Cx Pop Bx Pop Ax Retclear1 Endp; -------------------------------------------------------------------------------------------------- ---- Clearall Proc Near Push Ax Push Bx Push CX Push DX
Mov AH, 6; To Scroll Up Screen Mov Al, 0; Blank Screen MoV BH, 7; Blank Line Mov CH, 0; Upper Left Row Mov Cl, 0; Upper Left Column MoV DH, 24; Lower Right Row Mov DL, 79; Lower Left Column Int 10h; Call Video Bios Pop DX Pop CX Pop Bx Pop Ax Retclerall Endp; -------------------------------------------------------------------------------------------------------------------------------------- -
Dispchr proc near
Push BX MOV BX, 0; display MOV AH, 14 in page 0; call BIOS INT 10H Pop BX Retdispchr Endp; ------------------------- -----
Timer Proc Far
PUSH AX INC MS1 CMP MS1, '9' Jle Timext MOV MS1, '0'; greater than '9', MS1 Bit Clear INC MS2 CMP MS2, '9' JL TIMEXT MOV MS2, '0'; greater than '9', MS2 bit clear INC S1 CMP S1, '9' JLE TIMEXT MOV S1, '0'; greater than '9', S1-bit clearance INC S2 CMP S2, '6' JL TIMEXT MOV S2, '0'; greater than '5 ', S2-bit clearance INC M1 CMP M1,' 9 'Jle Timext M1,' 0 '; greater than' 9 ', M1 Clear INC M2 CMP M2,' 6 'JL TIMEXT MOV M2,' 0 '; greater than '5', M2 Clear Timext: MOV Al, 20H OUT 20H, Al Pop AX IRettimer Endp; MOV AH, 4CH; INT 21H
Code Ends End START