Examen Febrero 2012 problema 2

Examen Febrero 2012 problema 2

de Leonardo Alfredo Levy Garrido -
Número de respuestas: 2

Hola, viendo la solución del problema dos, no entiendo porque hace

shl BX,5

Shl segun la documentación hace como un shift a la izquierda la cantidad de parametros especificados. 

Pero no entiendo porque debe hacerlo en ese caso.. Alguien sabe?

Gracias y Saludos!

En respuesta a Leonardo Alfredo Levy Garrido

Re: Examen Febrero 2012 problema 2

de Anthony Martin Cabrera Gonzalez -

shl BX, 5

no se puede hacer según la cartilla, en la solución debería decir

mov CL, 5

shl BX, CL

Sobre la pregunta:

BX tiene el indice de la matriz actual, y no el offset.

Una matriz ocupa en memoria 32 bytes, esto se debe a que el tamaño de la matriz es de 16 casilleros y cada uno tiene un entero de 2 bytes (32 = 16 * 2).

Por lo tanto para pasar a la siguiente matriz, no incrementas BX así nomas, sino que además tenes que "pasar por sobre todos los elementos de la matriz anterior"

Para pasar del indice de la matriz a su offset en memoria tenes que hacer

BX * 32, es decir se multiplica el indice por el tamaño de la "estructura", que en definitiva es lo mismo que BX * 2^5 que es lo mismo a "shl BX, 5"..

 

matrices[0] <- esta en la posicion ES:[MATRICES + 0]         (BX = 0*32, es decir, BX:= 0 << 5 )

matrices[1] <- esta en la posicion ES:[MATRICES + 1*32]   (BX = 1*32,  es decir, BX:= 1 << 5 )

matrices[2] <- esta en la posicion ES:[MATRICES + 2*32]   (BX = 2 * 32, es decir, BX:= 2 << 5)

matrices[3] <- esta en la posicion ES:[MATRICES + 3*32]   (BX = 3 * 32, es decir, BX:= 3 << 5)

... 

 

Las matrices en memoria estarían así

* Matriz0[0,0] (baja) *   ES:[MATRICES + 0]   (matrices[0])

* Matriz0[0,0] (alta) *    ES:[MATRICES + 1]  

* Matriz0[1,0] (baja) *   ES:[MATRICES + 2]   

* Matriz0[1,0] (alta) *   ES:[MATRICES + 3]   

* Matriz0[2,0] (baja) *   ES:[MATRICES + 4]   

* Matriz0[2,0] (alta) *   ES:[MATRICES + 5]   

* Matriz0[3,0] (baja) *   ES:[MATRICES + 6]   

* Matriz0[3,0] (alta) *   ES:[MATRICES + 7]   

* Matriz0[0,1] (baja) *   ES:[MATRICES + 8]   

* Matriz0[0,1] (alta) *    ES:[MATRICES + 9]   

* Matriz0[1,1] (baja) *   ES:[MATRICES + 10]   

....

* Matriz0[3,3] (baja) *   ES:[MATRICES + 30]   

* Matriz0[3,3] (alta) *   ES:[MATRICES + 31]   

* Matriz1[0,0] (baja) *   ES:[MATRICES + 32]     (matrices[1])

* Matriz1[0,0] (alta) *   ES:[MATRICES + 33]  

 ...

 

Disculpa si no se entendió, se me hace dificil explicarlo, te recomiendo la diapositiva:

Presentación 8086 parte 1, pag 40

y la explicación del profe, para pasar de indice a offset cuando trabajas con arreglos:

https://eva.fing.edu.uy/mod/forum/discuss.php?d=40521

En respuesta a Anthony Martin Cabrera Gonzalez

Re: Examen Febrero 2012 problema 2

de Leonardo Alfredo Levy Garrido -

Pah! terrible explicacion muchas gracias!

Si entiendo bien entonces cuando hace 

shl SI, 1

tambien esta multiplicando por 2 ya que quiere moverse de a 2 bytes no? Seria análogo a lo que explicabas pero en este caso se mueve de a 2 bytes.

Yo habia implementado este ejercicio con un puntero que iba se iba corriendo a partir de MATRICES hasta que terminaba de recorrer todas las matrices, digamos iba celda por celda hasta terminar todas las matrices ya que estban continuas.

Bueno muchas gracias de nuevo!

Saludos!