Bueno, en 8051 tenemos saltos absolutos y saltos relativos y también lo hacen las llamadas absolutas y las llamadas relativas. Contestaré en una perspectiva general.
La instrucción de salto llevará su puntero de instrucción (IP) al lugar desde donde desea que comience.
La llamada también hará lo mismo, llevará la IP a la ubicación especificada para ejecutar.
- ¿Cuál es el futuro de los sistemas embebidos?
- ¿Cómo es útil MATLAB en sistemas embebidos?
- ¿Cómo logramos la sincronización de datos entre el contexto del usuario y el contexto de interrupción? ¿Cómo se logra en caso de interrupciones anidadas?
- ¿Cómo se compara el configurador de código de microchip con el cubemx de stm32?
- Cómo visualizar el impulso de un sistema de llamada de enfermería con un osciloscopio
Pero hay una gran diferencia entre las instrucciones de salto y de llamada.
Cuando realiza una llamada, el controlador almacena automáticamente el valor de IP actual en la pila junto con el registro de estado del sistema actual o la palabra de estado del procesador en el caso de 8051 y el acumulador y otros registros importantes.
Usted puede preguntar por qué necesitamos todo esto?
Este es un concepto, y se llama cambio de contexto de una manera primitiva.
¿Por qué todo este drama? ¿Por qué no simplemente vamos, ejecutamos algo y volvemos? ¿Rito?
Bueno no. Suponga que está haciendo algo matemático, bueno, siempre están sucediendo cosas lógicas, por lo que hay un pero en PSW, la bandera de transporte o la bandera de transporte auxiliar. Si no guarda esto, realiza una función de llamada y hace algo allí para restablecer este indicador, vuelve a su programa principal y de repente se pierde. ¿Entiendes mi punto de rito? Es posible que haya hecho algo para configurar el CF, pero ahora lo ha restablecido en una subfunción a la que llamó utilizando la instrucción de llamada. Entonces, el contexto de la ejecución de su programa se pierde, ¿está de acuerdo conmigo?
Entonces, para recuperar su contexto de ejecución actual de una subrutina, use una instrucción llamada RET.
Esto mostrará todos los datos que se almacenaron durante la llamada de instrucción de llamada.
Así que para resumir,
Jump solo lo llevará a un lugar determinado en la memoria del programa.
Call también hará lo anterior, pero está asociado con la inserción de los registros de funciones especiales en la pila.
Una función de llamada siempre está asociada con una instrucción RET que le devolverá todos los datos.
Normalmente, una instrucción de llamada se usa para subrutinas que se llaman una y otra vez en un flujo de programa.
¡¡Espero que esto responda a su pregunta!!