[ Practico 10 ej 3 ] Duda sobre la recursion

[ Practico 10 ej 3 ] Duda sobre la recursion

de Juan Pablo Sierra Ansuas -
Número de respuestas: 2
Me está matando el tema del pasaje de parámetros en este ejercicio.

Primero:

Se invoca de la forma:

PUSH puntero_segmento
PUSH puntero_desplazamiento
CALL nodos_dos_hijos
POP resultado

Y al comienzo del procedimiento se hace:

pop AX
; obtengo el puntero al arbol del stack
pop BX
pop ES

¿O sea se hacen dos PUSH pero luego tres POP?

Pero después peor aún porque se hacen:

push AX
push BX
push ES
push ES:[BX + 6]
push ES:[BX + 4]

O sea 5 push vs tres POP.

Me parece que algo se me está escapando. Si alguien me aclara estaría buenísimo.

Saludos !

-----------------

Agrego: Ya me avivé por qué era lo primero, el call hace un PUSH del ip al stack, por eso se saca del stack el IP y se guarda en AX.
En respuesta a Juan Pablo Sierra Ansuas

Re: [ Practico 10 ej 3 ] Duda sobre la recursion

de Javier Agustin Farias Gonzalez -
Buenas, te respondo para qué se hacen los push:

push AX es para guardar el ip
push BX y push ES son para preservar los registros, porque después se modifican en la llamada a nodos_dos_hijos. Si no hacés eso cuando volvés no podés hacer la llamada para el nodo derecho.
Los dos últimos push son para pasar los parámetros a nodos_dos_hijos.

Espero que esté clara la explicación.

Saludos!