Tamaño de punteros en 8086

Tamaño de punteros en 8086

de Agustín Torres Mari -
Número de respuestas: 3

Buenas, tengo una duda en cuanto al tamaño de los punteros, y como considerarlos.

En el caso hipotético que tenga un struct que es un árbol de caracteres contenido en el segmento DS, definido como un carácter, un puntero al hijo izquierdo y otro al hijo derecho.

Suponiendo que el carácter se encuentra en la posición DS:[BX], el hijo izquierdo se encontraría en la direccion DS:[BX+1], pues cada carácter ocupa un byte.

Pero, el hijo derecho, se encuentra en la posición DS:[BX+3], porque aunque el tipo de dato sea un carácter, los offset son de 16 bits, o se encuentra en la posición DS:[BX+2] porque es un árbol de caracteres?

En respuesta a Agustín Torres Mari

Re: Tamaño de punteros en 8086

de Federico Rivero -

Hola Agustín!

Para contestar la pregunta, primero quiero recordar que las direcciones en 8086 siempre se forman con un segmento de 16 bits + un desplazamiento de 16 bits. Con segmento y desplazamiento se forma una dirección de memoria de 20 bits con la que se accede a la memoria física.

Recordando eso, hay dos opciones: 

1) Que el puntero se represente como puntero FAR, es decir, que tanto el segmento como el desplazamiento se guardan en el nodo. En este caso el puntero ocupa 4 bytes. Si este fuera el caso, en DS:[BX+1] se encontraría el desplazamiento del hijo izquierdo, en DS:[BX + 3] el segmento del hijo izquierdo, en DS:[BX+5] el desplazamiento del hijo derecho y en DS:[BX + 7] el segmento del hijo derecho.

2) Que el puntero se represente como puntero NEAR, es decir, que solo se guarda el desplazamiento en el nodo, y el puntero es relativo a un cierto segmento predefinido (por ejemplo ES). En este caso se guardan 2 bytes de memoria, el puntero al hijo derecho se encontraría entonces en DS:[BX+3].

En resumen, el tipo del dato apuntado no está relacionado con el tamaño de los punteros que lo referencian.

Saludos!

        Federico