# Practica 12 ETC ## Cuestión 1 #### Si cambiara la interfaz del teclado de manera que el bit R pasara a ocupar la posición 5 de la palabra de control/estado, ¿qué instrucción debería cambiarse y cómo? `andi $t1, $t1, 32 [100000 en binario] ` `2^5` ## Cuestión 2 #### Modifica espera.asm añadiendo una instrucción que lea del registro de datos y deje el contenido en $t2, como indica la Figura 6. Observa que la dirección de este registro se expresa en la Figura 4 como “DB+4”. ```shell= ### A COMPLETAR: lee el registro de datos del teclado #### lb $t2, 4($t0) move $a0, $t2 li $v0, 1 syscall ``` #### Prueba a ejecutar varias veces seguidas el nuevo programa modificado, sin cerrar el simulador. Notarás que el programa siempre espera a que se pulse una tecla, porque el bit de preparado queda con el valor R = 0 al final de la ejecución. ``` # Salida por consol Esperando... 104 Fin Esperando... 97 Fin Esperando... 112 Fin ``` ## Cuestión 3 #### Copia aquí las líneas de código que realizan la sincronización y la lectura del registro de datos. ```sh __start: # Escribe en consola mensaje T1 bucle: li $v0, 4 la $a0, T1 syscall # Carga dir base teclado la $t0, 0xffff0000 # Espera bit R == 1 espera: lw $t1,0($t0) andi $t1,$t1,1 beqz $t1,espera ### A COMPLETAR: lee el registro de datos del teclado lb $t2, 4($t0) move $a0, $t2 li $v0, 1 syscall #espera tecla . bne $a0, 46, bucle # 46 -> '.' en ASCII # Escribe en consola mensaje T2 li $v0, 4 # imprime el string la $a0, T2 syscall # exit li $v0, 10 syscall .end ``` ## Cuestión 4 #### Escribe el códido de getchar y putchar ![](https://i.imgur.com/5zjh4R0.png) ![](https://i.imgur.com/Mb1CRSp.png) (falta un linea) ![](https://i.imgur.com/sbzmk4C.png) ```sh getchar: # $v0 = getchar() ### A COMPLETAR: código de la función li $t0, 0xffff0000 espera: lw $t1, 0($t0) andi $t1,$t1,1 beqz $t1, espera lb $v0, 4($t0) ### jr $ra putchar: # putchar($a0) ### A COMPLETAR: código de la función li $t0, 0xffff0008 esperaCo: lw $t1, 0 ($t0) andi $t1,$t1, 1 beqz $t1,esperaC0 sb $a0, 4($t0) ### jr $ra ``` #### Ejecuta eco.asm (con Simulator>Run o pulsando [F5]) y detenlo mediante *Simulator>Break* cuando esté esperando a que se pulse una tecla, después de mostrar en la consola el texto“**P12**”. Consulte el valor del PC e identifica la instrucción a la que señala. Puede parar en cualquiera de las siguientes 3 instrucciones: - Instrucción - lw $t1, 0 ( $t0 ) - andi $t1, $t1, 1 - beqz $t1, espera - Valor del PC (hex): - 0x00400044 - 0x00400048 - 0x0040004C ## Cuestión ¿Puedes explicar por qué el programa se ha detenido en ese punto? Porque son las intrucciones que están en el bulce de espera para que el bit R sea 1. ```sh espera: lw $t1, 0($t0) andi $t1,$t1,1 beqz $t1, espera ```