Skip to main content

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.

time


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 BIOS 0x1A 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.