En la solución, en la septima instrucción se hace un MOV BX, [BP + 6] que se interpreta que se obtiene el desplazamiento en ES de arquiArbolito, ¿No debería ser BP + 5? Ya que en el stack está BP, IP_retorno, arquiChirimbolo, arquiArbolito con SP en el tope. Yo entiendo que char ocupa un Byte por lo tanto el +5 en vez de +6.
Estimado,
Si bien es cierto que el parámetro es de un solo byte, los PUSH y POP al stack solo pueden ser de 2 bytes (ver cartilla). Esto obliga a realizar el PUSH del parámetro de tipo char dentro de una variable de 16 bits Podés comprobar que respetamos esto en la parte de la comparación, donde movemos el parámetro del stack que contiene el char, a DX, pero luego la comparación la hacemos con DL.
Saludos!
Federico
Cierto, gracias!
Hola Federico, podrías explicarme en la parte b de dicho ejercicio por qué son N+1 llamadas recursivas? Lo que yo entiendo es que cada nodo genera 2 llamadas recursivas y por tanto serían 2n+1 llamadas.. sinceramente no encuentro el error. Agradecería si me pudieses dar una mano!
Estimado,
Lo que tú estás contando son las llamadas recursivas que se realizan en el programa, pero lo que interesa para el cálculo del máximo stack ocupado, es cuántas de esas llamadas son anidadas, debido a que las llamadas anidadas aumentan el tamaño del stack. En este sentido, si se está calculando la función para un nodo, la llamada del lado derecho va a provocar que el stack llegue a un cierto pico de tamaño, pero al volver de la llamada, el stack se verá igual que previo al call. Lo mismo ocurre con la llamada izquierda. Por esta razón es que no hay que sumar las llamadas de ambas ramas.
Saludos,
Federico
Ahhh ahora entendí, muchas gracias!!