[2021][Febrero][Problema 2]

[2021][Febrero][Problema 2]

de German Moreira Bellini -
Número de respuestas: 1

Buenas tengo dos consultas con este ejercicio.
La primera.

En la solución de este ejercicio , enseguida de preservar los valores de los registros se hace

mov si, [bp + 4]
mov di, [bp + 6]

Según entiendo el stack en este momento se encuentra de la siguiente forma:

i
j
RET

bp viejo <-- bp nuevo

y mas adelante, para obtener la posición de memoria donde esta el valor que se quiere leer de la matriz, se hace lo siguiente:

mov ax, ANCHO     ; convertir índice en puntero
mul si            ; i * ancho + j
add ax, di

No debería ser de la siguiente forma?
mov ax, ANCHO
mul di            ; i * ancho + j
add ax, si

O esta mal como supuse que se encontraba el stack?

Segunda.
Porque en otra parte se hace?
mov bx, ax
cmp byte_ptr es:[bx], 1

y no directamente
cmp byte_ptr es:[ax], 1

Saludos.


En respuesta a German Moreira Bellini

Re: Examen febrero 2021 Problema 2

de Federico Rivero -
Estimado,

Voy por partes, con respecto al orden de los parámetros, tenés razón, normalmente asumimos que los parámetros se insertan en el stack según aparecen en el código, de izquierda a derecha y en el examen se realiza al revés.

Con respecto al acceso a memoria, la instrucción cmp byte_ptr es:[ax], 1 no es válida en x86, debido que AX no puede ser utilizado para acceder a memoria, por eso es que se mueve a BX antes del acceso.

Saludos,
Federico