En este artículo, discutiremos el retorno de la subrutina y el retorno de la interrupción y lo explicaremos en detalle y finalmente concluiremos con la diferencia entre el retorno de la subrutina y el retorno de la interrupción. Discutámoslo uno por uno.
Retorno de subrutina:
- Regresar de una subrutina es devolver la ejecución del código al punto en el que estaba antes de que se llamara a la subrutina.
- Por lo general, una subrutina se llama mediante la instrucción ‘CALL ‘. En cada instrucción CALL, la IP y CS de la siguiente instrucción se insertan en la pila, antes de que el control se transfiera al procedimiento. Al final del procedimiento se debe ejecutar la instrucción ‘RET’ .
- RET se utiliza para volver de una subrutina llamada previamente por CALL. Cuando se ejecuta, el contenido previamente almacenado si la IP y el CS se recuperan en el CS, los registros de IP de la pila y la ejecución del programa principal continúa.
- Por lo tanto, dado que llamar a una subrutina empuja la dirección actual PC+2 a la pila. Regresar de una subrutina devolverá la ejecución en la dirección calculada por los dos bytes superiores de la pila.
- El byte más significativo se extrae primero de la pila, seguido del byte menos significativo. La dirección del RET se carga desde la pila. Después de ejecutar RET, la pila y sus punteros se modifican en consecuencia.
Regreso de la interrupción:
- Regresar de la interrupción es devolver la ejecución del código al punto en el que estaba antes de que ocurriera la interrupción junto con guardar las banderas en el registro de banderas.
- Por lo general, cuando ocurre una interrupción, t se maneja llamando a su respectiva rutina de servicio. Cuando se va a llamar a una rutina de servicio de interrupción, antes de transferirle el control, la IP, CS junto con las banderas se almacenan en la pila para indicar la ubicación desde donde se continuará la ejecución después de que se complete la Rutina de servicio de interrupción ( ISR ). ejecutado. Entonces, al final de ISR, se ejecuta ‘IRET ‘, los valores de IP, CS y flags se recuperan de la pila para continuar con la ejecución del programa principal.
- IRET o RETI se usa para regresar de ISR. Primero carga banderas de la pila y restaura su valor anterior, es decir, habilita la interrupción de bandera. Después de cargar las banderas de la pila, carga los valores CS e IP en los registros de la pila y la ejecución del programa principal continúa. Las banderas se introducen y extraen de la pila utilizando las instrucciones ‘PUSHF’ y ‘POPF’ respectivamente. La dirección IRET se carga desde la pila y el indicador de interrupción global está habilitado. Después de que se ejecuta el IRET, la pila y sus punteros se modifican en consecuencia.
Diferencia entre el retorno de la subrutina y el retorno de la interrupción:
- La instrucción IRET se usa para salir de un procedimiento de interrupción mientras que RET es para regresar de una subrutina.
- IRET es similar a RET, excepto que RET simplemente extraerá dos bytes a la PC, mientras que IRET restablecerá el flip flop de habilitación de interrupción ( IEN ) y se extraerán dos bytes de la pila.
- Para decirle al procesador que el manejo de interrupciones ha terminado y que se puede restablecer el indicador, se usa la instrucción IRET en lugar de solo RET.
- IRET funciona de manera idéntica a RET si se ejecuta fuera de un ISR.