Articulo de referencia

Pequeña computadora 3

Little Computer 3 , o LC-3 , es un tipo de lenguaje de programación educativo para computadoras , un lenguaje ensamblador , que es un tipo de lenguaje de programación de bajo ni...

Little Computer 3 , o LC-3 , es un tipo de lenguaje de programación educativo para computadoras , un lenguaje ensamblador , que es un tipo de lenguaje de programación de bajo nivel .

Presenta un conjunto de instrucciones relativamente sencillo, pero puede utilizarse para escribir programas en lenguaje ensamblador de complejidad moderada, y es un objetivo viable para un compilador de C. El lenguaje es menos complejo que el ensamblador x86 , pero posee muchas características similares a las de lenguajes más complejos. Estas características lo hacen útil para la enseñanza inicial, por lo que se utiliza con frecuencia para impartir los fundamentos de la programación y la arquitectura de computadoras a estudiantes de informática e ingeniería informática .

El LC-3 fue desarrollado por Yale N. Patt en la Universidad de Texas en Austin y Sanjay J. Patel en la Universidad de Illinois en Urbana-Champaign . La especificación del conjunto de instrucciones, la arquitectura general del LC-3 y una implementación de hardware se encuentran en la segunda edición de su libro de texto. [ 1 ] Muchos departamentos de ingeniería informática y ciencias de la computación ofrecen cursos basados ​​en el LC-3 y el libro de Patt y Patel.

Especificación arquitectónica

El LC-3 especifica un tamaño de palabra de 16 bits para sus registros y utiliza una memoria direccionable de 16 bits con un espacio de direcciones de 2¹⁶ ubicaciones. El banco de registros contiene ocho registros, denominados R0 a R7. Todos los registros son de propósito general, lo que significa que pueden ser utilizados libremente por cualquier instrucción que pueda escribir en el banco de registros, pero en algunos contextos (como la traducción de código C a lenguaje ensamblador LC-3), algunos de los registros se utilizan para fines especiales.

Las instrucciones tienen 16 bits de ancho y códigos de operación de 4 bits . El conjunto de instrucciones define instrucciones para quince de los dieciséis códigos de operación posibles, aunque algunas instrucciones tienen más de un modo de operación. La ejecución de cada instrucción está regulada por una máquina de estados implementada con una ROM de control y una unidad de microsecuenciación.

La arquitectura admite el uso de un teclado y un monitor para regular la entrada y salida; esta compatibilidad se proporciona mediante abstracciones de E/S mapeadas en memoria . En la simulación, se puede acceder directamente a estos registros, y la especificación arquitectónica describe su contenido. También se proporciona compatibilidad con E/S de nivel superior mediante la instrucción TRAP y un sistema operativo básico . El sistema operativo ofrece funciones para leer y reproducir caracteres del teclado, imprimir caracteres individuales en el monitor, imprimir cadenas completas tanto empaquetadas como desempaquetadas, y detener la máquina.

Se asume que todos los datos en el LC-3 se almacenan en formato de complemento a dos ; no hay soporte independiente para aritmética sin signo. Los dispositivos de E/S funcionan con caracteres ASCII . El LC-3 no tiene soporte nativo para números de coma flotante .

La implementación de hardware que se presenta en el texto de Patt y Patel no está segmentada ni optimizada de ninguna otra manera, pero sin duda es posible crear una implementación rápida utilizando conceptos más avanzados de arquitectura de computadoras.

Conjunto de instrucciones

El conjunto de instrucciones LC-3 implementa quince tipos de instrucciones, con un decimosexto código de operación reservado para uso posterior. La arquitectura es de carga y almacenamiento ; los valores en memoria deben cargarse en el banco de registros antes de poder ser procesados.

Las instrucciones aritméticas disponibles incluyen ADD, AND bit a bit y NOT bit a bit. Las dos primeras pueden usar registros y valores inmediatos con signo extendido como operandos. Estas operaciones son suficientes para implementar varias operaciones aritméticas básicas, como la resta (negando valores) y el desplazamiento a la izquierda bit a bit (multiplicando valores por dos con la instrucción de suma). El LC-3 también puede implementar cualquier función lógica bit a bit, ya que NOT y AND, juntas, constituyen una función lógicamente completa .

El acceso a memoria se puede realizar calculando direcciones a partir del valor actual del contador de programa (PC) o de un registro en el banco de registros. Además, el LC-3 ofrece cargas y almacenamientos indirectos, que utilizan un dato en memoria como dirección para cargar o almacenar datos. Los valores en memoria deben transferirse al banco de registros antes de poder utilizarse en operaciones aritméticas o lógicas.

El LC-3 proporciona instrucciones de control de flujo tanto incondicionales como condicionales. Las bifurcaciones incondicionales pueden mover la ejecución a una ubicación dada por un valor de registro o un desplazamiento relativo al contador de programa (PC). Tres instrucciones (JSR, JSRR y TRAP) admiten la noción de llamadas a subrutinas almacenando la dirección del código que llama a la subrutina en un registro antes de cambiar el valor del contador de programa. El LC-3 no admite la comparación aritmética directa de dos valores. Las bifurcaciones condicionales se basan en el signo aritmético (negativo, cero o positivo) del último dato escrito en el banco de registros. Calcular la diferencia entre dos valores de registro requiere encontrar el equivalente negado de un valor de registro y luego sumar el número negado al valor positivo en el segundo registro. La diferencia entre los dos registros se almacenará en uno de los 8 registros disponibles para el usuario. Luego, el signo de este valor almacenado se utilizará para la bifurcación condicional.

Debido a que no queda espacio en el conjunto de instrucciones LC-3 para instrucciones de E/S mapeadas a puertos dedicadas , las implementaciones de hardware normalmente reservan parte del mapa de memoria para E/S mapeadas a memoria . [ 2 ]

Compatibilidad con lenguajes de programación

Aunque no se ha implementado en un chip físico, el LC-3 se puede usar en simulaciones en entornos Linux/Unix, Mac OS X y Windows. Las herramientas de simulación incluyen un ensamblador con soporte para el cálculo computarizado de desplazamientos con etiquetas y la inserción de constantes, cadenas y ubicaciones de memoria vacías en un bloque de código ensamblador. También existe una convención para usar el lenguaje C en el LC-3. McGraw-Hill proporciona un ensamblador, un compilador y un simulador de ejemplo. [ 1 ]

C y el LC-3

La convención de llamada para las funciones C en el LC-3 es similar a la implementada por otros sistemas, como la arquitectura x86. Al ejecutar programas C, la arquitectura mantiene un modelo de memoria que incluye espacio para una pila de llamadas y asignación dinámica de memoria . En este modelo, cuatro de los ocho registros de propósito general del procesador desempeñan funciones especiales: R4 se utiliza como registro base para cargar y almacenar datos globales, R5 se utiliza para apuntar al área de la función actual en la pila de llamadas y R6 se utiliza como puntero de pila. Además, R7 suele estar reservado para almacenar las direcciones de retorno de las llamadas a funciones; las instrucciones JSR, JSRR y TRAP almacenan automáticamente las direcciones de retorno en este registro durante su ejecución.

Cuando se llama a una función C bajo este modelo, los parámetros de la función se insertan en la pila de derecha a izquierda. A continuación, se reserva espacio en la pila para el valor de retorno de la función llamada, la dirección de la instrucción de la función que realiza la llamada a la que se debe regresar y el valor de R5 de la función que realiza la llamada. Las variables locales de la función llamada se insertan en la pila en el orden en que se declaran. Cabe destacar que el LC-3 no dispone de instrucciones PUSH y POP nativas, por lo que se deben utilizar instrucciones de suma y almacenamiento de memoria por separado para implementar la pila.

El LC-3b

La norma LC-3b ISA describe una versión modificada de la LC-3 que incluye los siguientes cambios:

  • El tamaño de palabra de la máquina sigue siendo de 16 bits, pero su memoria ahora es direccionable por bytes con el mismo espacio de direcciones.
  • Se han eliminado las instrucciones LD y ST (carga y almacenamiento de datos mediante direccionamiento relativo al PC).
  • Las instrucciones LDI y STI (cargas y almacenamientos indirectos) utilizan direccionamiento basado en registros en lugar de direccionamiento relativo al contador de programa (PC).
  • Se han añadido dos instrucciones, LDB y STB, para manipular bytes individuales de memoria; las demás instrucciones de carga y almacenamiento siguen actuando sobre palabras completas.
  • El código de operación reservado se ha convertido en una instrucción de desplazamiento, SHF, que admite desplazamientos aritméticos y lógicos de tamaño arbitrario en ambas direcciones.

Estos cambios hacen que el hardware del LC-3b sea ligeramente más complejo que el del LC-3. Por ejemplo, el LC-3b necesita un desplazador (el LC-3 no lo necesita) y lógica adicional en su unidad de memoria para gestionar correctamente la carga y el almacenamiento de datos de distintos tamaños.

Véase también

Referencias

  1. 1 2 Patt, Yale N. ; Patel, Sanjay (2003). Introducción a los sistemas informáticos: De bits y compuertas a C y más allá . Nueva York, NY: McGraw-Hill Higher Education. ISBN 0-07-246750-9. Consultado el 6 de octubre de 2010 .
  2. Yuan-Jhang Liao y Wing-Kwong Wong. "Uso del núcleo blando LC-3 en una placa de desarrollo FPGA para laboratorios de microprocesadores". 2013. págs. 612-613 de "Tecnologías inteligentes y sistemas de ingeniería" .
  3. Patel, Sanjay; Patt, Yale N. (15 de agosto de 2019). Introducción a los sistemas informáticos: De bits y compuertas a C/C++ y más allá (3.ª ed.). McGraw Hill. pág. 656. ISBN   978-1-260-15053-7.
  • HERA: Arquitectura RISC educativa de Haverford