Direccionamiento a memoria Duda

Direccionamiento a memoria Duda

de Federico Martinez Bertone -
Número de respuestas: 2

Buenas, estuve viendo el examen del 2 de febrero del 2011 de arquitectura 2 .


En el ejercicio 1.

No entiendo porque se hace un shift left al byte recibido antes de usarlo para direccionar.

Tampoco me queda claro porque direcciona asi. Yo sigo el siguiente razonamiento, basandome en como esta definido el struct. Para cambiar de transicion, y como s es un puntero, primero accederia a éste, y obtengo la direccion del arreglo "transiciones". Luego con ésta direccion haria algo como mov bx ,[bx+si] .

Como aparece ahi, pareciera que se direcciona a la direccion resultante de s + x + 1 , no pareciera que se  hiciera (s->transiciones)[x] ...

Que estaria mal en mi razonamiento?

 

En respuesta a Federico Martinez Bertone

Re: Direccionamiento a memoria Duda

de Federico Rivero -

Hola!

Creo que el problema está en que la estructura no es del todo feliz :). Cada nodo del tipo 'estado', tiene un byte de máscara y luego 256 palabras (de dos bytes), que se interpretan como punteros. Dicho esto, dado un puntero a un elemento de tipo estado (2 bytes que al entrar en la interrupción se asumen en BX), hay que indexar  dentro de la estructura para obtener el puntero al siguiente estado.

Con la entrada, se calcula el índice dentro de dicha estructura, es decir, un número entre 0 y 255, como el direccionamiento en 8086 es por bytes, y cada posición del arreglo de punteros ocupa 2 bytes, se debe multiplicar por dos ese índice (eso es lo que hace un shift left). Luego se suma uno pues la estructura contiene en primer lugar el dato (que ocupa 1 byte).

Si no queda claro avisá :)

Saludos!