?? a.asm
字號:
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
INFO DB 'MODE1:MIAOBIAO MODE2:TIMER R:RESET ESC:OVER H:HOLD J:GOON SP:WRITE CR:READ PLEASE CHOOSE 1 OR 2 $'
INFO2 DB 'PLEASE INPUT TIME:$'
FLAG DB 0
FLAG1 DB 0
INPUT DB 9,'0','0','0',':','0','0',':','0','0'
TENMINUTE DB '0'
MINUTE DB '0'
DB ':'
TENSECOND DB '0'
SECOND DB '0'
DB ':'
SECOND1 DB '0'
SECOND2 DB '0'
DB ' '
YEAR DB 0
YEAR1 DB 0
YEAR2 DB 0
YEAR3 DB 0
DB '-'
MONTH DB 0
MONTH1 DB 0
DB '-'
DATE DB 0
DATE1 DB 0
JILU DB 'N','O','N','E',256 dup ('$')
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
CALL CLRSC
MOV AH,09H ;顯示初始信息
MOV DX,OFFSET INFO
INT 21H
MOV AL,0DH
CALL DISPCHAR
CHOOSE:
MOV AH,8 ;等待模式選擇
INT 21H
CMP AL,'1'
JE CHRONOGRAPH
CMP AL,'2'
JE TIMER
CMP AL,01BH
JE OVER1
JMP CHOOSE
OVER1: ;跳出程序
MOV AH,4CH
INT 21H
CHRONOGRAPH: ;進入秒表模式
MOV FLAG,1
JMP GO
TIMER: ;進入定時模式
MOV FLAG,0
CALL CLRSC
MOV AH,09H
MOV DX,OFFSET INFO2 ;輸入提示信息
INT 21H
MOV DX,OFFSET INPUT ;輸入時間
MOV AH,0AH
INT 21H
MOV SI,OFFSET INPUT+2
MOV AL,[SI]
MOV TENMINUTE ,AL
MOV AL,[SI+1]
MOV MINUTE , AL
MOV AL,[SI+3]
MOV TENSECOND , AL
MOV AL,[SI+4]
MOV SECOND ,AL
MOV AL,[SI+6]
MOV SECOND1, AL
MOV AL,[SI+7]
MOV SECOND2, AL
GO:
PUSH DI
CLI
MOV AX,0
MOV ES,AX
MOV DI,20H ;修改08H中斷向量
MOV AX,OFFSET TIMER0
STOSW
MOV AX,CS
STOSW
MOV AL,36H ;8253初始化
OUT 43H,AL
MOV BX,1132
MOV AL,BL
OUT 40H,AL
MOV AL,BH
OUT 40H,AL
MOV AL,0FCH
OUT 21H,AL
STI
POP DI
PUSH AX ;調用系統日期
PUSH BX
PUSH CX
PUSH DX
PUSH SI
MOV AH,2AH
INT 21H
MOV AX,CX
MOV BX,DX
MOV DX,0
MOV SI,1000
DIV SI
MOV SI,DX
OR AL,30H
MOV YEAR,AL
MOV AX,SI
MOV DL,100
DIV DL
MOV DH,AH
OR AL,30H
MOV YEAR1,AL
MOV AH,0
MOV AL,DH
MOV DL,10
DIV DL
OR AL,30H
MOV YEAR2,AL
MOV AL,DH
OR AL,30H
MOV YEAR3,AL
MOV CX,BX
MOV AX,BX
MOV AL,AH
MOV AH,0
MOV BH,10
DIV BH
OR AL,30H
OR AH,30H
MOV DH,AH
MOV MONTH,AL
MOV MONTH1,DH
MOV AX,CX
MOV AH,0
MOV BH,10
DIV BH
OR AL,30H
OR AH,30H
MOV DH,AH
MOV DATE,AL
MOV DATE1,DH
POP SI
POP DX
POP CX
POP BX
POP AX ;調用日期結束
CALL CLRSC
FOREVER:
MOV BX,OFFSET TENMINUTE
MOV CX,23
DISPCLK:
MOV AL,[BX] ;顯示時間幾日期
CALL DISPCHAR
INC BX
LOOP DISPCLK
MOV AL,0DH
CALL DISPCHAR
MOV AL,SECOND2
WAIT3:
CMP AL,SECOND2
CLI
PUSHF
PUSH AX
MOV AH,0BH ;鍵盤掃描
INT 21H
CMP AL,0FFH
JE SCAN
jmp WAIT1
SCAN:
MOV AH,7
INT 21H
CMP AL,72H
JE RESET
CMP AL,01BH
JE OVER
CMP AL,68H
JE HOLD
CMP AL,020H
JE WRITE
JMP WAIT1
OVER:
MOV AH,4CH ;跳出程序
INT 21H
WRITE: ;存儲當前時間
PUSH AX
cmp flag1,0
jne write1
MOV DI,OFFSET JILU
mov FLAG1,2
WRITE1:
MOV AL,TENMINUTE
MOV [DI],AL
INC DI
MOV AL,MINUTE
MOV [DI],AL
INC DI
MOV AL,':'
MOV [DI],AL
INC DI
MOV AL,TENSECOND
MOV [DI],AL
INC DI
MOV AL,SECOND
MOV [DI],AL
INC DI
MOV AL,':'
MOV [DI],AL
INC DI
MOV AL, SECOND1
MOV [DI],AL
INC DI
MOV AL,SECOND2
MOV [DI],AL
INC DI
MOV AL,' '
MOV [DI],AL
INC DI
MOV AL,' '
MOV [DI],AL
INC DI
POP AX
JMP WAIT1
WAIT2 :
JMP WAIT3 ;中間跳點
RESET: ;復位
MOV TENMINUTE , '0'
MOV MINUTE , '0'
MOV TENSECOND , '0'
MOV SECOND , '0'
MOV SECOND1, '0'
MOV SECOND2 , '0'
CALL START
HOLD: ;暫停
PUSHF
PUSH AX
MOV AH,08h
INT 21H
CMP AL,0DH
JE READ
CMP AL,6AH
JNE HOLD
POP AX
POPF
JMP WAIT1
READ: ;顯示記錄
CALL CLRSC
MOV DX,OFFSET JILU
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
WAIT1:
POP AX
POPF
STI
JZ WAIT2
JMP FOREVER
TIMER0 PROC FAR ;08H中斷向量入口
PUSH AX
CMP FLAG,0
JNE TIMER2
TIMER1:
DEC SECOND2 ;定時
CMP SECOND2,'0'
JGE TIMERX
MOV SECOND2,'9'
DEC SECOND1
CMP SECOND1,'0'
JGE TIMERX
MOV SECOND1,'9'
DEC SECOND
CMP SECOND,'0'
JGE TIMERX
MOV SECOND,'9'
DEC TENSECOND
CMP TENSECOND,'0'
JGE TIMERX
MOV TENSECOND,'5'
DEC MINUTE
CMP MINUTE,'0'
JGE TIMERX
MOV MINUTE,'9'
DEC TENMINUTE
CMP TENMINUTE,'0'
JGE TIMERX
MOV AH,4CH
INT 21H
TIMERX:
MOV AL,20H
OUT 20H,AL
POP AX
IRET
TIMER2: ;秒表
INC SECOND2
CMP SECOND2,'9'
JLE TIMERX1
MOV SECOND2,'0'
INC SECOND1
CMP SECOND1,'9'
JLE TIMERX1
MOV SECOND1,'0'
INC SECOND
CMP SECOND,'9'
JLE TIMERX1
MOV SECOND,'0'
INC TENSECOND
CMP TENSECOND,'6'
JL TIMERX1
MOV TENSECOND,'0'
INC MINUTE
CMP MINUTE,'9'
JLE TIMERX1
MOV MINUTE,'0'
INC TENMINUTE
CMP TENMINUTE,'9'
JLE TIMERX1
MOV TENMINUTE,'0'
TIMERX1:
MOV AL,20H
OUT 20H,AL
POP AX
IRET
DISPCHAR PROC NEAR ;顯示字符子程序
PUSH BX
MOV BX,0
MOV AH,14
INT 10H
POP BX
RET
DISPCHAR ENDP
CLRSC PROC NEAR
PUSH AX ;清屏子程序
PUSH BX
PUSH CX
PUSH DX
MOV CX,0
MOV DH,25
MOV DL,79
MOV BH,7
MOV AL,0
MOV AH,6
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
CLRSC ENDP
CODE ENDS
END START
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -