NAR 2 ( en serbio Na stavni R ačunar 2, en. Educational Computer 2) es un modelo teórico de una computadora de palabras de 32 bits creado por el profesor de la Facultad de Matemáticas de la Universidad de Belgrado Nedeljko Parezanović como una mejora de su predecesor, NAR 1. Se utilizó para cursos de lenguaje ensamblador y arquitectura de computadoras . La palabra "nar" significa granada en serbio . Se han creado muchos simuladores de NAR 2; por ejemplo, uno se llamó "Šljiva" ( en. ciruela ) porque esa fruta crece en Serbia , mientras que "nar" no.
La unidad central de procesamiento NAR 2 utiliza palabras de máquina de 32 bits. Cada instrucción de máquina contiene:
NAR 2 tiene cuatro registros:
Los siguientes códigos de operación estaban disponibles (no se especificaron los códigos reales, solo los mnemónicos):
Nota: todos los mnemónicos de este grupo terminan con la letra "F", que indica aritmética de " punto fijo". Sin embargo, esto solo es cierto para la suma, la resta y la negación (cambio de signo). La multiplicación y la división suponen que el "punto" está fijo a la derecha del bit menos significativo, es decir, que los números son enteros.
Nota: las operaciones anteriores son todas operaciones bit a bit . Sus nombres implican que son operaciones puramente lógicas , pero se pueden explicar como si operaran sobre vectores de bits y aplicaran operaciones lógicas por separado sobre cada par de bits.
La sintaxis del lenguaje ensamblador NAR 2 fue diseñada para ser sencilla y fácil de analizar. Cada línea de programa puede contener hasta una instrucción especificada de la siguiente manera:
Código de muestra:
aum X1, p, 0 mua n, 1 aum 15 pir X1, p, n, 1 mua X1, p, n, 0 oduf n, 1 oduf X2, p, n, 0
Con cuatro bits de selección de modo de dirección (P, R, I y N: indexado, relativo, indirecto e inmediato), las instrucciones NAR 2 pueden especificar 16 modos de direccionamiento diferentes, pero no todos tienen sentido en todas las instrucciones. En la siguiente tabla:
Banderas de direcciones | Tipo de instrucción | ||||
---|---|---|---|---|---|
PAG | R | I | norte | Datos | Saltar |
- | - | - | - | M[p] | pag |
- | - | - | norte | pag | pag |
- | - | I | - | M[f(M[p])] | f(M[p]) |
- | - | I | norte | f(M[p]) | f(M[p]) |
- | R | - | - | M[BN+p] | BN+p |
- | R | - | norte | BN+p | BN+p |
- | R | I | - | M[f(M[BN+p])] | f(M[BN+p]) |
- | R | I | norte | f(M[BN+p]) | f(M[BN+p]) |
PAG | - | - | - | M[Xi+p] | Xi+p |
PAG | - | - | norte | Xi+p | Xi+p |
PAG | - | I | - | M[f(M[Xi+p])] | f(M[Xi+p]) |
PAG | - | I | norte | f(M[Xi+p]) | f(M[Xi+p]) |
PAG | R | - | - | M[BN+Xi+p] | BN+Xi+p |
PAG | R | - | norte | BN+Xi+p | BN+Xi+p |
PAG | R | I | - | M[f(M[BN+Xi+p])] | f(M[BN+Xi+p]) |
PAG | R | I | norte | f(M[BN+Xi+p]) | f(M[BN+Xi+p]) |
Nota 1: El indicador "N" (inmediato) no tiene efecto en las instrucciones de salto (control de flujo), ya que el procesador no puede saltar a un valor especificado, sino solo a una dirección de memoria.
NAR 2 admite el modo de direccionamiento indirecto de memoria de varios niveles . La ubicación se elige primero "observando" los indicadores P (indexado) y R (relativo al contador de programa). Luego, si se detecta el indicador I (indirecto), se carga una palabra de 32 bits desde la ubicación de memoria calculada hasta el momento y se reinicia el cálculo (incluidos todos los indicadores de modo de direccionamiento, la selección de registro de índice y el valor del parámetro; solo se omite el "código de operación"). Por lo tanto, el siguiente programa, si se carga en la ubicación de memoria 0 y se ejecuta:
mua I, 0 ; Memoria en acumulador, indirecta, desde la ubicación 0
... congelará NAR 2 en un bucle de cálculo de dirección infinito:
Tenga en cuenta que:
mua R, I, 0; Memoria en acumulador, relativa, indirecta, desde la ubicación BN+0
parece más genérico (podría congelar NAR 2 desde cualquier ubicación), pero esto depende de cuándo se incrementa/cambia el valor del registro BN.
La cuestión del tratamiento del indicador "N" (inmediato) en presencia del indicador I (indirecto) está abierta, ya que la situación es algo ambigua, es decir, si se respeta o no el valor del indicador especificado en la instrucción original o el de la dirección especificada indirectamente (buscada) conduce a un conflicto. La tabla anterior presenta el primer caso que muestra los diferentes modos de direccionamiento que se pueden lograr de esta manera.
NAR 2 tiene instrucciones para inicializar el valor de un registro de índice en particular (mnemónico "PIR"). Sin embargo, no tiene instrucciones especiales para leer valores de registros de índice. Esto se logra mediante el uso de indicadores de modo de direccionamiento indexado e inmediato (P, N), como:
mua Xi, P, N, n ; Memoria en acumulador, indexada, inmediata, 0
... que básicamente coloca Xi+n en el acumulador. Para n=0, esto se convierte en una instrucción de "cargar valor de registro de índice en el acumulador".