aboutsummaryrefslogtreecommitdiff
path: root/intcode/Readme.textile
blob: 583423567ddda13463683f17431952dfda47d6d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
h1. Intcode (dis-)assembler

p. This is an assembler and disassembler pair for the intcode vm.

h2. Assembler

p. Each instruction, directive, or label should appear on a line by itself.

h3. Usage

bc. $ ./as source.code

h3. Instruction codes

- add 1 2 3 := Add
- mul 1 2 3 := Multiply
- inp 1 := Input
- out 1 := Output
- jnz 1 2 := Jump if not zero
- jez 1 2 := Jump if equal to zero
- tlt 1 2 3 := Test if less than
- teq 1 2 3 := Test if equal to
- arb 1 := Adjust relative base
- hlt := Halt

p. Optionally, commas may be used to separate arguments.

h3. Labels

p. Specify a label with @label:@, then use it in the assembly. Sigilising it is valid, immediate @label@, positional <code>@label</code>, or relative @&label@. The merits of doing so in some cases are... Hmm.

h3. Directives

- @org location := Organise the code to this location
- @dat 1 2 3 4 ... := Insert this data literally into the bytecode

h3. Sigils

- <code>@</code> := Positional argument
- @&@ := Relative argument

h3. Comments

p. @;@ to end of line is a comment, and is ignored by the assembler.

h2. Disassembler

p. Prints the location of the start of each instruction and the instruction itself using the syntax detailed above.

h3. Usage

bc. $ ./das byte.code