Multitasking
Publicado por Dogauvg (2 intervenciones) el 25/11/2004 19:21:35
Hola a todos los expertos!
Tengo un problema. Estoy haciendo un programa de multitasking por hardware con TASM. La idea es que tengo vatios procedimientos que quiero que se alternen mediante un timer. Para ello reprograno la interrupcion 08h.
Tengo un procedimiento
VECTOR_BP DW 5 dup( ? )
VECTOR_SP DW 5 dup( ? )
CONTADOR DW 0
RELOJ_NUEVO PROC NEAR
CLI
PUSHF
CALL DWORD PTR RELOJ_VIEJO
PUSHA
MOV SI, CONTADOR
MOV [ VECTOR_SP + SI ], SP
INC CONTADOR
INC CONTADOR
MOV SI, CONTADOR
MOV SP, [ VECTOR_SP + SI ]
MOV BP, [ VECTOR_BP + SI ]
POPA
CMP CONTADOR, 8
JNE SIG
MOV CONTADOR, 0
SIG:
STI
IRET
Y luego lo reprogramo con la funcion 25h del int 21h
PUSH DS
MOV AX, SEG RELOJ_NUEVO
MOV DS, AX
MOV AH, 25H
MOV AL, 08H
LEA DX, RELOJ_NUEVO
INT 21H
POP DS
El problema es que al llamar al primer procedimiento, truena. Alguna pista de que estoy haciendo o mal o que deberia hacer?
Tengo un problema. Estoy haciendo un programa de multitasking por hardware con TASM. La idea es que tengo vatios procedimientos que quiero que se alternen mediante un timer. Para ello reprograno la interrupcion 08h.
Tengo un procedimiento
VECTOR_BP DW 5 dup( ? )
VECTOR_SP DW 5 dup( ? )
CONTADOR DW 0
RELOJ_NUEVO PROC NEAR
CLI
PUSHF
CALL DWORD PTR RELOJ_VIEJO
PUSHA
MOV SI, CONTADOR
MOV [ VECTOR_SP + SI ], SP
INC CONTADOR
INC CONTADOR
MOV SI, CONTADOR
MOV SP, [ VECTOR_SP + SI ]
MOV BP, [ VECTOR_BP + SI ]
POPA
CMP CONTADOR, 8
JNE SIG
MOV CONTADOR, 0
SIG:
STI
IRET
Y luego lo reprogramo con la funcion 25h del int 21h
PUSH DS
MOV AX, SEG RELOJ_NUEVO
MOV DS, AX
MOV AH, 25H
MOV AL, 08H
LEA DX, RELOJ_NUEVO
INT 21H
POP DS
El problema es que al llamar al primer procedimiento, truena. Alguna pista de que estoy haciendo o mal o que deberia hacer?
Valora esta pregunta
0