Utilizacion de valores guardados cuando se interrumpe

Utilizacion de valores guardados cuando se interrumpe

de Lautaro Ariel RamãRez De Leã“N -
Número de respuestas: 1

Hola, me surgió una duda realizando este ejercicio y es la siguiente.

Si trabajo en una maquina dedicada, donde sé que el registro AL lo utilizo solo para mantener un estado y no para otra cosa, a la hora de interrumpir, en la rutina de interrupción simplemente puedo llamar a AL?
En una maquina no dedicada esto sé que no lo podría hacer, entonces para guardar un estado podría tener algo así como "Estado_proc dw x" (siendo x un numero) donde cada vez que cambie el estado actualizo haciendo MOV word ptr [Estado_proc], AL"? A la hora de interrumpir si quiero tomar este valor, y asumiendo que tengo DS en el mismo lugar que CS, podría tomarlo como "CS:[Estado_proc]" no?

Saludos.

En respuesta a Lautaro Ariel RamãRez De Leã“N

Re: Utilizacion de valores guardados cuando se interrumpe

de Federico Rivero -
Hola Lautaro,

Respondo entrelíneas.

Si trabajo en una maquina dedicada, donde sé que el registro AL lo utilizo solo para mantener un estado y no para otra cosa, a la hora de interrumpir, en la rutina de interrupción simplemente puedo llamar a AL?

Correcto, si tenés cuidado de no usarlo en otra ocasión, podrías dedicar un registro para guardar una cierta variable a lo largo de todo el programa, incluídas las interrupciones. Cuidado que se dice usar el registro AL, no llamar.

En una maquina no dedicada esto sé que no lo podría hacer, entonces para guardar un estado podría tener algo así como "Estado_proc dw x" (siendo x un numero) donde cada vez que cambie el estado actualizo haciendo MOV word ptr [Estado_proc], AL"? A la hora de interrumpir si quiero tomar este valor, y asumiendo que tengo DS en el mismo lugar que CS, podría tomarlo como "CS:[Estado_proc]" no?

Correcto! En la interrupción tenés que usar CS, y no es necesario que tenga el mismo valor que DS (de hecho es posible que el valor de CS cambie en la interrupción ya que se carga desde el vector de interrupciones). El ensamblador se encarga de cambiar el valor de Estado_proc dentro de la interrupción de forma tal que CS:[Estado_proc] apunte a la posición de memoria donde está tu variable. 

Saludos,
Federico