#ast-parser #object-file #end #course #exit #simulator #obj-file #x3000 #assemble-debug

lc3-ensemble

LC-3 parser, assembler, and simulator intended for Georgia Tech's CS 2110 course

18 releases (9 breaking)

Uses new Rust 2024

new 0.10.0 May 6, 2025
0.9.2 Dec 20, 2024
0.9.1 Oct 17, 2024
0.5.0 Jun 29, 2024

#65 in Simulation

Download history 28/week @ 2025-02-05 70/week @ 2025-02-19 9/week @ 2025-02-26 53/week @ 2025-03-12 4/week @ 2025-03-19 81/week @ 2025-04-16 16/week @ 2025-04-23 267/week @ 2025-04-30

364 downloads per month

MIT license

360KB
6.5K SLoC

Rust 5.5K SLoC // 0.1% comments Assembly 638 SLoC // 0.0% comments

Ensemble 🎷⚙️ (LC-3 parser, assembler, and simulator)

Ensemble is a parser, assembler, and simulator library for the LC-3 ISA, written in Rust.

This project, while mostly for general use, is mainly used for the lc3-ensemble-test and LC3Tools projects.

Refer to the documentation for additional support.


lib.rs:

A LC-3 parser, assembler, and simulator.

This is meant to be a general suite to use LC-3 assembly (meant as a backend for Georgia Tech's CS 2110 LC3Tools).

Usage

To convert LC-3 source code to an object file, it must be parsed and assembled:

use lc3_ensemble::parse::parse_ast;
use lc3_ensemble::asm::{assemble, assemble_debug, ObjectFile};

let code = "
    .orig x3000
    AND R0, R0, #0
    AND R0, R0, #7
    HALT
    .end
";
let ast = parse_ast(code).unwrap();

// Assemble AST into object file:
let obj_file: ObjectFile = assemble(ast).unwrap();
// OR:
let obj_file: ObjectFile = assemble_debug(ast, code).unwrap();

Once an object file has been created, it can be executed with the simulator:

use lc3_ensemble::sim::Simulator;

let mut simulator = Simulator::new(Default::default());
simulator.load_obj_file(&obj_file);
simulator.run().unwrap(); // <-- Result can be handled accordingly

If more granularity is needed for simulation, there are also step-in and step-out functions. See the [sim] module for more details.

Dependencies

~2.5MB
~23K SLoC