Ensamblador - Multitasking

 
Vista:

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?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Multitasking

Publicado por vaca_loca (12 intervenciones) el 30/11/2004 18:41:53
hola; bueno, la pregunta es para expertos asi que pido disculpas
por responder.

CLI
PUSHF
CALL DWORD PTR RELOJ_VIEJO
popf ; *
PUSHA

Ademas, aunque no entiendo bien lo que quieres hacer con
esos manejos raros del stack, tal vez sea conveniente utilizar
la int 1Ch en lugar de int 08h; si quieres enviame el codigo
completo a ver si podemos solucionar algo.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multitasking

Publicado por Dogauvg (2 intervenciones) el 30/11/2004 21:54:49
Ya he solucionado mi problema, pero de todas formas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar