Architectural Choices in Building LC-3 Assembler

flowchart LR %% Two-Pass Assembler with Modular Pipeline subgraph Pass1[First Pass] direction TB A1[(Source File)] --> B1[Lexer] B1 --> C1[Parser: Label Collection] C1 --> D1[(Symbol Table)] end subgraph Pass2[Second Pass] direction TB A2[(Symbol Table)] --> B2[Lexer] B2 --> C2[Parser: Build Instructions] C2 --> D2[Encoder] D2 --> E2[Writer] E2 --> F2[(Machine Code Output)] end %% Layout passes side by side Pass1 --> Pass2 (Caption: General Structure of Two-pass and Modular Assembler Design) ...

December 28, 2024 · 9 min · Sae-Hwan Park

Diving Deeper into LC-3: From Opcodes to Machine Code

Welcome back. Continuing from our last post, today, we’re going to peek behind the curtain and see how the Little Computer 3 (LC-3) actually “understands” our instructions. Imagine you’re writing a letter to someone who only reads binary—you’d need a very specific format for them to understand your message. That’s exactly what we’re doing when we write LC-3 assembly code: we’re writing human-readable instructions that need to be translated into a language of 1s and 0s that the computer understands. ...

December 27, 2024 · 8 min · Sae-Hwan Park

Why I'm Learning C and LC-3 (Despite Being an AI/ML Person)

Merry Christmas, everyone! Between juggling a full-time job as a data scientist and pursuing my computer science graduate degree part-time, I didn’t think I’d have much bandwidth for extracurricular projects. But when the holidays rolled around, I found myself itching to step away from data engineering and machine learning modeling—and dive headfirst into the world of low-level programming. Surprising? Maybe. But it’s been a thrilling journey so far. Stepping Out of the AI/ML Bubble I love AI/ML. But one thing I’ve realized is that constantly working at a high level (think PyTorch, scikit-learn, XGBoost, etc.) can sometimes obscure what’s really happening under the hood. Sure, I can engineer data, develop models, and conduct data experiments all day long. But when something breaks at a deep level—like in a CUDA kernel, or even just the memory management within my Python environment—I’m reminded there’s a whole world of “lower-level” knowledge I’ve yet to fully explore. ...

December 25, 2024 · 5 min · Sae-Hwan Park