107 lines
3.7 KiB
Plaintext
107 lines
3.7 KiB
Plaintext
# computadora de papel
|
|
|
|
adaptación de la wdr papiercomputer; modelo sencillo de una arquitectura computacional común.
|
|
|
|
=> https://wiki.xxiivv.com/site/papier.html papier computer
|
|
=> ./computer_architecture.gmi {computer architecture}
|
|
|
|
para la versión bailada, ve {danza papier}
|
|
|
|
# materiales
|
|
|
|
necesitamos una hoja de papel, algún instrumento para marcarla, y múltiples objetos de una misma clase (frijoles, palillos, canicas, fichas, etc).
|
|
|
|
## memoria(s)
|
|
|
|
la hoja la dividiremos en dos partes:
|
|
|
|
* memoria de programa
|
|
* memoria de datos (registros)
|
|
|
|
cada una de esas partes estará dividida en múltiples recuadros numerados. en esta primera versión, numeremos del 0 al 9.
|
|
|
|
cada recuadro está dividido a la mitad.
|
|
|
|
=> ./img/dibujo_papiercomputer-tabla.png dibujo mostrando una hoja dividida en dos secciones, cada una con 10 recuadros numerados del 0 al 9, y cada recuadro dividido a la mitad.
|
|
|
|
el objeto que usamos para marcarla nos puede servir para indicar nuestra posición actual en la memoria de programa.
|
|
|
|
# lista de instrucciones
|
|
|
|
la computadora cuenta con los 5 siguientes códigos de operación. el código es su identificador numérico único, y entre paréntesis se muestra su mnemónico
|
|
|
|
* 0: Fin del programa (FIN)
|
|
* 1: Condicional (CND)
|
|
* 2: Salta a instrucción (SLT)
|
|
* 3: Incrementa registro (INC)
|
|
* 4: Decrementa registro (DEC)
|
|
|
|
una instrucción completa consiste de ese código de operación, acompañada de un número llamado argumento u operando.
|
|
|
|
## operandos
|
|
|
|
ese operando tiene un significado distinto según la instrucción:
|
|
|
|
* FIN: argumento ignorado
|
|
* CND: el argumento es el número de Registro a consultar: si los contenidos de ese registro son 0, hay que saltarse una instrucción, y si no, hay que continuar normalmente con la siguiente.
|
|
* SLT: el argumento es el número de línea a la cual saltar a continuación
|
|
* INC: el argumento es el número de Registro que ha de incrementarse
|
|
* DEC: el argumento es el número de Registro que ha de decrementarse
|
|
|
|
## descripción
|
|
|
|
podemos expresar a las instrucciones de la siguiente manera:
|
|
|
|
* FIN: termina la ejecución del programa
|
|
* CND Rx: si el registro Rx tiene un valor igual a 0, salta una instrucción; si no, continúa normalmente
|
|
* SLT x: salta a la instrucción del programa número x
|
|
* INC Rx: súmale 1 al registro Rx
|
|
* DEC Rx: réstale 1 al registro Rx
|
|
|
|
# ciclo de instrucción
|
|
|
|
iniciamos con nuestro apuntador en la instrucción número 0.
|
|
|
|
el ciclo que seguiremos será:
|
|
|
|
* fetch: lee la instrucción almacenada en donde está el apuntador
|
|
* execute: ejecuta la instrucción correspondiente, y actualiza la posición del apuntador.
|
|
|
|
en las instrucciones INC y DEC, el apuntador siempre avanza a la siguiente casilla.
|
|
|
|
en la instrucción SLT, el apuntador se mueve a la casilla indicada como argumento.
|
|
|
|
en la instrucción CND, el apuntador se mueve a la casilla siguiente, o una más abajo, dependiendo de la condición indicada.
|
|
|
|
# ejemplo de programa
|
|
|
|
este programa suma los números que están en R0 y R1, colocando el resultado en R0
|
|
|
|
## lista de números
|
|
|
|
este es el programa en formato de lista de números a colocar en la memoria de programa.
|
|
|
|
* 0: 2 3
|
|
* 1: 4 1
|
|
* 2: 3 0
|
|
* 3: 1 1
|
|
* 4: 2 1
|
|
* 5: 0 0
|
|
|
|
el primer dígito en la lista es el número de línea.
|
|
|
|
los dos dígitos siguientes son el primer y segundo números de instrucción
|
|
|
|
## lenguaje ensamblador
|
|
|
|
usando las palabras clave (mnemónicos) para indicar los códigos de operación, el programa se vería así:
|
|
|
|
* 0: SLT 3 (salta a la línea 3)
|
|
* 1: DEC 1 (decrementa R1)
|
|
* 2: INC 0 (incrementa R0)
|
|
* 3: CND 1 (¿R1 es 0? si sí, salta una instrucción, si no, continúa)
|
|
* 4: SLT 1 (salta a la línea 1)
|
|
* 5: FIN 0 (fin del programa)
|
|
|
|
(esta forma de programar, en lenguaje ensamblador, es a la que se refiere la práctica de {s-camino})
|