3 releases (1 stable)
Uses new Rust 2024
| 1.0.0 | Sep 5, 2025 |
|---|---|
| 0.9.0 | Aug 28, 2025 |
| 0.8.0 | Aug 22, 2025 |
#338 in Programming languages
145KB
3.5K
SLoC
Advanced Subleq Assembler
This Subleq assembler assembles a custom language, called Sublang, into Subleq
Features
- Interpreter and debugger
- Friendly and detailed assembler feedback
- Powerful macros
- Syntax sugar for common constructs like dereferencing
- Optional typing system
- Fully fledged standard library including routines and high level control flow constructs like If or While
- Fine grained control over your code and the assembler
- Module and inclusion system
- 16-bit
- Extensive documentation
What is Subleq?
Subleq or SUBtract and jump if Less than or EQual to zero is an assembly language that has only the SUBLEQ instruction, which has three operands: A, B, C.
The value at memory address A is subtracted from the value at address B. If the resulting number is less than or equal to zero, a jump takes place to address C. Otherwise the next instruction is executed.
Since there is only one instruction, the assembly does not contain opcodes.
So:
SUBLEQ 1 2 3
would just be
1 2 3
A very basic subleq interpreter written in Python would look as follows
pc = 0
while True:
a = mem[pc]
b = mem[pc + 1]
c = mem[pc + 2]
result = mem[b] - mem[a]
mem[b] = result
if result <= 0:
pc = c
else:
pc += 3
Most subleq implementations, this one included, also include the IO operations: INPUT, OUTPUT and HALT.
These can be achieved by respectively having A = -1, B = -1 and C = -1. INPUT and OUTPUT read or write singular ASCII characters
Installation
cargo install asa or download the binary from the releases tab
Usage
asa MySubleq.sbl
Syntax highlighting
See https://github.com/Kat9-123/sublang-highlighting
Project status
This project is functionally complete, but the documentation for the assembler, Sublang and Sublib is still lacking. As is the Sublib itself, which isn't finished yet
Dependencies
~11–27MB
~388K SLoC