QuickASM is a simplistic, yet fully functional 16-bit x86 assembler that outputs flat binary files.
I wrote this entire program in 2001 when I was 16 years old. It was my first really serious project, about 3 years after I started programming (not counting a little Locomotive BASIC in elementary school).
This repository is published "as-is" for historical and nostalgic purposes. I have deliberately chosen not to refactor, modernize, or clean up the code. It is exactly as it was written over 20 years ago by a 16-year-old without academic training.
The comments, some of the function/variable names, and the documentation are in French, because back then I had not started coding in English yet.
- Flat binaries.
- Intel-style ASM syntax.
- Core 16-bit instruction set (no native support for 32-bit registers or extensions like MMX).
- The 32-bit Prefix Hack: While the parser is strictly 16-bit, it supports raw data emission directives (
.octet/.mot) which I later used to manually inject 32-bit override prefixes (0x66) to trick the CPU into 32-bit mode! - Compiler-specific directives (labels, data declaration...).
- Simple disassembler.
If you try to compile this on a modern Linux system, the build will fail, as I used some non-standard features (er... or actual mistakes) that were tolerated by my compiler at the time.
I don't want to fix the Makefile or the code, but I managed to compile it with GNU Make 4.4 and GCC 15 using:
mkdir -p bin/linux
cd src
make -f Makefile.linux CFLAGS="-fcommon -c -Dlinux -Wno-implicit-function-declaration"- Full documentation (in French), including an Assembler tutorial and documentation of the Intel instruction set.
- MBRLoader — A multi-language bootloader and partitioning tool written entirely with QuickASM.