6
« en: Sábado 4 de Diciembre de 2004, 10:45 »
Hola, querría saber si alguien m puede ayudar para poder mostrar la horas, minutos y segundos del ordenador por pantalla; con este código sólo se m muestra bien la hora, pro no m va bien los minutos y no sé q hacer.
.MODEL SMALL
.STACK 100
.DATA
min DW 1
.CODE
MOV AL,3h ;establece modo texto
MOV AH,0
INT 10h
XOR AX,AX
MOV ES,AX
MOV DI,1Ch
CLI ;inhibir interrupciones
MOV AX,OFFSET reloj ;desplazamiento de la rutina de usuario
MOV ES:[DI],AX ;desplazamiento a tabla de vectores de int.
MOV ES:[DI+2],CS ;segmento a tabla de vectores de int.
STI ;activar interrupciones
MOV DX, OFFSET residente
;dirección de la instrucción siguiente a la última de la rutina que debe quedar residente
reloj:
MOV AX,40h ;segmento
MOV ES,AX ;empleamos el segmento extra
MOV SI,6Ch ;desplazamiento
MOV AX,ES:[SI] ;parte inferior contador
MOV DX,ES:[SI+2] ;parte superior contador
MOV BX,32760 ;1/2 hora
DIV BX ;DX=resto, AX=horas*2
SHR AX,1 ;AX=horas
MOV CH,AL ;hh:mm:ss pasan a CH:CL:DH
MOV min,DX ;guardamos los minutos antes de machacar
MOV AL,CH
MOV BH,10
DIV BH
;MOSTRAMOS PRIMER DIGITO DE LA HORA
MOV BX,0B800h ;metemos en BX la posición donde se sitúa
MOV ES,BX ;empleamos el segmento extra
MOV BX,144 ;desplazamiento el modo texto
MOV CL,48 ;carácter a mostrar por pantalla
ADD CL,AL
MOV ES:[BX],CL
;MOSTRAMOS SEGUNDO DIGITO DE LA HORA
MOV BX,0B800h ;metemos en BX la posición donde se sitúa
MOV ES,BX ;empleamos el segmento extra
MOV BX,146 ;desplazamiento el modo texto
MOV CL,48 ;carácter a mostrar por pantalla
ADD CL,AH
MOV ES:[BX],CL
;MOSTRAMOS LOS DOS PUNTOS
MOV BX,0B800h ;metemos en BX la posición donde se sitúa
MOV ES,BX ;empleamos el segmento extra
MOV BX,148 ;desplazamiento el modo texto
MOV CL,':' ;carácter a mostrar por pantalla
MOV ES:[BX],CL
MOV DX,0
MOV AX,min
MOV BX,1092 ;min
DIV BX
MOV AH,0
MOV CL,AL ;DX=resto, AX=MIN
;hh:mm:ss pasan a CH:CL:DH
MOV BH,10
DIV BH
;MOSTRAMOS PRIMER DIGITO DE LOS MINUTOS
MOV BX,0B800h ;metemos en BX la posición donde se sitúa
MOV ES,BX ;empleamos el segmento extra
MOV BX,150 ;desplazamiento el modo texto
ADD CL,48 ;carácter a mostrar por pantalla
ADD CL,AL
MOV ES:[BX],CL
;MOSTRAMOS SEGUNDO DIGITO DE LOS MINUTOS
MOV BX,0B800h ;metemos en BX la posición donde se sitúa
MOV ES,BX ;empleamos el segmento extra
MOV BX,152 ;desplazamiento el modo texto
ADD CL,48 ;carácter a mostrar por pantalla
ADD CL,AH
MOV ES:[BX],CL
;AQUI FALTA CONVERSION PARA MIN Y SEG, CON LAS 4 ULT INST PERO 1092 Y QUEDA DX=0 AX=MIN
;IGUAL CON SEG
residente:
INT 27h ;solicitud a DOS de TSR
END
He visto q hay un post referido a esto, pro va a través de interrupciones. Y yo no lo quiero hacer así, yo lo quiero hacer a través del segmento de datos, y una vez hecho bien dejarlo resident
A vé si m podéis ayudar, GRACIAS