Ejercicio 3 Practico 6

Ejercicio 3 Practico 6

de Romina Sosa Nicolais -
Número de respuestas: 1

Hola, buenas tardes, estuve leyendo al solución subida del ejercicio 3 del practico 6 y me surgieron algunas dudas.
Mi primer duda es que el programa no debería tener un loop infinito para que la CPU no ejecute instrucciones basura y me sobrescriba los valores calculados anteriormente en mi programa?.
Luego, dentro del do while, en la línea donde se ejecuta la instrucción JN con dato_menor, no deberían estar cambiadas las operaciones de SUB y ADD? Ya que aunque no se cumpla la condición de la flag N igual se va a ejecutar la siguiente instrucción de SUB por lo que el valor de sup va a cambiar cuando en realidad no queremos que cambie en ese caso, además de que le esta indicando que haga un salto hacia dato_menor el cuál no se nombra en ninguna parte. Por eso no debería hacer un salto hacia donde dice "dato_,mayor" (que en este caso debería decir dato_menor) y recién ahí ejecutar la instrucción SUB, y en donde estaba antes poner la instrucción de ADD para que se ejecute siempre que no se cumplan ninguna de las dos condiciones de los saltos anteriores?
Por ultimo según la descripción de las instrucciones de los jump, no me quedo del todo claro si en las partes donde dice "dato_menor, esta_true, etc" estos representan números indicando a donde tienen que moverse el JM. En caso  de ser así por ejemplo ¿esta_true debería valer 5,y do debería valer un número negativo?

En respuesta a Romina Sosa Nicolais

Re: Ejercicio 3 Practico 6

de Federico Rivero -

Estimada,

Contesto por partes.

Mi primer duda es que el programa no debería tener un loop infinito para que la CPU no ejecute instrucciones basura y me sobrescriba los valores calculados anteriormente en mi programa?.

Sí, correcto! Debería finalizar con un loop infinito para que no se ejecute basura y el sistema se comporte de forma errática.

Luego, dentro del do while, en la línea donde se ejecuta la instrucción JN con dato_menor, no deberían estar cambiadas las operaciones de SUB y ADD?

Sí, también correcto! Tu explicación está perfecta.

Por ultimo según la descripción de las instrucciones de los jump, no me quedo del todo claro si en las partes donde dice "dato_menor, esta_true, etc" estos representan números indicando a donde tienen que moverse el JM. En caso  de ser así por ejemplo ¿esta_true debería valer 5,y do debería valer un número negativo?

La solución asume que el ensamblador va a colocar el número correcto en le lugar de esas etiquetas. Al ensamblar esas instrucciones se van a sustituir por números, como bien decís vos. La instrucción jz esta_true pasaría a ser jz 5  como bien decís, y al ensamblar quedaría 1110 0000 0000 0101  (asumiendo 1110 = opcode del jn). La instrucción jn do pasaría a ser jn -12 , y se ensamblaría a 1110 1111 1111 0100  (ya que 1111 1111 0100 = -12d en complemento a 2 de 12 bits).

Saludos!
Federico