This repository contains a collection of low-level systems projects written in x86-64 Assembly, focusing on memory management, processor architecture, and direct Operating System interaction.
As a Computer Science student at TU Delft, I built these tools to gain a concrete understanding of how software interacts with hardware. While some projects explore concepts from the CSE1400 Computer Organisation course, the Shell implementation is an independent project built to understand process creation and management at the kernel level.
| Project | Type | Key Technical Concepts |
|---|---|---|
| TinyShell | Independent Project | Linux syscalls (fork, execve), process isolation, manual string tokenization. |
| Branch Predictor | Architecture Simulation | Simulating CPU pipeline behavior with a 2-bit saturating counter logic. |
| Printf Implementation | Standard Library | Manually handling the System V AMD64 ABI, stack frame management, and variadic argument parsing. |
| Diff Tool | Algorithms | Line-by-line text comparison algorithm optimized for minimal register usage. |
| SHA-1 Hash | Cryptography | Implementation of the SHA-1 compression function and message schedule at the instruction level. |
In an era of high-level frameworks, writing Assembly provides a competitive advantage by revealing the cost of abstractions.
- Memory Awareness: Understanding stack frames and heap allocation helps me write optimized Java/C++ code.
- Debugging: Experience with registers and instruction pointers makes debugging complex segmentation faults or JVM crashes significantly easier.
- Systems Design: Implementing core tools from scratch (like a shell or printf) clarifies how Operating Systems actually function "under the hood."
Author: Teodora Corlateanu - TU Delft Computer Science and Engineering Student