📄 dianzizhong1.asm
字号:
STACK SEGMENT STACK'STACK'
DB 1024 DUP(0)
STACK ENDS
DATA SEGMENT
BWORD EQU THIS BYTE
R0 DW (?)
R1 DW (?)
R2 DW (?)
R3 DW (?)
R4 DW (?)
R5 DW (?)
R6 DW (?)
R7 DW (?)
TEMP1 DW (?)
TEMP2 DW (?)
TEMP3 DW (?)
TEMP4 DW (?)
LED1 DB (?)
LED2 DB (?)
LED3 DB (?)
LED4 DB (?)
LED5 DB (?)
LED6 DB (?)
LED7 DB (?)
LED8 DB (?)
LED9 DB (?)
LED10 DB (?)
LED11 DB (?)
LED12 DB (?)
LED13 DB (?)
LED14 DB (?)
LED15 DB (?)
LED16 DB (?)
LED17 DB (?)
LED18 DB (?)
LED19 DB (?)
YEAR_REG DB (?)
MOTH_REG DB (?)
DATE_REG DB (?)
S_REG DB (?)
M_REG DB (?)
H_REG DB (?)
F0 DB 5fh,9,0,0
DB 7ch,9,1,-1
DB 7ch,9,1,0
DB 5fh,9,0,1
DB 7ch,9,0,1
DB 7ch,9,-1,0
DB 5fh,0,0,-1
F1 DB 5fh,0,0,0
DB 7ch,0,1,-1
DB 7ch,0,1,0
DB 5fh,0,0,1
DB 7ch,9,0,1
DB 7ch,9,-1,0
DB 5fh,0,0,-1
F2 DB 5fh,9,0,0
DB 7ch,0,1,-1
DB 7ch,9,1,0
DB 5fh,9,0,1
DB 7ch,0,0,1
DB 7ch,9,-1,0
DB 5fh,9,0,-1
F3 DB 5fh,9,0,0
DB 7ch,0,1,-1
DB 7ch,0,1,0
DB 5fh,9,0,1
DB 7ch,9,0,1
DB 7ch,9,-1,0
DB 5fh,9,0,-1
F4 DB 5fh,0,0,0
DB 7ch,9,1,-1
DB 7ch,0,1,0
DB 5fh,0,0,1
DB 7ch,9,0,1
DB 7ch,9,-1,0
DB 5fh,9,0,-1
F5 DB 5fh,9,0,0
DB 7ch,9,1,-1
DB 7ch,0,1,0
DB 5fh,9,0,1
DB 7ch,9,0,1
DB 7ch,0,-1,0
DB 5fh,9,0,-1
F6 DB 5fh,0,0,0
DB 7ch,9,1,-1
DB 7ch,9,1,0
DB 5fh,9,0,1
DB 7ch,9,0,1
DB 7ch,0,-1,0
DB 5fh,9,0,-1
F7 DB 5fh,9,0,0
DB 7ch,0,1,-1
DB 7ch,0,1,0
DB 5fh,0,0,1
DB 7ch,9,0,1
DB 7ch,9,-1,0
DB 5fh,0,0,-1
F8 DB 5fh,9,0,0
DB 7ch,9,1,-1
DB 7ch,9,1,0
DB 5fh,9,0,1
DB 7ch,9,0,1
DB 7ch,9,-1,0
DB 5fh,9,0,-1
F9 DB 5fh,9,0,0
DB 7ch,9,1,-1
DB 7ch,0,1,0
DB 5fh,0,0,1
DB 7ch,9,0,1
DB 7ch,9,-1,0
DB 5fh,9,0,-1
DATA ENDS
VIDEO SEGMENT AT 0B800H
WD_BUFFER LABEL WORD
V_BUFF DB 25*8*2 DUP(?)
VIDEO ENDS
PROGRAM SEGMENT
MAIN PROC FAR
ASSUME CS:PROGRAM,DS:DATA,SS:STACK,ES:VIDEO
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AX,VIDEO
MOV ES,AX
MOV TEMP1,000H
MOV TEMP2,184FH
MOV BH,0FH
CALL CLR_SCREEN
DO_WAIT: MOV AH,1
INT 16H
JZ NO_KEY
YES_KEY: MOV AH,0
INT 16H
CMP AL,1BH
JNZ NO_KEY
JMP EXIT
NO_KEY: CALL READ_TIME
CALL READ_DATE
CALL CONVERT_ASCII
CALL MOVE
CALL DISPLAY_DATE
JMP DO_WAIT
EXIT: MOV TEMP1,0000H
MOV TEMP2,184FH
MOV BH,0FH
CALL CLR_SCREEN
RET
MAIN ENDP
READ_TIME PROC NEAR
MOV AH,02H
INT 1AH
MOV H_REG,CH
MOV M_REG,CL
MOV S_REG,DH
RET
READ_TIME ENDP
READ_DATE PROC NEAR
MOV AH,04H
INT 1AH
MOV YEAR_REG,CL
MOV MOTH_REG,DH
MOV DATE_REG,DL
RET
READ_DATE ENDP
CONVERT_ASCII PROC NEAR
MOV AL,H_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED1,AL
MOV AL,H_REG
AND AL,0FH
ADD AL,30H
MOV LED2,AL
MOV AL,M_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED4,AL
MOV AL,M_REG
AND AL,0F0H
ADD AL,30H
MOV LED5,AL
MOV AL,S_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED7,AL
MOV AL,S_REG
AND AL,0FH
ADD AL,30H
MOV LED8,AL
MOV LED3,3AH
MOV LED6,3AH
MOV AL,YEAR_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED12,AL
MOV AL,YEAR_REG
AND AL,0FH
ADD AL,30H
MOV LED13,AL
MOV AL,MOTH_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED15,AL
MOV AL,MOTH_REG
AND AL,0FH
ADD AL,30H
MOV LED16,AL
MOV AL,DATE_REG
AND AL,0F0H
MOV CL,4
ROR AL,CL
ADD AL,30H
MOV LED18,AL
MOV AL,DATE_REG
AND AL,0FH
ADD AL,30H
MOV LED19,AL
MOV LED10,32H
MOV LED11,30H
MOV LED14,2DH
MOV LED17,2DH
RET
CONVERT_ASCII ENDP
MOVE PROC NEAR
MOV DX,8
MOV CX,0836H
LEA SI,LED8
INC SI
S: DEC SI
MOV BL,[SI]
SUB CX,4
CMP CX,082BH
JZ L6
CMP CX,0821H
JZ L3
CALL COMPARE
DEC DX
JNZ S
JMP
L6: LEA BX,LED6
MOV CH,8
MOV CL,43
MOV AL,[BX]
MOV AH,9H
CALL DISPLAY
ADD CX,1
JMP S
L3: LEA BX,LED3
MOV CH,8
MOV CL,33
MOV AL,[BX]
MOV AH,9H
CALL DISPLAY
ADD CX,1
JMP S
POP BX
POP CX
PUSH DX
EXIT2: RET
MOVE ENDP
COMPARE PROC NEAR
CMP BL,30H
JE YELLOW
CMP BL,31H
JE ONE
CMP BL,32H
JE TWO
CMP BL,33H
JE THREE
CMP BL,34H
JE FOUR
CMP BL,35H
JE FIVE
CMP BL,36H
JE SIX
CMP BL,37H
JE SEVEN
CMP BL,38H
JE EIGHT
CMP BL,39H
JE NINE
JMP EXIT1
YELLOW: LEA DI,F0
JMP W
ONE: LEA DI,F1
JMP W
TWO: LEA DI,F2
JMP W
THREE: LEA DI,F3
JMP W
FOUR: LEA DI,F4
JMP W
FIVE: LEA DI,F5
JMP W
SIX: LEA DI,F6
JMP W
SEVEN: LEA DI,F7
JMP W
EIGHT: LEA DI,F8
JMP W
NINE: LEA DI,F9
JMP W
JMP EXIT1
P: MOV DX,7H
Z: INC DI
W: MOV AL,[DI]
INC DI
MOV AH,[DI]
INC DI
POP CX
ADD CH,[DI]
INC DI
ADD CL,[DI]
CALL DISPLAY
DEC DX
JNZ Z
EXIT1: RET
COMPARE ENDP
DISPLAY PROC NEAR
PUSH BX
PUSH CX
PUSH AX
MOV AL,160
MUL CH
MOV BL,CL
ROL BL,1
MOV BH,0
ADD BX,AX
POP AX
MOV ES:[WD_BUFFER+BX],AX
POP CX
POP BX
RET
DISPLAY ENDP
DISPLAY_DATE PROC NEAR
MOV R0,10
LEA BX,LED10
MOV CX,0922H
DISPLAY_DATE1: MOV AL,[BX]
MOV AH,5FH
CALL DISPLAY
INC CX
INC BX
DEC R0
JNZ DISPLAY_DATE1
RET
DISPLAY_DATE ENDP
CLR_SCREEN PROC NEAR
MOV AH,06H
MOV CX,TEMP1
MOV DX,TEMP2
INT 10H
MOV AH,02H
MOV DH,24
MOV DL,80
MOV BH,0
INT 10H
RET
CLR_SCREEN ENDP
PROGRAM ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -