PREVIEW
Assembly Program Loader

Assembly Program Loader

Advanced signal_cellular_alt Advanced schedule 40 min

Cargador de programas en ensamblador

Descripción general

  • Propósito: El cargador de programas en ensamblador es un componente especializado que convierte programas en lenguaje ensamblador a código máquina binario y los carga en componentes de memoria. Conecta la brecha entre el código ensamblador legible por humanos y las instrucciones binarias que los circuitos digitales pueden procesar.
  • Símbolo: El cargador de programas en ensamblador se representa mediante un bloque rectangular con entradas para reloj, habilitación, habilitación de salida de dirección y habilitación de salida de datos, y salidas para bus de direcciones, bus de datos, habilitación de escritura, selección de chip y carga completa.
  • Rol en DigiSim.io: Permite probar y ejecutar programas en ensamblador en diseños de CPU sin convertir manualmente el código a binario, convirtiéndolo en una herramienta educativa esencial para explorar conceptos de arquitectura de computadoras.

assemuly program loader component

Descripción funcional

Comportamiento lógico

El cargador de programas en ensamblador lee el código ensamblador introducido por el usuario, lo convierte en código máquina y lo escribe secuencialmente en las direcciones de memoria. Opera en una máquina de estados con fases distintas: inactivo, cargando y completado.

Flujo operacional:

  1. Cuando se activa el cargador (a través de su cuadro de diálogo de propiedades), comienza el proceso de conversión
  2. En cada flanco de subida de CLK mientras EN está en ALTO, el cargador avanza a la siguiente instrucción
  3. Durante la carga, las salidas WE y CS están en ALTO
  4. Cuando la carga se completa, la salida LC (Carga completa) pasa a ALTO
  5. Las salidas de dirección se activan cuando A_OE está en ALTO; las salidas de datos se activan cuando D_OE está en ALTO

Entradas y salidas

  • Entradas (4 en total):

    • CLK: Pin 0. Entrada de reloj — el cargador avanza en cada flanco de subida.
    • EN (Habilitación): Pin 1. Habilitación general del cargador. La carga solo avanza cuando está en ALTO.
    • A_OE (Habilitación de salida de dirección): Pin 2. Cuando está en ALTO, las salidas de dirección (A0-A7) se activan; de lo contrario, alta-Z.
    • D_OE (Habilitación de salida de datos): Pin 3. Cuando está en ALTO, las salidas de datos (D0-D7) se activan; de lo contrario, alta-Z.
  • Salidas (19 en total):

    • A0-A7: Pines 0-7. Bus de direcciones de 8 bits que especifica la ubicación de memoria donde escribir.
    • D0-D7: Pines 8-15. Bus de datos de 8 bits que contiene la instrucción de código máquina a escribir en memoria.
    • WE: Pin 16. Señal de habilitación de escritura — ALTO durante la carga activa.
    • CS: Pin 17. Señal de selección de chip — ALTO durante la carga activa.
    • LC (Carga completa): Pin 18. Pasa a ALTO cuando la carga ha finalizado.

Parámetros configurables

  • Programa en ensamblador: El usuario puede introducir y editar el código ensamblador a través del cuadro de diálogo de propiedades del componente.
  • Tamaño de memoria: El número máximo de instrucciones que pueden cargarse (típicamente limitado por el componente de memoria conectado).

Representación visual en DigiSim.io

El cargador de programas en ensamblador se muestra como un bloque rectangular con las entradas etiquetadas en el lado izquierdo (CLK, EN, A_OE, D_OE) y las salidas en el lado derecho (A0-A7, D0-D7, WE, CS, LC). Cuando se conecta en un circuito, el componente indica visualmente su estado actual a través de los valores mostrados en sus salidas. El usuario puede interactuar con el componente a través de su cuadro de diálogo de propiedades para introducir y editar código ensamblador.

Valor educativo

Conceptos clave

  • Programación en ensamblador: Introduce los conceptos fundamentales de la programación en lenguaje ensamblador.
  • Generación de código máquina: Demuestra cómo las instrucciones en ensamblador legibles por humanos se convierten a binario.
  • Gestión de memoria: Muestra cómo los programas se cargan secuencialmente en memoria.
  • Arquitectura de computadoras: Conecta conceptos de software con implementación de hardware.
  • Arquitectura del conjunto de instrucciones: Introduce el concepto de formatos de instrucción y codificación.

Objetivos de aprendizaje

  • Comprender la relación entre el lenguaje ensamblador y el código máquina.
  • Aprender cómo los programas se cargan en memoria para su ejecución.
  • Reconocer el proceso de traducción de instrucciones simbólicas a binario.
  • Aplicar conceptos de programación en ensamblador para crear programas simples para diseños de CPU.
  • Comprender la interfaz entre software y hardware en sistemas informáticos.

Ejemplos de uso/Escenarios

  • Prueba de CPU: Cargar programas de prueba para verificar la funcionalidad de la CPU.
  • Circuitos de demostración: Crear ejemplos educativos de arquitectura de computadoras.
  • Implementación de algoritmos: Escribir programas en ensamblador para implementar algoritmos básicos como conteo, suma o bucles simples.
  • Prueba de sistema de memoria: Verificar operaciones de lectura/escritura de memoria de manera controlada.
  • Exploración del conjunto de instrucciones: Experimentar con diferentes tipos de instrucciones y sus efectos.

Notas técnicas

  • El cargador de programas en ensamblador soporta un lenguaje ensamblador simplificado con instrucciones comunes (LDA, STA, ADD, SUB, JMP, JZ, JNZ, HLT).
  • Las etiquetas en el código ensamblador se resuelven automáticamente a direcciones de memoria durante el proceso de carga.
  • Ubicaciones de memoria específicas pueden inicializarse con valores de datos usando la sintaxis @addr: valor.
  • El cargador procesa instrucciones secuencialmente, por lo que programas más grandes pueden requerir componentes de memoria más grandes.
  • En DigiSim.io, el comportamiento del cargador simula la fase de carga de programa de un sistema informático real, abstrayendo las complejidades de los ensambladores y enlazadores.
  • La sincronización adecuada usando las señales WE, CS y LC es importante al integrar el cargador con otros componentes.

Pines

Nombre del pin Tipo Índice del pin Descripción
CLK Entrada 0 Señal de reloj — el cargador avanza en el flanco de subida
EN Entrada 1 Habilitación — la carga avanza solo cuando está en ALTO
A_OE Entrada 2 Habilitación de salida de dirección — activa el bus de direcciones cuando está en ALTO
D_OE Entrada 3 Habilitación de salida de datos — activa el bus de datos cuando está en ALTO
A0-A7 Salida 0-7 Bus de direcciones de 8 bits que se conecta a las entradas de dirección de la memoria
D0-D7 Salida 8-15 Bus de datos de 8 bits que se conecta a las entradas de datos de la memoria
WE Salida 16 Habilitación de escritura — ALTO durante la carga activa
CS Salida 17 Selección de chip — ALTO durante la carga activa
LC Salida 18 Carga completa — ALTO cuando la carga ha finalizado

Uso

  1. Conecte el componente a su componente ROM o RAM:

    • Conecte las salidas A0-A7 a los pines de entrada de dirección de su componente de memoria
    • Conecte las salidas D0-D7 a los pines de entrada de datos de su componente de memoria
    • Conecte WE a la entrada de habilitación de escritura de su componente de memoria
    • Conecte CS a la entrada de selección de chip de su componente de memoria
  2. Introduzca su programa en ensamblador en el cuadro de diálogo de propiedades del componente.

  3. Conecte CLK a una fuente de reloj y establezca EN, A_OE y D_OE en ALTO para comenzar la carga.

  4. El componente automáticamente:

    • Convertirá el código ensamblador a código máquina
    • Escribirá el código máquina en direcciones de memoria consecutivas comenzando desde la dirección 0
    • Mantendrá WE y CS en ALTO durante el proceso de carga
    • Establecerá LC (Carga completa) en ALTO cuando termine
  5. Espere la señal LC antes de ejecutar el programa con su CPU.

Lenguaje ensamblador soportado

El cargador de programas en ensamblador soporta un lenguaje ensamblador simple con las siguientes instrucciones:

LDA addr    ; Cargar acumulador desde dirección de memoria
STA addr    ; Almacenar acumulador en dirección de memoria
ADD addr    ; Sumar valor en dirección de memoria al acumulador
SUB addr    ; Restar valor en dirección de memoria del acumulador
JMP addr    ; Saltar a dirección
JZ addr     ; Saltar a dirección si el acumulador es cero
JNZ addr    ; Saltar a dirección si el acumulador no es cero
HLT         ; Detener ejecución

Programa de ejemplo

Aquí hay un programa de ejemplo que cuenta de 1 a 10 y almacena el resultado en la dirección de memoria 15:

      LDA 14     ; Cargar 0 en el acumulador (desde dirección 14)
LOOP: ADD 13     ; Sumar 1 (desde dirección 13)
      STA 15     ; Almacenar resultado en dirección 15
      SUB 12     ; Restar 10 (desde dirección 12)
      JZ END     ; Si el resultado es cero (llegó a 10), saltar a END
      LDA 15     ; Cargar conteo actual de vuelta al acumulador
      JMP LOOP   ; Saltar de vuelta a LOOP
END:  HLT        ; Detener

; Sección de datos (debe incluirse en algún lugar del programa)
@12: 10          ; Valor 10 en dirección 12
@13: 1           ; Valor 1 en dirección 13
@14: 0           ; Valor 0 en dirección 14

Consejos

  • El cargador procesa el programa secuencialmente, escribiendo cada instrucción en memoria
  • Las etiquetas (como LOOP: y END:) se resuelven automáticamente a direcciones
  • Use la sintaxis @addr: valor para colocar valores específicos en direcciones específicas
  • Para programas más grandes, puede necesitar aumentar el tamaño de su componente de memoria
  • Verifique la señal LC para asegurar la sincronización adecuada con su CPU
  • El componente soporta comentarios usando el carácter punto y coma (;)

school Ruta de Aprendizaje

arrow_back Requisitos Previos

help_outline Preguntas Frecuentes

¿Qué es el Cargador de Programas en Ensamblador?

Un componente que convierte lenguaje ensamblador en código máquina y lo carga en la RAM, permitiéndote programar y probar tus diseños de CPU.

¿Qué sintaxis de ensamblador soporta DigiSim?

DigiSim soporta un lenguaje ensamblador simple con instrucciones comunes (MOV, ADD, SUB, AND, OR, JMP, etc.) diseñado con fines educativos.

play_arrow Ejecutar Circuito en Vivo

Ver Otros Componentes