Time
Este es el código del comando time
en DariOS. Se encarga de obtener la hora actual del sistema y mostrarla en pantalla en formato HH:MM:SS
, utilizando la BIOS.
Propósito
Leer la hora del sistema desde la BIOS (horas, minutos y segundos) y mostrarla carácter por carácter en pantalla, respetando el formato legible HH:MM:SS
.
Lógica paso a paso
push ax
push bx
push cx
push dx
- Guarda los registros para no alterar su contenido durante la ejecución del comando.
mov ah, 0x02
int 0x1A
- Usa la función
0x02
de la interrupción BIOS0x1A
para obtener la hora.CH
contiene las horas (en BCD).CL
contiene los minutos (en BCD).DH
contiene los segundos (en BCD).
Mostrar las horas
mov al, ch
shr al, 4
add al, 30h
call imprimir_caracter
- Extrae el nibble alto (decenas de la hora), lo convierte a ASCII y lo imprime.
mov al, ch
and al, 0x0F
add al, 30h
call imprimir_caracter
- Extrae el nibble bajo (unidades de la hora), lo convierte a ASCII y lo imprime.
mov al, ":"
call imprimir_caracter
- Imprime el carácter
:
como separador.
Mostrar los minutos
mov al, cl
shr al, 4
add al, 30h
call imprimir_caracter
- Extrae las decenas de los minutos, convierte a ASCII y muestra.
mov al, cl
and al, 0x0F
add al, 30h
call imprimir_caracter
- Extrae las unidades de los minutos, convierte a ASCII y muestra.
mov al, ":"
call imprimir_caracter
- Imprime el carácter
:
como separador.
Mostrar los segundos
mov al, dh
shr al, 4
add al, 30h
call imprimir_caracter
- Extrae las decenas de los segundos, convierte a ASCII y muestra.
mov al, dh
and al, 0x0F
add al, 30h
call imprimir_caracter
- Extrae las unidades de los segundos, convierte a ASCII y muestra.
Restaurar registros
pop dx
pop cx
pop bx
pop ax
- Restaura el contenido original de los registros utilizados.
Finalizar
ret
- Termina la ejecución del comando y retorna al flujo principal.