📄 q8.asm
字号:
TITLE 8086 Code Template (for EXE file)
; AUTHOR emu8086
; DATE ?
; VERSION 1.00
; FILE ?.ASM
; 8086 Code Template
; 读取CMOS中的日期和时间,并显示之。
#MAKE_EXE#
DSEG SEGMENT 'DATA'
; TODO: add your data here!!!!
DAY DB 'TODAY IS: '
MONTH DB '0' ;设置日期变量
DB '1'
DB '-'
DATE DB '0'
DB '1'
DB '-'
YEAR DB '2'
DB '0'
DB '0'
DB '0'
DB ' '
TIME DB 'CURRENT TIME IS: '
HOUR DB '0' ;设置时间变量
DB '0'
DB ':'
MIN DB '0'
DB '0'
DB ':'
SEC DB '0'
DB '0'
DB '$'
DSEG ENDS
SSEG SEGMENT STACK 'STACK'
DB 256 DUP(?)
SSEG ENDS
CSEG SEGMENT 'CODE'
;*******************************************
START PROC
; Store return address to OS:
PUSH DS
MOV AX, 0
PUSH AX
; set segment registers:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
; TODO: add your code here!!!!
BEGIN: LEA DI,MONTH
MOV AH,2AH ;读日期
INT 21H
MOV AL,DH ;月份调整
CALL ADJPRO
MOV AL,DL ;日期调整
CALL ADJPRO
MOV AX,CX ;年份调整
MOV DX,0
MOV BX,100
DIV BX
CALL ADJPRO
MOV AX,DX
DEC DI
CALL ADJPRO
LEA DI,HOUR
MOV AH,2CH ;读时间
INT 21H
MOV BH,DH ;在BH设置时间刷新变量
MOV AL,CH ;小时调整
CALL ADJPRO
MOV AL,CL ;分钟调整
CALL ADJPRO
MOV AL,DH ;秒钟调整
CALL ADJPRO
LEA DX,DAY ;显示日期和时间
MOV AH,09H
INT 21H
MOV DL,13 ;回车不换行
MOV AH,02H
INT 21H
WAIT: MOV AH,01H ;检测是否有键盘输入
INT 16H
JNZ EXIT
MOV AH,2CH ;无则重新读取时间
INT 21H
CMP DH,BH ;判断时间是否需要刷新
JZ WAIT
JMP BEGIN
EXIT: POP AX
POP DS
MOV AH,4CH
INT 21H
START ENDP
ADJPRO PROC ;调整算法(二进制转换成十进制)
AND AX,00FFH
MOV BL,10
DIV BL
ADD AL,30H
ADD AH,30H
MOV [DI],AL
INC DI
MOV [DI],AH
INC DI
INC DI
RET
ADJPRO ENDP
; return to operating system:
;*******************************************
CSEG ENDS
END START ; set entry point.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -