Programa principal en Maquina no dedicada

Programa principal en Maquina no dedicada

de Joel Cabrera Dechia -
Número de respuestas: 1

Buenas!

Me surgió una duda leyendo las notas cuando habla sobre las estrategias de programación. Dice que una de estas es la siguiente:

"Toda la lógica se implementa en las rutinas de interrupción y el programa principal o bien está en loop infinito (máquina dedicada) o bien instala e inicializa las rutinas de interrupción y termina".

¿Qué quiere decir que el programa principal termine? Porque creo que lo que me está jugando en contra es la intuición; yo me imagino como que la máquina ya no funciona más, como si se apagara, y eso incluye no poder leer las interrupciones. Seguro esto no es así y es por la costumbre de haber estado trabajando siempre en base a un programa principal o un loop.

Lo otro es qué onda con las variables en las no dedicadas, puedo usar la memoria libremente, verdad?

Agradezco me puedan aclarar las ideas.

Saludos,
Joel

En respuesta a Joel Cabrera Dechia

Re: Programa principal en Maquina no dedicada

de Federico Rivero -
Hola Joel!

Que el "programa principal" termine en este caso no implica que la máquina se apague, porque en este caso hay otras cosas ejecutando en la máquina (igual, la máquina no se apagaría ni aunque fuera dedicada, si no escribís más código la CPU sigue ejecutando el código basura que aparezca a continuación en memoria). A diferencia con el caso de la máquina dedicada, donde tu programa principal es lo único que ejecuta, en este caso de la máquina no dedicada, el "programa principal" es simplemente el "programa principal" de la funcionalidad que tú estás escribiendo. Algún programa estilo sistema operativo invoca a tu "programa principal", y es ese programa el que contiene el loop infinito que ejecutaría mientras se espera a las interrupciones.

Sobre las variables, sí, podés usar las directivas DB y DW para reservar espacio de memoria y luego referenciarlas en las interrupciones o el programa principal (de la misma forma que hicieron en el laboratorio). Si quieren usar variables globales, esta es la forma de hacerlo en una máquina no dedicada. Algo importante a tener en cuenta es que las directivas DB y DW se escriben FUERA de los PROC:

var1 db 0
var2 db 15
...
...

PROC principal
...
...

Esto DEBE ser así, ya que la variable var1 queda asociada a la dirección de memoria donde escriben la directiva, si la incluyen dentro del PROC, entonces el programa queda por ejemplo:

instrucción 1
instrucción 2
variable var1
instrucción 3

y si la CPU intenta ejecutar eso va a ejecutar las primeras 2 instrucciones y luego la variable var1 como si fuera una instrucción, con resultados impredecibles.

Saludos!
Federico