¿Cuáles son las instrucciones PUSH y POP en los microcontroladores 8051?

Como hay una buena respuesta, te diré cuándo se usan.

A medida que ejecuta el código principal, utiliza el acumulador y los registros para almacenar valores.

Pero entonces necesitará llamar a algunas subrutinas quizás para usar algún código de biblioteca.

Utiliza la instrucción CALL.

El problema es que la subrutina también coloca valores en el acumulador y los otros registros. ¡Sobrescribe el tuyo!

Para solucionar esto, lo primero que debemos hacer, antes de que la subrutina cambie algo, es almacenar nuestros valores en registros en la memoria en algún lugar.

Una forma es escribirlos en ubicaciones específicas.

Pero, ¿qué sucede si nuestra subrutina llama a otra subrutina? Tendrá que almacenar sus valores en la memoria, pero ¿cómo podemos aceptar almacenarlos en un lugar diferente al nuestro?

La respuesta es usar la pila. Como una carga de platos en una pila alta, agregas platos, luego los quitas por último, primero en salir.

Para agregar un registro a la pila, use PUSH. Puede agregar todos los registros al comienzo de cada subrutina en orden, hacer el trabajo en los registros, luego hacer POP de los valores originales, en orden inverso. Luego regrese de la subrutina.

Hacer esto deja el código de llamada en el mismo estado que tenía antes de la llamada de subrutina.

Y así funciona sin importar qué subrutinas se llamen, y en cualquier orden de llamadas.

Lo mismo ocurre con las rutinas de servicio de interrupción, que son un tipo especial de llamada que puede ocurrir en cualquier momento.

Empuje primero, pop último, regresar.