[2021][Marzo][Problema 2]

[2021][Marzo][Problema 2]

de Donato Aguirre Reyes -
Número de respuestas: 2

Hola buenas tardes,

En la solución del ejercicio 2 parte A no me quedó claro porque DI está en [BP+6] y en lugar de [BP+5] 

Tampoco entendí por qué se necesitan las siguientes instrucciones en la parte de restauración del stack: MOV BX, [BP+2]MOV [BP+6], BX y ADD SP, 4

Agradecería si me pueden explicar,

Saludos


En respuesta a Donato Aguirre Reyes

Re: [Marzo 2021][Ejercicio 2]

de Federico Rivero -
Estimado,

Voy entrelíneas:

En la solución del ejercicio 2 parte A no me quedó claro por qué DI está en [BP+6] y en lugar de [BP+5]

Los enteros en x86 ocupan 16 bits (2 bytes), por lo que tanto i como j ocupan 2 bytes. Luego de ejecutar PUSH BP, MOV BP, SP, el stack queda como a continuación

[ parte baja BP ]    <-  BP
[ parte alta BP ]    <- BP + 1
[ parte baja IP ]    <- BP + 2
[ parte alta IP ]    <- BP + 3
[ parte baja j  ]    <- BP + 4
[ parte alta j  ]    <- BP + 5
[ parte baja i  ]    <- BP + 6
[ parte alta i  ]    <- BP + 7
Por lo tanto, para mover los 2 bytes de i y j, se debe acceder a [BP + 4]  y [BP + 6], como marqué en el dibujo.

Tampoco entendí por qué se necesitan las siguientes instrucciones en la parte de restauración del stack: MOV BX, [BP+2], MOV [BP+6], BX y ADD SP, 4

Esto es el caso clásico de retirar parámetros del stack (entran 2 parámetros y salen 0).  La explicación detallada es algo larga, quizás lo mejor sea que lo veas a partir de la diapo 60 del siguiente link:

https://eva.fing.edu.uy/pluginfile.php/144878/mod_resource/content/2/07-intel-8086-2-BU.pdf

Y De Cola lo explica en el siguiente video:

https://open.fing.edu.uy/courses/ac-2020/10

En el rango [1.45 - 1.49] (hora y 45 min hasta hora y 49 aprox)

Cualquier cosa si te quedan dudas después de ver eso avisame y lo hablamos!

Saludos,
Federico