Subrutinas

Subrutinas

de Lucas Mathias Ingles Loggia -
Número de respuestas: 4

Mi duda puntual es si hay inconveniente en poner una subrutina dentro de otra.

Saludos

En respuesta a Lucas Mathias Ingles Loggia

Re: Subrutinas

de Julio Perez -
Se puede, se dice en esos casos que la segunda llamada queda "anidadas" en

la primera..

Como siempre al usar subrutinas tenés que ser cuidadoso en el uso del

stack, para que la instrucción RET encuentre la dirección de retorno

correcta que puso en el stack el CALL correspondiente.
En respuesta a Julio Perez

Re: Subrutinas

de Lucas Mathias Ingles Loggia -
Enterado, el programa me funciona correctamente y cuenta los impares donde tiene que contarlos, solo que cuando ya finaliza el contador correspondiente en mi subprograma, le doy el comando "stepi" y por las proximas 30 stepis aproximadamente, se queda lanzando el mensaje ret, y al proximo stepi ya finaliza y va a jp fin, eso, ¿es por un mal manejo del stack?
En respuesta a Lucas Mathias Ingles Loggia

Re: Subrutinas

de Lucas Mathias Ingles Loggia -

PD: No me dio tiempo para editar el comentario anterior, pero me surgió otra duda, ¿no hay problema en escribir partes de codigo fuera de la subrutina de la plantilla? (Siempre dejando el .end al final). ¿Tiene alguna diferencia entre escribirlo dentro o fuera de la subrutina? , yo hago referencia a saltos a partes de código que quedaron definidos así. Solucione el problema de los calls añadiendo etiquetas y haciendo saltos a ellos cuando quería salir de la subrutina creada.

Saludos y muchas gracias

En respuesta a Lucas Mathias Ingles Loggia

Re: Subrutinas

de Julio Perez -

No nos queda claro exactamente cuál es el problema puntual, pero valen las siguientes recomendaciones generales:

* Todo PUSH tiene que tener un POP asociado, de lo contrario el stack crece en forma incontrolada.

* Más importante: al ejecutarse el programa todo CALL debe corresponderse con un RET

De lo que contás parece adivinarse que estás invocando muchas veces una subrutina con CALL, pero en cada una de ellas en vez de retornar con RET estás haciendo un salto.

Estudiá en la cartilla y entendé lo que hacen CALL y RET.
Pareciera además que estás intentando una solución innecesariamente complicada (para qué necesitás CALL?), y te estás equivocando en el camino. Pensá si no hay una solución más simple sin utilizar CALL.

julio