[2015][Febrero][Problema 2]

[2015][Febrero][Problema 2]

de Santiago De Los Santos Fernandez -
Número de respuestas: 2

Tengo tres preguntas sobre la solucion propuesta del ejercicio:

1)  

shl AX,1 ; ahora ES:AX apunta a MATRIZ[i][0]

No está mal este comentario? siendo que como la matriz empieza en ES:BX y no se suma o se opera de ninguna manera AX con BX hasta ese punto, creo que el comentario correcto seria: Ahora ES: AX+BX apunta a MATRIZ[i][0].

2) en la misma linea:

shl AX,1 ; no entiendo cual es su proposito (tal vez por eso pienso que esta mal la primera parte). Si entiendo que hace la operación shl pero no se para que se usaria en ese caso.

3)

cuando hace: 

push DX

mul DX

pop DX

al ser largo (DX) un short, por lo que puede ser de hasta 2 bytes, y el iterador i va hasta DX por lo que tambien puede ser de dos bytes, el resultado puede ser mayor de dos bytes, no entiendo porque lo que este guardado en DX LUEGO de "mul DX" no es importante, como si el resultado seguro es de dos bytes. 

Gracias de antemano.


En respuesta a Santiago De Los Santos Fernandez

Re: Examen marzo 2015 ejercicio assembler

de Federico Rivero -

Estimado:

1) Correcto! Falta aclarar que AX es el desplazamiento con respecto a ES:BX y no solo con respecto a ES

2) El SHL se usa para pasar de índice a puntero. La matriz en memoria se ve como un arreglo (primero todas las posiciones de la primera fila, luego todas las de la segunda ,etc). Y hasta el momento se calculó i * largo, que es el índice en el arreglo de al posición MATRIZ[i][0], pero luego, como cada posición es un short (2 bytes), si i * largo = 30 (por decir algo), MATRIZ[i][0] está en ES:BX + 60, son dos bytes por cada posición.

3) En el examen se aclaró que se tomara largo = 128 (como la parte C), para todo el ejercicio, con lo cual esa multiplicación siempre cabe en 16 bits.

Saludos,

        Federico