Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
Como modificar el IP
Enviado por Juan el día 21 de abril de 2004
Podría alguien decirme cómo puedo modificar el IP para que salte a otra parte del programa cuando se regresa de una interrupción?
Bueno, tan nuevo en porgramación no lo soy pero tengo una muy buena bronca, Estoy tratando de hacer un cambio de contexto, pero necesito guardar el IP junto con el CS y el FLAGS, y colocar un IP ,CS y FLAGS de lo que se estaba ejecutando con anterioridad, el problema es que la interrupcion de reloj 1C quien sabe donde guarde el IP y no puedo hacer que cuando termine la interrupcion regrese a mi nuevo IP, o si alguien sabe en donde puedo investigar lo del cambio de contexto le agradecería eternamente el favor.
Enviado por Martin Ribelotta el día 7 de mayo de 2004
Modifica el STACK. En una interrrupcion (que supongo sera del timer ;-) tenes tres cosas puestas en el stack.
BP+0 -> FLAGS (1 WORD)
BP+2 -> CS (1 WORD)
BP+4 -> IP (1 WORD)
Cambiar el valor de CS e IP puede ser un problema, para hacer un cambio de contexto, cambia la pila (apunta a otro STACK, el del otro proceso) cambiando el SS:SP actaul entonces cuando cambies la pila, en vez de retornar al task actual retornas al task que cambiaste la pila. El secreto està en la creacion del n uevo task con su pila (alrededor de 1 o 2 Kb)
Otra, antes de hacer el cambio de pila (y cualquier otra cosa) pone todos los registros en la pila con un PUSH y los recuperas (una vez cambiada la pila) con pops inversos.
Podes guiarte por el codigo de MINIX que implementa esto de una manera espectacular en un 8086 con 512 Kb de ram ...y corre varios procesos juntos....!!!!!!!!!!!!!!
Nuevo no eres.......Eres novísimo. No sabes lo que es una interrupción.....Te has planteado como vas a recuperqr el IP si lo modificas ?
Cuando se ejecuta una interrupción se guarda el IP en la pila y el iret recupera esa dirección para continuar con la siguiente instrucción a la última antes de entrar la interrupción.
Alfredo, como se ve que eres un idiota, y que el novísimo eres tú. No seas Estúpido si se quiere modificar el IP es obvio que lo que se quiere es regresar a otra parte del programa. Alfredo te recomiendo que antes de hablar conectes el cerebro y mejor te pongas a estudiar que a ti es el que le falta mucho por aprender. Juan modificar el IP en C es algo complidado, al parecer lo que tu quieres es hacer es un cambio de contexto y la verdad eso es algo demasiado complicado que se utiliza para hacer uKernels, sólo un experto en sistemas operativos maneja ese tipo de cosas. Yo te recomiendo que busques en la red los archivos fuentes de linux con los cuales puedes generar cambios de contexto o bien descarga el minix y revisa como genera el cambio de contexto.