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.