stringtranslate.com

NAR 1

NAR 1 o simplemente NAR ( serbio Na stavni R ačunar, en. Computadora educativa ) fue un modelo teórico de computadora creado por el profesor de la Facultad de Matemáticas de la Universidad de Belgrado Nedeljko Parezanović (en serbio: Недељко Парезановић). Se utilizó para cursos de lenguaje ensamblador y arquitectura informática .

Especificaciones

El procesador NAR 1 tiene un bus de direcciones de 5 bits (32 bytes de memoria direccionable) y un bus de datos de 8 bits . Las instrucciones de la máquina eran de un solo byte con tres bits más significativos que especificaban el código de operación y cinco bits menos significativos, la dirección de memoria del parámetro . Estaba disponible un único registro acumulador de 8 bits y no había banderas ni registros de banderas . Sólo estaba disponible el modo de direccionamiento absoluto y todos los demás se lograban mediante código automodificable .

Aunque esta es sólo una computadora teórica, se le dieron las siguientes características físicas:

Codificación y configuración de instrucciones.

No se especificaron dos instrucciones más, pero estaban comúnmente presentes en los simuladores y tomaban los códigos de instrucción 000aaaaa y 111aaaaa:

Programas de ejemplo

Un programa de muestra que resume una matriz de números enteros de 8 bits:

00: 0 ; entrada: 0 o valor 22, salida: resultado 01 ..21: 0,0,0 ... ; entrada: valores 1..21 22: MUA 0 ; Inicio del programa; Cargar acumulador desde la dirección 0 23: SABF 1 ; Agregue valor de la dirección 1 al acumulador 24: AUM 0 ; Almacenar el acumulador en la dirección 0 25: MUA 23 ; Cargar instrucción en la dirección 23 (SABF) 26: SABF 31 ; Sumar valor desde la dirección 31 (+1) al acumulador 27: AUM 23 ; Almacenar el acumulador en la dirección 23 (modifica la instrucción SABF) 28: SABF 30 ; Agregue valor desde la dirección 30 al acumulador 29: NES 22 ; Vuelva a 22 si el valor del acumulador es negativo 30: ZAR 10 ; Detenga la computadora. El argumento hace que este byte tenga el valor de -(SABF 22) = -54. 31: 1 ; Valor a agregar a la dirección en cada iteración                                 

El programa anterior suma hasta 22 valores de 8 bits si se ejecuta desde la dirección 22:

Los programas NAR 1 suelen modificarse automáticamente. A diferencia de otras arquitecturas, esto no es un "truco". Como la memoria no puede ser direccionada por un registro, la única forma de manipular dinámicamente los datos de la memoria es modificar las instrucciones de manipulación de la memoria. El ejemplo anterior también contiene un truco típico para ahorrar memoria: la instrucción (en la dirección 30) se reutiliza como datos por otra instrucción (en la dirección 28).

Si el valor inicial del acumulador se puede controlar desde el panel de control, se puede almacenar un valor número 23 en él. El programa anterior sólo debe modificarse ligeramente: la instrucción SABF 1 en la dirección 23 debe cambiarse a SABF 0 y el programa debe ejecutarse desde esa dirección (23) y no desde 22.

Otros trucos incluyeron el uso de cambios de signo después de modificar la instrucción, como se muestra en el siguiente ejemplo:

00 ..21: 0,0,0 ... ; valores de entrada 22 a 1 22: 0 ; entrada: 0 o valor 23, salida: resultado 23: MUA 21 ; inicio del programa; Cargar (siguiente) valor 24: SABF 22 ; Sume el subtotal en 22 al acumulador 25: AUM 22 ; Almacenar nuevo subtotal en 22 26: MUA 23 ; Cargue la instrucción 23 en el acumulador 27: SABF 31 ; Instrucción de disminución en 1 28: AUM 23 ; Instrucción de actualización 29: NES 23 ; Repita si la instrucción sigue siendo negativa 30: ZAR ; De lo contrario, detenga la computadora 31: -1 ; Constante necesaria para la instrucción a los 27                             

Aquí, la instrucción "MUA 21" en la dirección 23 tiene el valor binario 10010101, que es -107 decimal cuando se trata como un entero con signo en complemento a dos . Las instrucciones en las direcciones 26, 27 y 28 disminuyen este valor en 1 en cada iteración. Esto modificará los 5 bits menos significativos que especifican la dirección y no tocará los tres bits que indican la instrucción hasta que esa instrucción se convierta en MUA 0 (10000000 binario = -128 decimal, negativo). Una vez que esto se reduce en uno, se convierte en 01111111 (+127 decimal), que ya no es negativo y hará que se pase la instrucción de salto si es negativo en 29, procediendo a "detener la computadora" en 30.

De manera similar a lo anterior, este programa puede sumar entre 22 y 24 valores, dependiendo de si la dirección 22 se puede usar tanto para entrada como para salida y si el valor inicial del acumulador se puede usar como entrada (el programa luego debe ejecutarse desde la dirección 24 y la instrucción en 23 debería ser MUA 22).

Si una implementación particular detiene la computadora si encuentra un código de operación desconocido o implementa una instrucción de salto incondicional adicional con el código de operación "111aaaaa", entonces dicho comportamiento se puede utilizar de la siguiente manera:

00 ..22: 0,0,0 ... ; valores de entrada 23 a 1 23: 0 ; entrada: 0 o valor 24, salida: resultado 24: MUA 22 ; inicio del programa; Cargar (siguiente) valor 25: SABF 23 ; Sume el subtotal en 23 al acumulador 26: AUM 23 ; Almacenar nuevo subtotal en 23 27: MUA 24 ; Cargue la instrucción 24 en el acumulador 28: SABF 31 ; Instrucción de disminución en 1 29: AUM 24 ; Instrucción de actualización 30: NES 24 ; Repita si la instrucción sigue siendo negativa 31: -1 ; BES 31 o instrucción no válida y constante para instrucción en 28                           

Arriba, el valor de "-1" encontrado en la dirección 31 puede tratarse como una instrucción no válida que provoca que la computadora se detenga o como un salto incondicional (BES 31) a la misma dirección, lo que resulta en un bucle infinito que no afecta el resultado (control panel se puede utilizar para visualizarlo).

Finalmente, dependiendo de si se decide que una computadora detendrá la ejecución del programa si llega al final de la memoria (dirección 31, no retrocederá a la dirección 0), el programa anterior se puede reorganizar para tomar un valor más eliminando la necesidad de instrucción "detener la computadora" por completo, de la siguiente manera:

00 ..22: 0,0,0 ... ; valores de entrada 23 a 1 23: 0 ; entrada: 0 o valor 24, salida: resultado 24: -1 ; Constante necesaria para instrucción en 29 25: MUA 22 ; inicio del programa; Cargar (siguiente) valor 26: SABF 23 ; Sume el subtotal en 23 al acumulador 27: AUM 23 ; Almacene el nuevo subtotal en 23 28: MUA 25 ; Cargue la instrucción 25 en el acumulador 29: SABF 24 ; Instrucción de disminución en 1 30: AUM 25 ; Instrucción de actualización 31: NES 25 ; Repita si la instrucción sigue siendo negativa ; ------------- fin de la memoria                           

Trivialidades

Ver también

Prof. Dr. Nedeljko Parezanovic (en serbio)