3 Bits, 3 Bytes
3 Bits, 3 Bytes is an assembly language invented by User:None1 for a 3-bit CPU. It is inspired by 2 Bits, 1 Byte.
Commands
Command (Binary) | Command (Disassembled) | What it does |
---|---|---|
000 | NOP | Do nothing (a NOP) |
001 | TEM | TErMinate the program |
010 | OUT | Given a 3-bit value x after it, OUTput the x-th byte. (If x>=3, it does nothing) |
011 | INP | Given a 3-bit value x after it, INPut the x-th byte. (If x>=3, it does nothing) |
100 | INC | Given value in memory, INCrease given value (wraps) |
101 | JMP | JuMP. Jump (unconditionally) to address specified. |
110 | CJM | Conditional JuMp. Given two addresses, if the value in the first address is nonzero, jump to the second address |
111 | NEG | NEGate given address, formally, if its value is x, let it be 7-x |
The instruction pointer can wrap around, thus allowing more "complicated" programs.
Programs
Since the memory is 3 bytes, you can represent the entire program with just 3 characters. For example:
AB@
becomes:
010000010100001001000000
which, when disassembled, becomes:
OUT 000b OUT 100b TEM TEM NOP NOP
Which outputs A
.
Examples
Quine
A�
In hex dump:
41 14 88
Disassembled:
OUT 000b OUT 001b OUT 010b TEM NOP
Partial Truth Machine
010 010 110 111 000 001 000 00n
Where n
is replaced with the input (1 or 0), the zero input program Kp@
prints @
once, while the one input program KpA
prints A
infinitely.
Disassembled:
OUT 010b CJM 111b 000b TEM NOP NOP (zero input)/TEM (one input)
Output any character
Hÿ?
Where ?
is replaced with the character you want to output.
Disassembled:
OUT 010b TEM ...
The ... part is ommited because it largely depends on the character you want to print and will not be executed because of the TEM command.