[2021][Diciembre][Problema 2]

[2021][Diciembre][Problema 2]

de Amalia Lucia Balestrazzi Silveira -
Número de respuestas: 1

Buenas, tengo algunas dudas con la solucion planteada. 

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.

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?

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


Es claro que la intención es usar BX para la variable i. Pero después hace ADD DX, [BX+DI], y no queda claro quién es DI porque hasta ese momento no habia sido introducido, pero parecería que en ese direccionamiento se usa BX para apuntar al comienzo de "cant_por_nivel" y DI como "i". ¿Pueden explicar un poco esa parte? 

Gracias

En respuesta a Amalia Lucia Balestrazzi Silveira

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

de Federico Rivero -
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