Buenas, en la solución de este ejercicio cuando compila, al buscar en un lugar del arreglo hace:
mov si, bx
shl si, 1
shl si,1 ; indice * 4 (cada nodo ocupa 4 bytes)
add si, di ; sumo el offset del arbol
xor ah, ah
mov al, es:[si]
Buenas, en la solución de este ejercicio cuando compila, al buscar en un lugar del arreglo hace:
mov si, bx
shl si, 1
shl si,1 ; indice * 4 (cada nodo ocupa 4 bytes)
add si, di ; sumo el offset del arbol
xor ah, ah
mov al, es:[si]
Estimado:
Estaría mal hacer un mov con ES:[BX] directamente. La explicación es lo que está entre paréntesis en el segundo SHL. Dado que cada nodo ocupa 4 bytes de memoria, y que en x86 la memoria se direcciona por bytes. Entre el inicio de un nodo y el siguiente hay 4 bytes, y por lo tanto se debe aumentar en 4 la dirección de memoria.
Saludos,
Federico
Gracias! Lo que me había comido es que al principio del código ya había poppeado el segmento a ES, eso es lo que me confundió más, y también sí que yo me comí el que era de 4 bytes cada elemento.