# Practica 13 ## Paso 1: Habilitación de interrupciones y modo de funcionamiento ### Cuestión 1. Código de inicio correcto. ```sh ############################################################# ## Starting code ## ############################################################# .text .globl __start __start: la $t0, 0xffff0000 li $t1, 0x2 sb $t1, 0($t0) li $t1, 0x101 mtc0 $t1, $12 ``` ### Cuestión 2. ¿Por qué se producen los mensajes de error? Porque la dirección de retorno es la 0x00000000 ($k0 nunca se llega a modificar) ## Paso 2: Obtención de la dirección de retorno al programa de usuario ### Cuestión 3. Copia aquí la línea de código que escribe en $k0 la dirección de retorno ```sh ############################################################# ## CÓDIGO DEL MANEJADOR ## ############################################################# .ktext 0x80000080 ## Preserva el contexto del programa de usuario ## (nada de momento) ## Identifica y trata excepciones ## (nada de momento) ## Restaura el contexto ## (nada de momento) ## Restaura el modo usuario y vuelve al programa ## (falta algo) ##---- mfc0 $k0, $14 # $k0 <- EPC ##--- rfe jr $k0 ``` ## Paso 3: Tratamiento provisional de la interrupción de teclado ![](https://i.imgur.com/Nz1qfQT.png) ### Cuestión 4. ¿Por qué se escriben tantos asteriscos al pulsar una tecla? Porque no hemos cancelado la interupción ## Paso 4: Cancelación de la interrupción ### Cuestión 5. Líneas de código que cancelan la interrupción. ![](https://i.imgur.com/JU6Eugi.png) ### Cuestión 6. ¿Por qué acaba el programa de usuario antes de lo esperado? Porque el manegador modifica $t0 a 0xffff0000 que es un número negatvio y sale de del doble bule de bules.asm ## Paso 5: Gestión del contexto ### Cuestión 7. Modificaciones: #### En el segmento de datos del manejador: #### En el código de inicio del sistema: #### Al principio del código del manejador: #### Al final del código del manejador: ## Paso 6: Habilitación de las interrupciones del reloj ### Cuestión 8. Archivo teclado-y-reloj.handler. #### En el código de inicio: instrucciones que habilitan la interrupción del reloj #### En el código de inicio: instrucciones que habilitan la interrupción del reloj ### Cuestión 9. Explica por qué la consola mostrará asteriscos sin parar. ## Paso 7: Análisis de la causa de excepción ### Cuestión 10. Archivo teclado-y-reloj.handler #### Código a partir de retexc: #### Tratamiento de la interrupción del teclado #### Tratamiento del reloj. #### Instrucciones que leen y aíslan el código de causa de excepción #### Instrucciones que analizan los bits IP0 e IP2 de la palabra de estado