?? clock.asm
字號:
CODE SEGMENT
ASSUME CS:CODE , DS:CODE
BEGIN:
JMP INIT ;跳轉(zhuǎn)至設(shè)置中斷向量
;中斷響應(yīng)函數(shù)
TIME ELAPSED PROC FAR
MOV AX , CS
MOV DS , AX
ADD TICKS , 55
CMP TICKS , 1000
JNL DO DETAIL
IRET
DO DETAIL :
SUB TICKS , 1000
INC SEC2
CMP SEC2 , 3AH
JL PRINT
MOV SEC2 , 30H
INC SEC1
CMP SEC1 , 36H
JL PRINT
MOV SEC1 , 30H
INC MIN2
CMP MIN2 , 3AH
JL PRINT
MOV MIN2 , 30H
INC MIN1
CMP MIN1 , 36H
JL PRINT
MOV MIN1 , 30H
INC HOUR2
CMP HOUR2 , 34H
JL PRINT
CMP HOUR1 , 32H
JE COND1
CMP HOUR2 , 3AH
JL PRINT
MOV HOUR2 , 30H
INC HOUR1
JMP PRINT
COND1:
MOV HOUR2 , 30H
MOV HOUR1 , 30H
PRINT:
MOV AH , 3
MOV BH , 0
INT 10H
MOV POSR , DH
MOV POSC , DL
LEA BP , HOUR1
MOV AH , 2
MOV BH , 0
MOV DH , 0
MOV DL , 70
INT 10H
PRINT1:
MOV AH , 14
MOV AL , DS:[ BP ]
MOV BH , 0
MOV CX , 1
INT 10H
INC BP
INC NUM
CMP NUM , 8
JNE PRINT1
RETURN:
MOV AH , 2
MOV BH , 0
MOV DH , POSR
MOV DL , POSC
INT 10H
MOV NUM , 0
IRET
TIME ELAPSED ENDP
;數(shù)據(jù)結(jié)構(gòu)
TICKS DW 0 ;時間計數(shù)
HOUR1 DB 30H ;時十位
HOUR2 DB 30H ;時個位
DB ':'
MIN1 DB 30H ;分十位
MIN2 DB 30H ;分個位
DB ':'
SEC1 DB 30H ;秒十位
SEC2 DB 30H ;秒個位
NUM DB 0
POSR DB 0
POSC DB 0
LEN EQU WORD PTR ( $ - TIME ELAPSED )/2 ;計算駐留程序的長度
MENU DB 'Please select a time to start:' , 0DH , 0AH
DB '1.System time' , 0DH , 0AH
DB '2.Manual time' , 0DH , 0AH
DB 'Press any other key to Quit' , 0DH , 0AH
DB '$'
BREAK DB 0DH , 0AH , '$'
BUF DB 9
DB ?
DB 8 DUP( 0 )
;設(shè)置新的中斷向量
INIT:
MOV AX , CS
MOV DS , AX
MOV AH , 9
LEA DX , MENU
INT 21H
MOV AH , 1
INT 21H
CMP AL , 31H
JE GET SYS TIME
CMP AL , 32H
JE SET MANUAL TIME
MOV AH , 4CH
INT 21H
GET SYS TIME:
MOV AH , 0
MOV AL , 2
INT 10H
MOV AH , 2CH
INT 21H
;初始化時間
MOV AH , 0
MOV AL , CH
MOV BL , 10
DIV BL
MOV HOUR1 , AL
ADD HOUR1 , 30H
MOV HOUR2 , AH
ADD HOUR2 , 30H
MOV AH , 0
MOV AL , CL
MOV BL , 10
DIV BL
MOV MIN1 , AL
ADD MIN1 , 30H
MOV MIN2 , AH
ADD MIN2 , 30H
MOV AH , 0
MOV AL , DH
MOV BL , 10
DIV BL
MOV SEC1 , AL
ADD SEC1 , 30H
MOV SEC2 , AH
ADD SEC2 , 30H
JMP SET TIMER
SET MANUAL TIME:
LEA DX , BUF
MOV AH , 10
INT 21H
MOV BP , DX
INC BP
CMP [ BP ] ,BYTE PTR 8
JNZ SET MANUAL TIME
INC BP
MOV AL , [ BP ]
MOV HOUR1 , AL
INC BP
MOV AL , [ BP ]
MOV HOUR2 , AL
ADD BP , 2
MOV AL , [ BP ]
MOV MIN1 , AL
INC BP
MOV AL , [ BP ]
MOV MIN2 , AL
ADD BP , 2
MOV AL , [ BP ]
MOV SEC1 , AL
INC BP
MOV AL , [ BP ]
MOV SEC2 , AL
SET TIMER:
MOV DX , OFFSET TIME ELAPSED
MOV AL , 1CH ;
MOV AH , 25H
INT 21H
MOV AL , 0
MOV DX , LEN
MOV AH , 31H
INT 21H
CODE ENDS
END BEGIN
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -