5.2 Diseño del Simulador

El simulador implementado adopta la arquitectura de Von Neumann, reconocida por su simplicidad conceptual y operativa. En este modelo, los datos y las instrucciones comparten una única memoria, lo que permite tratar las instrucciones como datos. Esta característica facilita técnicas como la ejecución dinámica y la optimización del rendimiento (Stallings 2021).

VonSim2 sirvió como referencia por su enfoque educativo e interfaz intuitiva. Sobre esta base se desarrolló VonSim83, adaptado para operar con registros y memoria de 8 bits y diseñado para el aprendizaje progresivo (Facundo Quiroga 2020).

La arquitectura detallada de VonSim, con su amplio repertorio de instrucciones y componentes, ofrece una visión integral del sistema. Sin embargo, dicha riqueza funcional puede abrumar a estudiantes en etapas iniciales. Por esta razón, VonSim8 introduce una simplificación estrategica, con el objetivo de reducir la carga cognitiva en etapas iniciales, facilitando así una apropiación gradual de los conceptos fundamentales. A partir de esta base, se introdujeron diversas modificaciones en los componentes, instrucciones y funcionalidades del simulador, priorizando aquellos aspectos conceptuales que se abordan en el programa de la asignatura.

VonSim (Facundo Quiroga 2020) es una herramienta diseñada específicamente para la enseñanza y el aprendizaje de la arquitectura y organización de computadoras. Sus principales características la posicionan como una solución educativa integral:

Características técnicas y pedagógicas de VonSim:

  1. Entorno integrado de desarrollo y simulación: Proporciona un entorno completo que incluye editor de código ensamblador con resaltado de sintaxis y un simulador para la ejecución de programas, facilitando el proceso de aprendizaje práctico (Facundo Quiroga 2020).

  2. Fundamento en arquitectura real: Se basa en el procesador Intel 8088, proporcionando una referencia histórica y técnicamente relevante para el estudio de la evolución de las arquitecturas de computadoras (Intel Corporation 1979).

  3. Componentes esenciales para el estudio: Incluye cuatro registros multipropósito de 16 bits, memoria principal de 32 kB, bus de direcciones de 16 bits y bus de datos de 8 bits, abarcando los elementos fundamentales para la comprensión de la arquitectura von Neumann (Stallings 2021).

  4. Gestión completa de interrupciones: Implementa tanto interrupciones por software (entrada/salida de datos) como interrupciones por hardware mediante un controlador de interrupciones programable (PIC), cubriendo aspectos fundamentales de la operación del sistema (John L. Hennessy and Patterson 2017a).

  5. Simulación de periféricos: Incorpora dispositivos como reloj, llaves, LEDs e impresora Centronics, inspirados en los especificados por la familia iAPX 88 de Intel, permitiendo simular interacciones complejas con el sistema.

  6. Enfoque pedagógico mediante simplificaciones estratégicas: No pretende ser un emulador fiel del 8088, sino una herramienta educativa que implementa simplificaciones deliberadas (repertorio de instrucciones reducido y codificación simplificada) para facilitar la comprensión en contextos educativos (Patt and Patel 2019).

  7. Desarrollo académico especializado: Creado por Facundo Quiroga, Manuel Bustos Berrondo y Juan Martín Seery, con colaboración de Andoni Zubimendi y César Estrebou, específicamente para las cátedras de Organización de Computadoras y Arquitectura de Computadoras de la Facultad de Informática de la Universidad Nacional de La Plata, garantizando su alineación con objetivos curriculares específicos.

  8. Fundamento en experiencia previa: Se apoya en el simulador MSX88, desarrollado en 1988 por Rubén de Diego Martínez para la Universidad Politécnica de Madrid, aprovechando décadas de experiencia acumulada en simuladores educativos.

  9. Accesibilidad y sostenibilidad: Distribuido bajo licencia GNU Affero General Public License v3.0 con código fuente disponible en GitHub, y documentación bajo licencia CC BY-SA 4.0, facilitando su estudio, modificación y mejora continua (Open Source Initiative 2024).

En síntesis, VonSim constituye una herramienta robusta y accesible que simplifica y facilita el aprendizaje de conceptos complejos de arquitectura de computadoras mediante simulación práctica y una interfaz pedagógicamente orientada.

Las modificaciones principales de VonSim8, alineadas con objetivos pedagógicos, incluyen:

El registro de estado contiene los siguientes flags o banderas: Z = cero (Zero) C = acarreo (Carry) S = signo (Sign) O = desbordamiento (Overflow) I = interrupción (Interrupt)

5.2.1 Flags

El registro FLAGS es un registro de 8 bits que contiene las flags mostradas en la siguiente tabla. Este registro no es directamente accesible por el usuario, pero puede ser modificado por las operaciones de la ALU y pueden realizarse saltos condicionales en base a sus valores.

Bit # Abreviatura Descripción
0 Z Flag de cero
1 C Flag de acarreo
2 O Flag de overflow
3 S Flag de signo
4 I Flag de interrupción

El resto de bits del registro de estado están reservados.

Del registro de estado del simulador original se ocultaron las banderas O y S ya que en los primeros ejercicios de ensamblador no se requiere su uso ya que se trabaja solamente con números enteros positivos, posteriormente las mismas se pueden habilitar en el menu configuración del simulador.

Registro de estado

Figura 5.7: Registro de estado

El flag de interrupcion I solo se muestra cuando el programa lo requiere, por ejemplo, al ejecutar una instrucción de interrupción como INT o IRET. Esto permite a los estudiantes observar cómo se activa y desactiva este flag en función de las operaciones realizadas.

Registro de estado I

Figura 5.8: Registro de estado I

Se modifico el menu de los controles del simulador.
Controles del simulador

Figura 5.9: Controles del simulador

Se eliminaron los registros de 16 bits y se redujo el tamaño de los registros a 8 bits, lo que simplifica la representación y manipulación de datos. Esta decisión se fundamenta en la necesidad de reducir la complejidad del modelo para facilitar la comprensión de los conceptos fundamentales de la arquitectura de computadoras. Tambien se unifico el criterio del diseño de los registro, ahora todos los registros tienen una entrada y una salida independiente, lo que permite una visualización más clara de cómo se transfieren los datos entre los registros y la ALU (Unidad Aritmético Lógica). Esta modificación es esencial para comprender el flujo de datos en el ciclo de instrucción y la interacción entre los componentes del procesador. Tambien se ocultaron los registros registro SP y (ri e id) que se habilitan automaticamente al ejecutar una instrucción que requiera su uso.

Registro de 8 bits

Figura 5.10: Registro de 8 bits

Se elimino el uso de los registros temporales de la ALU (left y rigth). Por una cuestion de diseño del simulador algunos registros tienen la entrada y salida de manera horizontal y otros vertical, pero su funcionamiento es el mismo.

Eliminación registro temporales left y rigth

Figura 5.11: Eliminación registro temporales left y rigth

La memoria principal se modela como una matriz de 16×16 expresada en hexadecimal, lo que permite almacenar hasta 256 bytes de datos.

Memoria principal

Figura 5.12: Memoria principal

Resaldo de la direccion de memoria apuntada por el registro IP.

Resaltado registro IP

Figura 5.13: Resaltado registro IP

Cuando el progrma tiene instrucciones INT o de manejo de pila se resalta en memoria el el vector de interrucciones, 8 posiciones de memoria desde 0x00 a 0x07 y la dirección apuntada por el registro SP:

Resaltado vector de interrupciones y registro SP

Figura 5.14: Resaltado vector de interrupciones y registro SP

Visor de instrucciones y datos del programa en memoria, pudiendo ver la instruccion y su tamaño en bytes que ocupa en memoria, ademas la etiqueta asociada a los datos.

Resaltado vector de interrupciones y registro SP

Figura 5.15: Resaltado vector de interrupciones y registro SP

En el VonSim cuando se escribe un programa en el editor del simulador es obligatorio que la sección de codigo inicie con la directiva org 0x2000h, porque el simulador comienza a ejecutar la primer instrucción del programa a partir de la dirección de memoria 0x2000h, esto se indica al comienzo del programa mediante la directiva org 0x2000h y los datos del programa generalmente se cargan a partir de la dirección de memoria 0x1000h mediante la directiva org 0x1000h.

En VonSim8 no es obligatorio la directiva org para indicar la dirección de inicio del programa sino opcional, por default si el programa no tiene la directiva org la primer instruccion del programa comienza a cargarse en la dirección 0x00h, y en caso que el programa tenga instrucciones de interrupcion INT el programa se cargará a partir de la direccion 0x08h para dejar espacio al vector de interrupciones. VonSim8 tambien permite cargar el programa de manera similar como VonSim pero en utilizar la directiva org 0x2000h utiliza org 0x20h y el simulador comienza a ejecutar la instruccion que se encuentra en la dirección 0x20h de la memoria vez de cargar en la posicion ya que el simulador asigna automáticamente la dirección 0x00 al primer byte del programa. Esto simplifica la escritura de programas y evita errores comunes relacionados con la asignación manual de direcciones.

Pero si el programa requiere una dirección de inicio específica, se puede utilizar la directiva org para establecerla. Por ejemplo, org 0x20h indicaría que el programa debe comenzar en la dirección 0x20 de la memoria. Por compatibilidad con el simulador VonSim, se mantiene la directiva org para aquellos usuarios que deseen especificar una dirección de inicio diferente a la predeterminada. Sino se especifica la directiva org en el programa el simulador comienza a ejecutar el programa desde la dirección 0x00h, en caso de que el programa tenga instrucciones de interrupción INT, el simulador asigna automáticamente la dirección 0x08h al primer byte del programa, dejando espacio para el vector de interrupciones.

El simulador tiene predefinido el vector de interrupción en ciertas posiciones de reservadas de memoria, dentro de dicho vector encontraremos las rutinas del sistema predefinidas para interactuar con el teclado y monitor. En el caso de las interrupciones por software, esta es dada por el operando de la instrucción INT número. Una vez interrumpido, el procesador ejecutará la rutina de interrupción asociada a ese número de interrupción. La dirección de comienzo de esta rutina estará almacenada en el vector de interrupciones. Este vector ocupa las celdas 00h hasta 07h de la memoria principal, y cada elemento del vector tiene 1 byte de largo – el primer elemento se encuentra en 0h, el segundo en 1h, el tercero en 2h, y así. Cada elemento corresponde con la dirección de inicio de la rutina de interrupción.

Específicamente, el procesador:

  1. obtiene el número de la interrupción (0-7),
  2. apila el registro FLAGS,
  3. inhabilita las interrupciones IF=0,
  4. apila el registro IP,
  5. obtiene la dirección de la rutina de interrupción del vector de interrupciones,
  6. modifica el IP para que apunte a la dirección de la rutina de interrupción.

El simulador implementas las interrupciones por software mediante la instrucción INT <n>. Estos números son:

  • INT 0: termina la ejecución del programa, equivalente a la instrucción HLT;
  • INT 6: lee un carácter del teclado;
  • INT 7: escribe una cadena de caracteres en pantalla.

5.2.2 Requisitos funcionales del simulador VonSim8

  1. Simplificación del repertorio instruccional para una introducción gradual;

  2. Reducción a registros y memoria de 8 bits, coherente con la escala de enseñanza;

  3. Interfaz gráfica esquemática que muestra el flujo de ejecución;

  4. Funciones interactivas para observar explícitamente el ciclo de instrucción y la interacción de componentes.

Las modificaciones implementadas se alinean con los contenidos curriculares de la asignatura y están fundamentadas en los principios del aprendizaje activo (Bonwell and Eison 1991).

5.2.3 Estructura del VonSim8

Esta sección describe la estructura del simulador VonSims8, el diseño de los registros fue concebido para facilitar la comprensión de los modos de direccionamiento y del ciclo de instrucción, ambos considerados fundamentos clave en el estudio de la Arquitectura de Computadoras (Stallings 2021). Se describe en la siguiente tabla ?? los componentes principales del simulador, junto con sus características y funcionalidades específicas. Esta tabla proporciona una visión general de la arquitectura del simulador, destacando los elementos clave que componen su estructura y su propósito pedagógico.:

Dentro de los registros específicos que no pueden ser accedidos por el usuario, se encuentra el registro SP (stack pointer) para el funcionamiento de la pila, el registro FLAGS (flags register), el IP (instruction pointer) que almacena la dirección de la próxima instrucción a ejecutar, el IR (instruction register) que almacena el byte de la instrucción que se está analizando/decodificando en un instante dado. También hay 2 registros dedicados a la transferencia de información entre la CPU y la memoria principal: el MAR (memory address register) encargado de almacenar direcciones de memoria, y el MBR (memory buffer register) que almacena el byte que se quiere propagar o se ha recibido por el bus de datos.

Además, dos registros específicos que sirven de intermediarios para realizar ejecutar instrucciones, como pueden ser el ri para almacenar una dirección temporal, el id para almacenar un dato temporal.

Bibliografía

Bonwell, Charles C., and James A. Eison. 1991. “Active Learning: Creating Excitement in the Classroom.” ASHE-ERIC Higher Education Report 1.
Facundo Quiroga, Juan Martín Seery, Manuel Bustos Berrondo. 2020. “VonSim - Simulador de Arquitectura de von Neumann.” https://vonsim.github.io/.
Hennessy, John L., and David A. Patterson. 2017a. Computer Architecture: A Quantitative Approach. 6th ed. Boston: Morgan Kaufmann.
Intel Corporation. 1979. Intel 8086 Family User’s Manual. Intel Corporation. https://bitsavers.org/components/intel/8086/9800722-03_The_8086_Family_Users_Manual_Oct79.pdf.
Open Source Initiative. 2024. “Open Source Licenses: Understanding GPL, MIT, and Apache Licenses.” https://opensource.org/licenses/.
Patt, Yale N., and Sanjay J. Patel. 2019. Introduction to Computing Systems: From Bits and Gates to c and Beyond. 3rd ed. New York: McGraw-Hill Education.
Stallings, William. 2021. Computer Organization and Architecture: Designing for Performance. 11th ed. Boston, MA: Pearson.