Mi duda puntual es si hay inconveniente en poner una subrutina dentro de otra.
Saludos
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.
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
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