Loop del final de solución de parte C de Ejercicio 1

Loop del final de solución de parte C de Ejercicio 1

de Julian Tricanico Gadea -
Número de respuestas: 3

Dos preguntas.

Por qué se tiene que hacer este loop?

No sería más fácil hacer un jump incondicional en lugar de cargar un registro con cero para usar el JZ ?

En respuesta a Julian Tricanico Gadea

Re: Loop del final de solución de parte C de Ejercicio 1

de Gustavo Brown -

El loop se hace ahí para que la CPU no siga ejecutando lo que viene abajo en la memoria (que no sabemos que hay por lo tanto no sabemos que puede hacer). Por ejemplo podría ocurrir que se sobreescribieran los datos que se habían calculado, etc.

O sea, lo importante a tener en cuenta aquí es que la CPU no deja de ejecutar por el simple hecho de que terminé de ensamblar en cierto punto, sino que va a seguir ejecutando lo que sigue en las siguientes posiciones de memoria. 

Concuerdo contigo que sería más sencillo hacer directamente un salto incondicional.

Saludos,
  Gustavo


En respuesta a Gustavo Brown

Re: Loop del final de solución de parte C de Ejercicio 1

de Julian Tricanico Gadea -

Ta, excelente, gracias.

Y si querría salir del loop sólo puedo esperar por una interrupción?


Me resulta extraño porque las interrupciones tengo entendido que no modifican el "estado" (contexto) de la ejecución principal.


Tal vez la pregunta que quería hacer era "cómo o qué hago si quisiese pasar a hacer otra cosa?".

En respuesta a Julian Tricanico Gadea

Re: Loop del final de solución de parte C de Ejercicio 1

de Gustavo Brown -

Esto de poner un bucle infinito es a efectos de que no se ejecute cualquier cosa (basura, datos, etc).

Tené en cuenta que esto es un ejercicio de la asignatura, no es un problema real. 

De un bucle infinito solo podés salir reseteando la CPU o mediante una interrupción.

Sobre el tema de las interrupciones y el contexto, van un par de comentarios:

Con contexto me imagino que te referis a los registros de la CPU. Las interrupciones pueden modificar el contexto. En general no deben hacerlo porque el resultado final es impredecible (cuando la rutina que atiende la interrupción no sabe qué era lo que se estaba ejecutando).

Por otro lado las rutinas de interrupción es muy común que modifiquen variables globales al sistema (mantenidas en memoria), hagan entrada/salida, o sea que modifican el "entorno".

Sobre tu última pregunta, en el ejemplo tendrías que resetear la CPU y cargarle otro programa distinto...  Cuando curses Sistemas Operativos vas a tener una idea más realista de lo que ocurre y todo lo que tiene que hacer el sistema operativo para cargar programas y ponerlos a ejecutar.

Saludos,
  Gustavo