# 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


(falta un linea)

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