ejemplos modo protegido.pdf

Vista previa de texto
tarea_sup:
sub sp,4
mov bp,sp
mov dword [bp+0],0
mov ax,flat_sel
mov ds,ax
tarea_sup_main:
inc dword [bp+0]
mov eax,[bp+0]
mov edi,0b8000h
call mostrar_valor
jmp tarea_sup_main
;
; La tarea inferior decrementa un valor y lo imprime en pantalla.
;
tarea_inf:
sub sp,4
mov bp,sp
mov dword [bp+0],0
mov ax,flat_sel
mov ds,ax
tarea_inf_main:
dec dword [bp+0]
mov eax,[bp+0]
mov edi,0b8000h+80*2*10
call mostrar_valor
jmp tarea_inf_main
;
; Ambas taras utilizan una rutina muy similar a la utilizada en el
; ejemplo 4 para imprimir en video el valor de eax.
;
mostrar_valor:
;
; Recibe:
; en eax el valor a imprimir.
; en ds:edi la posición a imprimir.
;
mov cx,8
correr:
rol eax,4
mov byte [edi],'0'
mov bl,al
and bl,0fh
add [edi],bl
cmp byte [edi],':'
jb ok
add byte [edi],'A'-':'
ok:
inc edi
inc edi
dec ecx
jnz correr
ret
;
; Luego se realiza, en la irq0, el salto de tareas, que es una especie
; de scheduler muy sencillo que salta siempre a la otra tarea,
; verificando primero en cuál se encuentra, mediante el uso de la
; instrucción str.
;
int8han:
pushad
