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.
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.
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