[2021][Diciembre][Problema 2]

Re: [2021][Diciembre][Problema 2]

de Federico Rivero -
Número de respuestas: 0
Hola Amalia!

Respondo entrelíneas.

Veo que en ambas soluciones se multiplica cant_niveles*2 y luego se va aumentando i de a 2. ¿Me podrían explicar con que fin se hace esto? No entiendo la diferencia con no multiplicarlo y aumentar i de a 1.

La diferencia está en la línea ADD DX, [BX + DI]. Al ir sumando de a 2, se avanza de 2 en 2 en las direcciones de memoria, y esto es correcto por que el arreglo cantidad_por_nivel es un arreglo de ints, los cuales en 8086 ocupan 16 bits cada uno, lo cual quiere decir que cada int del arreglo comienza cada 2 bytes y por tanto hay que sumar de a dos.

Otra duda es que el struct esta definido con el dato como int, pero después cuando accede al nodo hijo lo hace en [S1 +2]. Siendo un int, ¿no debería ocupar 4 bytes?

Esto quedó contestado arriba :)

Por otro lado, no entiendo el uso de DI en el loop en la solución alternativa

Esto es bastante fino, pero el valor de DI se setea en el procedimiento elementos_por_nivel_aux (el cual se invoca al inicio). Hay que seguir la ejecución con cuidado, pero DI tiene el desplazamiento con respecto a DS de la variable cantidad_por_nivel, y luego nunca es modificado, por lo tanto el valor de ese registro se mantiene.

Saludos,
Federico