Hola, mirando la solución del ejercicio 3 del practico 10 me surgieron varias dudas.
En primer lugar, en la rutina en assembler 8086 no me queda claro por qué para acceder a la dirección de memoria donde se encuentra un nodo siempre se hace primero un shift a la izquierda de dos lugares. Supongo que esto se hace para quedarnos solo con el desplazamiento ya que se sabe que el segmento donde se encuentra el arreglo árbol es el ES y luego para acceder a dicha posición se accede a ES:[BX], pero igual no entiendo por qué la cantidad que se desplaza es 2 ni tampoco qué es concretamente lo que viene guardado en BX cuando se llama al procedimiento findNumber.
Por otro lado, en la parte C, para calcular el tamaño de stack necesario para un árbol en las condiciones del peor caso se considera el caso en que n (la cantidad de nodos del árbol) es 0, pero en la letra dice que el árbol tiene por lo menos un elemento. Entonces el paso base no tendría que ser f(1) en vez de f(0)? O hay algo que interpreté mal?
Otra duda de esta parte es que f(0) lo calcula como f(0) = 4 bytes (2 de la dirección de retorno y 2 de BX), pero tengo entendido que se van a hacer dos CALL al procedimiento findNumber, uno para verificar el subarbol izquierdo (que va a tener un cero) y otro para verificar el derecho (que también va a tener un 0). Entonces ahí no se necesitarían 4 bytes para la dirección de retorno? Porque al hacer CALL se pushea en el stack CS e IP, que cada uno ocupa 2 bytes y además se hacen 2 CALLs sumando un total de 4 bytes.
Por último, no entiendo por qué para el cálculo de la cantidad máxima de nodos que puede tener un árbol, en el punto 1. se considera que el tamaño de un nodo es 4 (yo pensaría que es 3 porque se guarda el dato, el nodo izquierdo y el derecho), y por qué se le resta 1 a esta cantidad. Vi la justificación de por qué se resta 1 (“el nodo correspondiente al offset 0 no se utiliza”) pero no me queda claro por qué habría un nodo que contiene el desplazamiento y si este nodo se encuentra antes de todos los nodos del árbol y por eso se considera que el tamaño de cualquier nodo es 4-1.
Puede ser que varias de estas dudas las tenga porque no entendí del todo cómo funciona el tema de los segmentos y los desplazamientos, y puede ser que esto sirva para aclarar. Les agradezco mucho si me pueden ayudar!