hola tapi8
jejej me parece que ya se que pasa, puse un ejemplo en el que usaba una call para llamar a la rutina de interrupcion, y salia de ella con un goto, eso era un ejemplo para acumular un nivel en el stack, pense que se entendería mejor, pero ya veo que fue un error , se que se hace asi:
org 00
goto INICIO
org 04
goto interrupcion
org 05
INICIO
goto INICIO ;bucle inicio, el programa espera a que salte una interrupcion
-
-
interrupcion
- ;guarda valores en registros temporales
- ;test para conocer la causa de la interrupcion
- ;rutinas segun el tipo de interrupcion
- ;vuelve a cargar los registros temporales sobre los originales, status, w....
retfie ;aqui no se puede usar un goto INICIO o se quedaría el dato en la pila que se cargó cuando saltó la interrupción, por eso preguntaba si existia
;alguna forma de borrar la pila.
en tu respuesta hay algo que me parece que no tienes en cuenta y es que al saltar la interrupcion ya se carga la direccion siguiente a la que está en el pc, en el momento de producirse la interrupcion. Por ej. si esta en la linea 22 y se produce una interrupción, en la pila se guarda automaticamente la direccion 23 no solo carga valores en la pila las call si no tambien la propia interrupcion. Así cuando vuelve al programa principal, lo hace en la siguiente instrucción a la que ocurrio cuando saltó la interrupción. cosa que yo queria evitar y hacer que volviese al principio del programa
espero no estar diciendo alguna tonteria si es así sentiros libres de comentarlo, que siempre se puede aprender algo nuevo
un saludo y gracias