Practico 10 ejercicio 2

Practico 10 ejercicio 2

de Santiago Juan Nieves Mendez -
Número de respuestas: 4

En la solución del ejercicio 2 del practico 10, agregan estos shift

shl BX,1
shl BX,1 ;me muevo al lugar de memoria donde comienza el nodo

Porque estan estos shift??? siguiendo el ejercicio no le encuentro sentido, el nodo en realidad no deberia comenzar directamente con el valor al que esta apuntando el registro???

Saludos

En respuesta a Santiago Juan Nieves Mendez

Re: Practico 10 ejercicio 2

de Gabriel Garcia Carrea -

Estamos con exactamente la misma duda, no logramos entender porque hace esos SHL para nosotros es como decis vos. Saludos

En respuesta a Gabriel Garcia Carrea

Re: Practico 10 ejercicio 2

de Federico Rivero -

Estimados:

Si miran la solución, verán que en la llamada recursiva se pasa en BX los índices del nodo a acceder (se pasan directamente los valores de hijoDer e hijoIzq del nodo anteriormente visitado). Por esta razón, es necesario convertir dicho índice a una dirección de memoria, y como cada nodo ocupa 4 bytes, eso significa multiplicar el índice del nodo por 4 (el primer nodo está en la dirección ESx16, el segundo en ES:[4], el tercero en ES:[8], etc), que es equivalente a realizar dos shifts a la izquierda.

Estoy de acuerdo que en la letra dice 'en BX se recibe un puntero', lo cual a mi criterio significa recibir una dirección de memoria, pero de cualquier modo, la traducción de índice a puntero se tiene que realizar en algún momento del ejercicio.

Saludos,

        Federico

En respuesta a Federico Rivero

Re: Practico 10 ejercicio 2

de Andres Bello Ureta -

A ver si entendi, porque yo tenia la misma duda que ellos.

Supongamos que en BX en vez de pasarse el puntero se pasa el indice.

El indice cero corresponde a NULL, entonces si ese indice es cero retorno false porque no lo encontre, sino es cero tengo que calcular la direccion correspondiente a dicho indice. Por lo tanto supongamos que BX=4. La solocion para calcular la direccion hace dos shift hacia la izquierda, es decir, BX=16 no?

Pero en en la direccion 16 de memoria no esta el elemento sino que esta el indice del hijo izq.

*Estoy en lo correcto o estoy mirando algo mal?

*No me queda claro como seria si en BX estuviera la direccion del primer nodo, ahi no seria mas facil ir sumandole 4? Estaria mal hacerlo si me pasan la direccion en vez del indice?

En respuesta a Andres Bello Ureta

Re: Practico 10 ejercicio 2

de Juan Saavedra -

Si el índice 0 no se usa, la posición entera no se usa. O sea, el primer elemento comienza en 4.

Si en BX viene la dirección del nodo, para ir hasta el nodo deseado habría que sumarle 4 x i siendo i el número del nodo.

Estaría mal mal si multiplicás la dirección por 4.

Saludos.