ejemplos modo protegido.pdf


Vista previa del archivo PDF ejemplos-modo-protegido.pdf


Página 1...65 66 67686991

Vista previa de texto


in al,71h
retf
no_TIMER_SERVICE:
retf
;
; Esta rutina corre en el nivel de la rutina que la llame, en este
; ejemplo corre en nivel 3. La rutina imprime ds:esi a partir del
; offset indicado en edi en la pantalla hasta encontrar un carácter
; nulo.
;
print_routine:
push es
mov ax,video_sel
mov es,ax
mov ah,07h
printing:
mov al,[ds:esi]
cmp al,0
je no_printing
mov [es:edi],ax
inc esi
inc edi
inc edi
jmp printing
no_printing
pop es
retf
;
; Aquí terminan las rutinas del sistema y comienza la rutina de la
; aplicación que corre en nivel 3.
;
seg_code_3_start:
seg_data_3_start:
;
; Se saltea la única variable, se coloca SHORT para que compile una
; instrucción de 2 bytes, lo cual implica un salto menor de 127 bytes
; hacia adelante.
;
jmp SHORT inicio_task
;
; La variable hora estará en el offset 2 si la base apunta, como se la
; definió, a seg_data_3_start. Se dejan en blanco los campos a llenar,
; pero se indica la puntuación. Es importante no olvidar el 0 al final.
;
%define hora 2
db " : . ",0
inicio_task:
main:
;
;
;
;
;
;

La rutina principal no hará
pedirá la hora del sistema,
por no tenerse acceso a los
los bits en 0 en el mapa de

más que
lo cual
puertos
entrada

mov eax,TIMER_SERVICE
call cg_kernel_sel:0
;

llamar a los servicios. Primero
desde nivel 3 no se puede hacer,
(debido al IOPL y a que no están
salida del TSS).