5 Bits, 20 Bytes
Jump to navigation
Jump to search
5 Bits, 20 Bytes is an assembly language invented by User:None1 for a 5-bit CPU. It is inspired by 3 Bits, 3 Byte, which is inspired by 2 bits, 1 Byte. User:MihaiEso asked the author to invent the language. This language has all the commands in 3 Bits, 3 Bytes.
It has basic functionalities of normal programming languages, so it is not a joke.
Commands
Command (Binary) | Command (Disassembled) | What it does |
---|---|---|
00000 | NOP | Do nothing (a NOP) |
00100 | TEM | TErMinate the program |
01000 | OUT | Given a 5-bit value x after it, OUTput the x-th byte. (If x>=20, it does nothing) |
01100 | INP | Given a 5-bit value x after it, INPut the x-th byte. (If x>=20, it does nothing) |
10000 | INC | Given value in memory, INCrease given value (wraps) |
10100 | JMP | JuMP. Jump (unconditionally) to address specified. |
11000 | CJM | Conditional JuMp. Given two addresses, if the value in the first address is nonzero, jump to the second address. |
11100 | NEG | NEGate given address, formally, if its value is x, let it be 7-x. |
00001 | ADD | ADD the two addresses, stores result into second address. |
00101 | SUB | SUBtract the two addresses, stores result into second address. |
01001 | MUL | MULtiply the two addresses, stores result into second address. |
01101 | AND | Bitwise AND the two addresses, stores result into second address. |
10001 | BOR | Bitwise OR the two addresses, stores result into second address. |
10101 | XOR | Bitwise XOR the two addresses, stores result into second address. |
11001 | INV | Bitwise INVert address. |
11101 | PRN | PRiNt the whole memory as characters. |
00010 | OUI | OUtput the given address as Integer. |
00110 | INI | INput the given address as Integer. |
01010 | CPY | CoPY the first address to the second. |
01110 | CJZ | Conditional Jump. Given two addresses, if the value in the first address is Zero, jump to the second address. |
10010 | OUB | OUtput the given address as Binary. |
10110 | INI | INput the given address as Binary. |
11010 | OUO | OUtput the given address as Octal. |
11110 | INO | INput the given address as Octal. |
00011 | OUX | OUtput the given address as HeXadecimal. |
00111 | INX | INput the given address as HeXadecimal. |
01011 | OUH | OUtput the memory as Hex dump. |
01111 | LST | Given 3 address, set the third to 1 if the value of the first is LeSs Than the value of the second, otherwise 0. |
10011 | LSE | Given 3 address, set the third to 1 if the value of the first is LeSs than or Equal to the value of the second, otherwise 0. |
10111 | GTT | Given 3 address, set the third to 1 if the value of the first is GreaTer Than the value of the second, otherwise 0. |
11011 | GTE | Given 3 address, set the third to 1 if the value of the first is GreaTer than or Equal to the value of the second, otherwise 0. |
11111 | CST | Output the memory as a C STyle string, starting from a given address. |
The instruction pointer can wrap around, thus allowing more "complicated" programs.
Example programs
Quine (cheating)
������������������
The �
's can be any character in extended or standard ASCII.
Disassembled:
PRN TEM ... // Anything
Hexdump:
E9 3F ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
Hello World
øHello, World!␀����
The ␀
is a null character, the �
's can be any extended or standard ASCII character. The second character has an ASCII value of 0x88.
Disassembled:
CST 0b00010 TEM ...
Hexdump:
F8 88 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 00 ?? ?? ?? ??