当前位置: 代码迷 >> 汇编语言 >> 请问个bios调用取时间的有关问题
  详细解决方案

请问个bios调用取时间的有关问题

热度:8696   发布时间:2013-02-26 00:00:00.0
请教个bios调用取时间的问题
mov ah,00h
int 1ah

这是bios调用取时间
调用后dh里面是系统时间的秒吗?
dh里面到底放了一个什么数?它好像不是1秒变一次的

我想写一个汇编程序,运行程序,等待3秒,输出一个数来(8086的)
请高手指教啊


------解决方案--------------------------------------------------------
;请楼主参考一下吧:
cursor equ 45H
attrib equ 2fh
code segment
assume cs:code,ds:code
start:
jmp go
oldcur dw ?
OLD1C DW 2 DUP(?)
NEWINT1C:
PUSHF
CALL DWORD PTR CS:OLD1C
push ax
PUSH BX
PUSH CX
PUSH DX
XOR BH,BH
MOV AH,3
INT 10H
MOV CS:OLDCUR,DX
MOV AH,2
xor bh,bh
MOV DX,CURSOR
INT 10H
MOV AH,2     
INT 1AH
PUSH DX
PUSH CX
POP BX
PUSH BX
CALL SHOWBYTE
CALL SHOWCOLON
POP BX
XCHG BH,BL
CALL SHOWBYTE
CALL SHOWCOLON
POP BX
CALL SHOWBYTE
MOV DX,CS:OLDCUR
MOV AH,2
XOR BH,BH
INT 10H
POP DX
POP CX
POP BX
POP AX
IRET
SHOWBYTE PROC NEAR
PUSH BX
MOV CL,4
MOV AL,BH
SHR AL,CL
ADD AL,30H
CALL SHOW
CALL CURMOVE
POP BX
MOV AL,BH
AND AL,0FH
ADD AL,30H
CALL SHOW
CALL CURMOVE
RET
SHOWBYTE ENDP

SHOWCOLON PROC NEAR
MOV AL,':'
CALL SHOW
CALL CURMOVE
RET
SHOWCOLON ENDP

CURMOVE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,3
MOV BH,0
INT 10H
INC DL
MOV AH,2
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
CURMOVE ENDP

SHOW PROC NEAR
PUSH AX
PUSH BX
PUSH CX
MOV AH,09H
MOV BX,attrib
MOV CX,1
INT 10H
POP CX
POP BX
POP AX
RET
SHOW ENDP

GO:
PUSH CS
POP DS
MOV AX,351CH
INT 21H
MOV OLD1C,BX      
MOV BX,ES
MOV OLD1C+2,BX
MOV DX,OFFSET NEWINT1C 
MOV AX,251CH
INT 21H
MOV DX,OFFSET GO
SUB DX,OFFSET START
MOV CL,4
SHR DX,CL
ADD DX,11H
MOV AX,3100H      
INT 21H
CODE ENDS
END START


------解决方案--------------------------------------------------------
int 1a的0号功能不是取系统时间,而是取系统“滴答”计数器的值,该值在系统启动时初始化为0,之后每次时钟中断加1。取系统时间用2号功能。
参考这个链接:http://blog.chinaunix.net/u1/44087/showart_429916
------解决方案--------------------------------------------------------
8086直接去存取CMOS中的数据即可。。。。。