compudanzas/src/computadora_de_papel.gmo

107 lines
3.7 KiB
Plaintext

# computadora de papel
lang=es
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})