Buenas,
tengo una duda de la parte a de este ejercicio.
La matriz de variables de tipo short, que se ubica en memoria por filas (es decir, primero en memoria el valor MATRIZ[0][0], luego MATRIZ[0][1], así hasta completar la primer fila y luego MATRIZ[1][0], MATRIZ[1][1], etc).
No me queda claro en la solución la siguiente parte:
;armo en AX el offset hasta MATRIZ[i][0]
MOV AX, SI ; AX = i
PUSH DX; preservo DX porque se modifica en la multiplicación de 16 bits
MUL DX
-------- Por que el resultado quedaría en AX? si multiplico cosas de 16 bits el resultado queda en DX:AX---------------
POP DX ----Aca esta sobrescribiendo parte de la multiplicacion.
SHL AX, 1 -----No tendria que ser SHR? no entiendo que habria que multiplicarlo por dos.
ADD AX, DI
ADD AX, DI ---Porque suma dos veces DI?
Yo lo resolví de una forma distinta, se que cada fila de la matriz ocupa 2*largo Bytes. Y mantengo BX apuntando a el inicio de cada fila oses Matriz[i][0]. Entonces para acceder a Matriz[i][j] hago :
Mov Di , CX ; CX tiene el valor de j
SHR Di, 1
Entonces ES:[BX+DI] tiene Matriz[i][j] y cuando se cumple que CX es igual a DX osea j igual a largo tengo que incrementar i y mover BX a la siguiente fila y eso lo hago:
Mov Di,DX; Di=largo
SHR Di,1; Di=2*largo
ADD BX,Di; muevo BX a Matriz[i][0]
Esto esta mal?
Gracias