[Practico7] [Ej3]

[Practico7] [Ej3]

de Usuario eliminado -
Número de respuestas: 5

Hola, me quedo una duda de la resolucion del ejercicio 3 que se hizo en el practico. No entiendo porque se necesita shiftear a la izquierda 2 veces para poder luego comparar el dato del nodo.

Buscar proc

mov CL,0

cmp BX,0

jmz fin

shl BX,1

shl BX,1

cmp AX,ES:[BX]

...

 

Muchas gracias

En respuesta a Usuario eliminado

Re: [Practico7] [Ej3]

de Federico Rivero -

Hola!

Ese procedimiento recibe en BX el índice del arreglo (árbol), que indica el nodo sobre el que se debe trabajar. Para poder accederlo en memoria, como el direccionamiento es de a byte, se debe traducir ese índice a la dirección en bytes correspondiente. Como cada elemento de la estructura ocupa 4 bytes, hay que multiplicar el índice por 4 (shiftear 2 veces), para obtener el desplazamiento.

Saludos,

Federico

En respuesta a Federico Rivero

Re: [Practico7] [Ej3]

de Cristian Andres Bauza Silva -

Hola,

No entiendo lo de la multiplicación, o sea, si los nodos ocupan 4bytes 2 para el

entero y uno para cada puntero al siguiente. Si te pasan en Bx el puntero al 

primero, por que se multiplica por cuatro? no seria directamente el primer 

valor en ES:[Bx]? capas que en el primero no afecta porque Bx puede ser 0,

pero suponete que va al hijo izquierdo y Bx es 00000100 b cuando lo shifteas

2 veces queda 000100000 que teiene que ver esa direccion con la que tenia

el puntero? 

Perdon, de seguro estoy re mareado, pero no lo entendi.

 

Saludos!

En respuesta a Cristian Andres Bauza Silva

Re: [Practico7] [Ej3]

de Federico Rivero -

Hola!

Lo que pasa es que la letra está confusa. En la parte de alto nivel dice que se recibe un índice, y en la parte de bajo nivel dice que se recibe en BX un puntero al nodo. En el práctico seguimos la letra en alto nivel, y después se hizo una compilación bastante estricta, por lo cual el valor pasado por parámetro se correspondía con un índice. Es claro que si interpretás que en BX recibís el desplazamiento, sí, el primer nodo está en la dirección que indicás, pero haciéndolo así luego hay que hacer la traducción al realizar la llamada recursiva (pues hijoIzq e hijoDer son índices, y acá si no hay interpretación que valga).

Saludos!

En respuesta a Federico Rivero

Re: [Practico7] [Ej3]

de Cristian Andres Bauza Silva -

Aaa, genial, 

yo estaba siempre pensando que con indice se referian a puntero, es 

el indice del array. Ahora si clarisimo. Despues, dice que se deben mantener

todos los registros, pero el push de Bx lo hace en el else, despues de 

multiplicarlo por 4, eso esta bien? 

En la parte b, lei el ortro post y me quedo casi claro, la el 255 y no

256 es porque el indice 0 se usa para indicar el array vacio verdad?

 

Saludos y gracias!