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