怎么输出系统时间和日期啊????~~~~~~~~~~~~~~~~~~~~~能给个例子么?
想在程序中输出系统的时间和日期,查到了中断调用,想输出出来...但是没法输出啊~~~
zara(Kyrie eleison)说 "显示时间时, 那些待显示的在寄存器中的是相应项的数值, 不是对应的字符或者是字符串的地址. 所以要进行数值到显示字符串形式的转换才能正常显示出来 "
可是我只知道0-9是加30H,但时间不是一位啊~~怎么办啊?
有没有不用转换直接输出的方法啊?!
我的代码:
MOV AH,2AH ;时间显示
INT 21H
MOV YEAR, CX ;年
MOV MONTH,DH ;月
MOV DAY,DL ;日
MOV DX,YEAR ;输出
MOV AH,09H
INT 21H
MOV DL,MONTH
MOV AH,05H
INT 21H
MOV DL,DAY
MOV AH,05H
INT 21H
MOV AH,2CH
INT 21H
MOV HOURS,CH ;小时
MOV MINUTES,CL ;分钟
MOV SECOND,DH ;秒
MOV DL,HOURS ;输出
MOV AH,05H
INT 21H
MOV DL,MINUTES
MOV AH,05H
INT 21H
MOV DL,SECOND
MOV AH,05H
INT 21H
[解决办法]
DATASEGMENT
MY_INTNO DW 1CH
OLD_INTOFF DW ?
OLD_INTSEG DW ?
CLOCK DB 0
MINUTE DB 0
SECOND DB 0
COUNT_NUM=18
COUNT DW COUNT_NUM
DATA ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
ARMACRO CHAR
MOV AL,CHAR
MOV AH,1AH
MOV ES:[DI],AX
ADD DI,2
ENDM
EXCHANGEPROC
MOVCL,4
MOVCH,2
NEXT:
ROLBL,CL
MOVAL,BL
ANDAL,0FH
ADDAL,30H
CMPAL,3AH
JLOUTP
ADDAL,07H
OUTP:
ARAL
DECCH
JNZNEXT
RET
EXCHANGEENDP
OUTPUT PROC
MOVAX,0B800H
MOVES,AX
MOVDI,71*2
MOVBL,CLOCK
CALLEXCHANGE
AR ': '
MOVBL,MINUTE
CALLEXCHANGE
AR ': '
MOVBL,SECOND
CALLEXCHANGE
RET
OUTPUT ENDP
START:
PANDUAN:
CMP COUNT,0
JZ SHOW
DEC COUNT
SHOW:
MOV COUNT,COUNT_NUM
MOVBL,18
DECBL
JZSHOW1
SHOW1:
MOVAH,2H
INT1AH
MOVCLOCK,CH
MOVMINUTE,CL
MOVSECOND,DH
CALLOUTPUT
LOOPPANDUAN
MOVAX,MY_INTNO
MOVCL,2
SHLAX,CL
MOVDI, AX
MOVAX, 0
MOVES, AX
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
试试吧
[解决办法]
年份是 4 位十进制数, 用 Byte 寄存器来保存运算的话, 溢出了. 应该用 Word 类型:
...
C10 DB 10, 00
...
MOV CX, 4 ;循环次数
Y1: MOV DX, 0 ;* 高位清空
DIV WORD PTR C10;* 除十取余数
PUSH DX ;* 余数进栈保护
LOOP Y1
MOV CX, 4
Y2: POP DX ;余数出栈
; XCHG DH, DL ;*-
OR DL, 30H ;转换为ASCII码输出
...