Este proyecto consiste en el desarrollo de un simulador de un banco de registros con 8 registros, del r0
al r7
. El banco de registros contará con 5 entradas y 2 salidas.
Las entradas serán las siguientes:
regA
: para seleccionar el registro del que se mostrará su contenido en la salida A
.regB
: para seleccionar el registro del que se mostrará su contenido en la salida B
.regC
: para seleccionar el registro en el que se escribirá el valor indicado en la entrada dato
.dato
: para indicar el valor que se deberá escribir en el registro indicado por la entrada regC
.L
: para indicar si se quiere realizar una operación de lectura en el banco de registros (cuando esté marcada) o de escritura (cuando esté desmarcada).
Las salidas del banco de registros serán las siguientes:
A
: muestra el contenido del registro indicado en la entrada regA
.B
: muestra el contenido del registro indicado en la entrada regB
.Asimismo, la aplicación proporcionará un botón Actualizar
que cuando se pulse, activará la simulación del funcionamiento del banco de registros. A saber:
L
está marcada, se simulará una operación de lectura actualizando el valor de las salidas A
y B
con el contenido de los registros indicados en las entradas regA
y regB
,
respectivamente.L
no está marcada, se simulará una operación de escritura actualizando el contenido del registro indicado por la entrada regC
con el valor de la entrada dato
.
En este proyecto se utilizarán:
HorizontalArrangement
y TableArrangement
.
Se propone construir esta aplicación de forma incremental, siguiendo los pasos que se describen a continuación.
El primer paso consistirá en desarrollar una aplicación que utilice una lista para almacenar el contenido de los registros del r0
al r7
(que se inicializarán con los números del 1 al 8) y que muestre en pantalla su
contenido.
La interfaz gráfica constará de los siguientes elementos:
r0
, r1
, ..., r7
y que inicialmente tendrán el texto «¿?» (el código de la aplicación deberá encargarse de modificarlas con el
contenido del registro correspondiente).El código de la aplicación deberá:
registros
con una lista de 8 elementos con los números del 1 al 8.r0
, r1
, ..., r7
con los elementos de la lista que se encuentren en las posiciones de la 1 al 8, respectivamente.registros
por programa Se propone a continuación que en lugar de inicializar la lista registros
a mano, esta se inicialice utilizando código. Para ello, deberán realizarse los siguientes cambios:
registros
.r0
a r7
, se deberán añadir elementos a la lista utilizando una estructura de control que permita añadir a la lista 8
elementos con los números del 1 al 8, respectivamente.Extensión 2.1: modifica el código para que los elementos de la lista se inicialicen con los números 10, 20, 30, ..., 80.
Extensión 2.2: modifica el código para que el contenido de los registros se visualice en hexadecimal.
El objetivo de este paso es añadir las entradas y salidas relacionadas con la lectura del banco de registros y el código necesario para simular una operación de lectura del banco de registros. Para ello, deberán añadirse los siguientes elementos gráficos:
regA
y regB
, respectivamente, que solo admitirán entradas numéricas y que, para facilitar las pruebas de la aplicación, se iniciarán con dos números cualesquiera entre 0 y
7.A
y B
, respectivamente, y que inicialmente tendrán el texto «¿?».Actualizar
con el texto «Actualizar».Además, deberá añadirse código de tal forma que cuando el usuario pulse el botón Actualizar
, se muestre en las etiquetas A
y B
el contenido de los registros especificados en las entradas regA
y regB
, respectivamente. Para esta parte se recomienda:
lee
que se encargue de actualizar las salidas en función del valor presente en las entradas. Cuando desarrolles este procedimiento deberás tener en cuenta que los registros del banco de registros van del
0 al 7, que estos están almacenados en una lista, registros
, y que en MIT App Inventor
el primer elemento de una lista está en la posición 1.Actualizar
, se llame al procedimiento lee
.Extensión 3.1: modifica la interfaz gráfica y el código para en lugar de utilizar cuadros de texto para las entradas regA
y regB
, se utilicen sendos Spinners
.
Extensión 3.2: modifica el código para que las salidas A
y B
se muestren en hexadecimal.
El objetivo de este paso es añadir las entradas y salidas relacionadas con la escritura del banco de registros y el código necesario para simular una operación de escritura del banco de registros. Para ello, deberán añadirse los siguientes elementos gráficos:
regC
y dato
, respectivamente, que solo admitirán entradas numéricas y que, para facilitar las pruebas de la aplicación, se iniciarán con dos números cualesquiera (el de
regC
entre 0 y 7).Además, deberá añadirse código de tal forma que cuando el usuario pulse el botón Actualizar
, se actualice el contenido del registro indicado por regC
con el valor de dato
y esta actualización se muestre
en pantalla. Para esta parte se recomienda:
actualiza_etiquetas
al que se moverá el código que actualmente está en el manejador del evento correspondiente a la inicialización de la pantalla y que se encarga de copiar cada elemento de la lista registros
a las etiquetas r0
a la r7
.actualiza_etiquetas
desde el manejador del evento correspondiente a la inicialización de la pantalla.escribe
que escriba el valor de dato
en el elemento de la lista correspondiente al registro regC
y que llame al procedimiento actualiza_etiquetas
.Actualizar
llama al procedimiento lee
para que en su lugar se llame al procedimiento escribe
.Extensión 4.1: modifica la interfaz gráfica y el código para en lugar de utilizar un cuadro de texto para la entrada regC
, se utilice un Spinner
.
El objetivo de último paso es añadir la entrada de control L
que permitirá seleccionar qué operación, lectura o escritura, se deberá realizar cuando se pulse el botón Actualizar
. Para ello, deberán añadirse los
siguientes elementos gráficos:
Checkbox
) que se renombrarán a L
, que inicialmente estará marcada y sin texto.Además, deberá añadirse código de tal forma que cuando el usuario pulse el botón Actualizar
, se llame al procedimiento lee
si la casilla L
está marcada o al procedimiento escribe
si está
desmarcada.
Extensión 5.1: modifica el código para que al leer o escribir en un registro, se indique gráficamente qué registro se ha leído o escrito cambiando el color de fondo de la etiqueta asociada a ese registro. (Se recomienda crear un procedimiento que dado un número de registro, cambie el color de fondo de dicho registro. De esta forma, bastará con llamar a ese procedimiento cada vez que se lea o escriba un registro simplemente indicando el número del registro del que se ha leído o en el que se ha escrito.)
Extensión 5.6 (avanzada): Integrar el simulador del banco de registros con el simulador de una ALU descrito en el proyecto anterior de tal forma que:
A
y B
de la ALU se obtengan directamente de los valores presentes en las salidas A
y B
del banco de registros.dato
del banco de registros se obtenga directamente de la salida Resultado
de la ALU.regA
y regB
;regC
el resultado obtenido por la ALU.En este proyecto se ha desarrollado un simulador de un banco de registros de 8 registros, que puede proporcionar el contenido de los registros indicados por sus entradas regA
y regB
y escribir el número presente en su
entrada dato
en el registro dado por la entrada regC
.
Para realizar este proyecto se han utilizado:
HorizontalArrangement
y TableArrangement
.