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.
Estructura de la instrucción
La unidad central de procesamiento NAR 2 utiliza palabras de máquina de 32 bits. Cada instrucción de máquina contiene:
- código de operación en los 8 bits más significativos (bits 24 a 31)
- 4 bits (20 a 23) que especifican el registro de índice que se utilizará con los modos de direccionamiento indexados
- 4 bits (16 a 19) que contienen indicadores de modo de dirección :
- bit 19: P ( sr. P osredno, en. mediado ) - indexado
- bit 18: R ( sr. R relativa) - relativo al contador del programa
- bit 17: I ( sr. I ndirektno) - memoria multinivel indirecta (nota: la dirección se carga desde la ubicación especificada y, si también se especifica el indicador "I", el cálculo de la dirección indirecta continúa)
- bit 16: N ( sr. N eposredno) - inmediato
- Valor de parámetro con signo de 16 bits
Registros
NAR 2 tiene cuatro registros:
- Un contador de programa llamado BN ( en inglés , Counter of Instructions )
- Acumulador único de 32 bits que puede tratarse como un número entero ( punto fijo ) o real (punto flotante)
- Se pueden especificar hasta 16 registros de índice , desde X0 hasta X15. Sin embargo, X0 nunca se utilizó, posiblemente porque estaba reservado como contador de programa (BN).
- No había banderas ni registros de banderas.
Mnemotécnica
Los siguientes códigos de operación estaban disponibles (no se especificaron los códigos reales, solo los mnemónicos):
Acceso a memoria/registro
- MUA ( sr. M emorija U A kumulator , en. Memory Into Accumulator) carga el valor en el acumulador
- AUM ( sr. Acumulador en memoria , en . Acumulador en memoria) almacena el contenido del acumulador .
- PIR ( sr. P unjenje I ndeksnog R egistra , en. Load Index Register ) Carga el valor en el registro de índice.
Aritmética de números enteros
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.
- SABF ( sr. Sab eri u F iksnom zarezu , en. Agregar, punto fijo): agrega parámetros al acumulador
- ODUF ( sr. Odu zmi u F iksnom zarezu , en. Subtract, Fixed Point) - resta el parámetro del acumulador
- MNOF ( sr. Mno ži u F iksnom zarezu , en. Multiplicar, Punto Fijo) - Multiplica el acumulador con el parámetro
- DELF ( sr. Del i u F iksnom zarezu , en. Divide, Punto fijo) - Divide el acumulador por el parámetro
- PZAF ( sr. P romeni Z nak A kumulatora u F iksnom zarezu , en. Cambiar el signo del acumulador, punto fijo) - Cambia (invierte) el signo del acumulador
Aritmética de punto flotante
- SAB ( sr. Sab eri , en. Add) - agrega parámetro al acumulador
- ODU ( sr. Odu zmi , en. Subtract) - resta el parámetro del acumulador
- MNO ( sr. Mno ži , en. Multiplicar) - Multiplica el acumulador con el parámetro
- DEL ( sr. Del i , en. Divide) - Divide el acumulador por el parámetro
- PZA ( sr. P romeni Z nak A kumulatora , en. Cambiar el signo del acumulador) - Cambia (invierte) el signo del acumulador
Bit a bit/lógico
- KON ( sr. Kon junkcija , en. Conjunción ): realiza una operación AND lógica con el parámetro y el acumulador y almacena el resultado en el acumulador.
- DIS ( sr. Disjunction , en. Disyunción ) - realiza una operación OR lógica con el parámetro y el acumulador y almacena el resultado en el acumulador
- NEG ( sr. Neg acija , en. Negación ) - realiza un NO lógico sobre el contenido del acumulador (ignora el parámetro)
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.
- POL ( sr. Po meri L evo , en. Shift Left) - desplaza los bits del acumulador hacia la izquierda
- POD ( sr. Po meri D esno , en. Shift Right) - desplaza los bits del acumulador hacia la derecha
Control de flujo
- NES ( sr. Ne gativni S kok , en. Negative Jump) realiza un salto condicional a la dirección especificada por el parámetro si el valor actual del acumulador es negativo.
- BES ( sr. Be zuslovni S kok , en. Unconditional Jump) realiza un salto incondicional a la dirección especificada por el parámetro
- NUS ( sr. Nu la- S kok , en. Zero Jump) realiza un salto condicional a la dirección especificada por el parámetro si el valor actual del acumulador es cero
- ZAR ( sr. Detener la computadora , en . Detener el ordenador) detiene cualquier procesamiento posterior; esta es la única instrucción que ignora el parámetro .
Sintaxis del lenguaje ensamblador estándar
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:
- Mnemotécnico de instrucción
- Espacio en blanco, si la instrucción especifica algún registro de índice, modo de direccionamiento o un parámetro y luego separado por comas:
- Nombre del registro de índice, si se utiliza
- Nombres de los indicadores del modo de direccionamiento (también separados por comas)
- Valor del parámetro
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
Modos de direccionamiento
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:
- M[x] especifica el valor de 32 bits (contenido) de la ubicación de memoria x
- BN especifica el contador del programa
- p especifica el parámetro con signo de 16 bits en la ubicación
- Xi especifica el registro de índice seleccionado por los datos en la ubicación
- f() es la función de "valor efectivo" utilizada para direccionamiento indirecto (ver detalles a continuación):
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.
Memoria multinivel indirecta
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:
- "I, 0" especifica que la dirección real se cargará desde la ubicación de memoria 0
- Se carga la posición de memoria 0. Vuelve a leer "I, 0"
- "I, 0" especifica que la dirección real se cargará desde la ubicación de memoria 0
- Se carga la posición de memoria 0. Vuelve a leer "I, 0"
- "I, 0" especifica que la dirección real se cargará desde la ubicación de memoria 0
- Se carga la posición de memoria 0. Vuelve a leer "I, 0"
- ...
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.
Lectura de valores de los registros de índice
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".
Véase también
Enlaces externos
- Primer seminario de formación en sistemas informáticos - Ejemplos de trabajos para estudiantes del curso "ORS" (Fundamentos de sistemas informáticos), en idioma serbio . La tarea "V1: NAR" requiere que el estudiante escriba un simulador de NAR 2.