[2013][Febrero][Problema 1]

[2013][Febrero][Problema 1]

de Agustin Becerra Gonzalez -
Número de respuestas: 6

Tengo un par de dudas del examen de febrero del 2013.
1- Cuando invoca a la rutina de interrupción en Assembler llama al procedimiento como "Timer proc far" ... Es necesario llamar a todas las rutinas de interrupción como far?
2- En el primer procedimiento del assembler, ¿no hay que habilitar las interrupciones con el comando STI? (en la solución no lo hace)
3- Dentro de la rutina de interrupción utiliza "and AL, 80h" y dice "aplico mascara más significativo". A que se refiere? En la letra se menciona que coloca un 1 en el bit mas significativo del byte de entrada, pero no entiendo como chequea que haya un 1 en el bit mas significativo. ¿Acaso asumo que los demas bits estan en 0?

Gracias desde ya. Saludos.


En respuesta a Agustin Becerra Gonzalez

Re: Assembler Febrero 2013

de Agustin Becerra Gonzalez -
En respuesta a Agustin Becerra Gonzalez

Re: Assembler Febrero 2013

de Federico Rivero -

Estimado:

1) Si, poné FAR. Las llamadas a estos procedimientos se hacen a través de una dirección segmentada con un valor de segmento posiblemente distinto al actual. [EDIT: en realidad, dado que la invocación se debería hacer únicamente a través del mecanismo de interrupciones, y como esta no ejecuta RET sno IRET, no sería estrictamente necesario incluir la directiva FAR. Pero ponerla no hace daño :) ]

2)  Si te referís al procedimiento getDistance, la respuesta es no. No hay razón para pensar que las interrupciones estén deshabilitadas al ingresar a dicho procedimiento. Si te referís a la interrupción, tampoco es necesario pues la instrucción iret ya actualiza las banderas, en particular cambiando el valor de las flags I y T.

3)  No se puede saumir nada. Justamente se aplica una máscara para ignorar el resto de los bits. En este caso, al hacer AND con 0x80, se dejan en 0 los últimos 7 bits del registro AL, y en el más significativo se deja lo que hubiere antes.

Saludos!

        Fedeirico

En respuesta a Federico Rivero

Re: Assembler Febrero 2013

de Hernan Esteves Rosano -

Donde hay que poner el "enable()" es en el main siempre, ¿no? 

Y otra consulta,  en alto nivel cuando escribimos "Instalar rutinas de interrupcion", en assembler 8086 ¿que es lo que se debe hacer exactamente?

 

Gracias

En respuesta a Hernan Esteves Rosano

Re: Assembler Febrero 2013

de Federico Rivero -

Estimado:

En 8086, la instalación de las interrupciones consiste en la carga del vector de interrupciones con los valores correctos. Esta carga no se puede hacer con las interrupciones habilitadas, por lo que se deben deshabilitar antes de hacerlo, y volver a habilitarlas luego.

Saludos,

      Federico

En respuesta a Federico Rivero

Re: Assembler Febrero 2013

de Agustin Becerra Gonzalez -

Gracias por las respuestas, aunque sigo sin entender lo de la instalacion de las interrupciones. Cuando se deben instalar? En el ejemplo de interrupciones de 8086 del teorico se habilitan las interrupciones con STI (he de ahi mi pregunta si no debian habilitarse).

En respuesta a Hernan Esteves Rosano

Re: Assembler Febrero 2013

de Nicolas Tabare Tomeo Raspino -

Lo mas correcto no sería realizar:

disable()

//Instalo Rutinas

enable()
?
Porque he visto en ejemplos y resoluciones de examenes (febrero 2012) donde solo va el enable() pero por ejemplo en el caso de las diapositivas de Intel 8086 cuando se realiza el ejemplo en alto nivel lo hace de la primera manera.