ejemplos modo protegido.pdf

Vista previa de texto
;
;
;
;
;
Luego se realiza la conversión de la hora a ascii para poder
imprimirla, teniendo en cuenta que el formato entregado por el RTC es
formato BCD, lo cual simplifica la tarea. Solamente se debe separar en
nibles y sumar el ascii del 0.
mov edi,hora+7
mov cx,3
time_print:
mov bl,al
and bl,0fh
mov byte [edi],"0"
add [edi],bl
mov bl,al
shr bl,4
dec edi
mov byte [edi],"0"
add [edi],bl
dec edi
dec edi
shr eax,8
dec ecx
jnz time_print
;
; Luego se imprime el resultado en la pantalla, en el offset 0, o sea,
; arriba a la izquierda.
;
mov esi,hora
mov edi,0
call cg_print_sel:0
;
; Se lee el último scan code.
;
mov eax,KEY_SERVICE
call cg_kernel_sel:0
dec al
jnz main
;
; Si el último scancode es 1, se retorna a modo real.
;
mov eax,EXIT_SERVICE
call cg_kernel_sel:0
;
; Aquí termina la rutina de nivel 3.
;
seg_data_3_end:
seg_code_3_end:
;
inicio:
;
; Se guarda el cs de modo real en real_cs para cuando se retorne, y se
; calcula la base lineal del programa, que se guarda en ebx para ir
; sumando los desplazamientos que sean necesarios.
;
xor eax,eax
mov ax,cs
mov word [real_cs],ax
shl eax,4
mov ebx,eax
;
; Se acomoda la base del code segment de nivel 0.
;
