ciclo de instrucción

This commit is contained in:
sejo 2021-07-12 21:23:19 -05:00
parent eb9d1aac08
commit 6fb019fd4c
4 changed files with 112 additions and 0 deletions

View File

@ -0,0 +1,106 @@
# 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})

View File

@ -41,6 +41,7 @@ use the arrow keys for cartesian movement within the space
* add an "official" pulling option (you can pull rocks right now, but in a hacky way)
* save rocks state (position and color) to file
* optimize the use of memory for rock colors, using one bit per rock instead of one byte
* optimize for 256x192 screensize
# the code

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -58,3 +58,8 @@ available samples:
you can find the code in the {uxnería}
=> https://codeberg.org/sejo/uxneria uxnería repo
# possible improvements
* automatically center interface on screen
* keys for setting the value of a nibble?
* midi output?