blob: 01ad7d000bd16810597f183186fefd0fb3543de3 (
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
NANDGAME instruction set
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|Op/I| - | - | PnA| X | u | opcode | zx | sw | dA | dD | dM | jl | je | jg |
| | - | - | | | AnL| | | | | | | | | |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| _ | X | X | _ | X | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | ununsed
| 0 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | Load value in A
| 1 | _ | _ | 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | Use A as second operand
| 1 | _ | _ | 0 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | Use M as second operand
| 1 | _ | _ | _ | _ | 0 | 0 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | logic: op1 & op2
| 1 | _ | _ | _ | _ | 0 | 0 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | logic: op1 | op2
| 1 | _ | _ | _ | _ | 0 | 1 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | logic: op1 ^ op2
| 1 | _ | _ | _ | _ | 0 | 1 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | logic: ~op1
| 1 | _ | _ | _ | _ | 1 | 0 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 + op2
| 1 | _ | _ | _ | _ | 1 | 0 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 + 1
| 1 | _ | _ | _ | _ | 1 | 1 | 0 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 - op2
| 1 | _ | _ | _ | _ | 1 | 1 | 1 | _ | _ | _ | _ | _ | _ | _ | _ | arithmetic: op1 - 1
| 1 | _ | _ | _ | _ | _ | _ | _ | 0 | 0 | _ | _ | _ | _ | _ | _ | op1=X, op2=Y
| 1 | _ | _ | _ | _ | _ | _ | _ | 0 | 1 | _ | _ | _ | _ | _ | _ | op1=Y, op2=X
| 1 | _ | _ | _ | _ | _ | _ | _ | 1 | 0 | _ | _ | _ | _ | _ | _ | op1=0, op2=Y
| 1 | _ | _ | _ | _ | _ | _ | _ | 1 | 1 | _ | _ | _ | _ | _ | _ | op1=0, op2=Y
| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | _ | _ | _ | dst A
| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | _ | _ | dst D
| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | _ | dst M
| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | _ | jlz
| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | _ | jez
| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | 1 | jgz
HACK computer,
taken from https://en.wikipedia.org/wiki/Hack_computer
2026-01-03
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | ...
| | | | a | c1 | c2 | c3 | c4 | c5 | c6 | ALU output: f(x,y) | Mnemonic
| | | | MnA| | | | |AnL?| |
+----+----+----+----+----+----+----+----+----+----+--------------------------------------------------------+----------
| 0 | _ | _ | _ | _ | _ | _ | _ | _ | _ | Load value in A
| 1 | _ | _ | _ | _ | _ | _ | _ | _ | _ | ALU / c:
| _ | X | X | _ | _ | _ | _ | _ | _ | _ | don't care / usually 1
| | | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Outputs bitwise logical And of D and A; ignores M | D&A
| | | | 0 | 0 | 0 | 0 | 0 | 1 | 0 | Outputs D + A; ignores M | D+A
| | | | 0 | 0 | 0 | 0 | 1 | 1 | 1 | Outputs A - D; ignores M | A-D
| | | | 0 | 0 | 0 | 1 | 1 | 0 | 0 | Outputs D; ignores A and M | D
| | | | 0 | 0 | 0 | 1 | 1 | 0 | 1 | Outputs bitwise negation of D; ignores A and M | !D
| | | | 0 | 0 | 0 | 1 | 1 | 1 | 0 | Outputs D - 1 (decrements D); ignores A and M | D-1
| | | | 0 | 0 | 0 | 1 | 1 | 1 | 1 | Outputs 2's complement negative of D; ignores A and M | -D
| | | | 0 | 0 | 1 | 0 | 0 | 1 | 1 | Outputs D - A; ignores M | D-A
| | | | 0 | 0 | 1 | 0 | 1 | 0 | 1 | Outputs bitwise logical Or of D and A; ignores M | D|A
| | | | 0 | 0 | 1 | 1 | 1 | 1 | 1 | Outputs D + 1 (increments D); ignores A and M | D+1
| | | | 0 | 1 | 0 | 1 | 0 | 1 | 0 | Outputs 0; ignores all operands | 0
| | | | 0 | 1 | 1 | 0 | 0 | 0 | 0 | Outputs A; ignores D and M | A
| | | | 0 | 1 | 1 | 0 | 0 | 0 | 1 | Outputs bitwise negation of A; ignores D and M | !A
| | | | 0 | 1 | 1 | 0 | 0 | 1 | 1 | Outputs 2's complement negative of A; ignores D and M | -A
| | | | 0 | 1 | 1 | 0 | 1 | 1 | 1 | Outputs A + 1 (increments A); ignores D and M | A+1
| | | | 0 | 1 | 1 | 0 | 0 | 1 | 0 | Outputs A - 1 (decrements A); ignores D and M | A-1
| | | | 0 | 1 | 1 | 1 | 0 | 1 | 0 | Outputs −1; ignores all operands | −1
| | | | 0 | 1 | 1 | 1 | 1 | 1 | 1 | Outputs 1; ignores all operands | 1
| | | | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Outputs bitwise logical And of D and M; ignores A | D&M
| | | | 1 | 0 | 0 | 0 | 0 | 1 | 0 | Outputs D + M; ignores A | D+M
| | | | 1 | 0 | 0 | 0 | 1 | 1 | 1 | Outputs M - D; ignores A | M-D
| | | | 1 | 0 | 1 | 0 | 0 | 1 | 1 | Outputs D - M; ignores A | D-M
| | | | 1 | 0 | 1 | 0 | 1 | 0 | 1 | Outputs bitwise logical Or of D and M; ignores A | D|M
| | | | 1 | 1 | 1 | 0 | 0 | 0 | 0 | Outputs M; ignores D and A | M
| | | | 1 | 1 | 1 | 0 | 0 | 0 | 1 | Outputs bitwise negation of M; ignores D and A | !M
| | | | 1 | 1 | 1 | 0 | 0 | 1 | 0 | Returns M-1 (decrements M); ignores D and A | M-1
| | | | 1 | 1 | 1 | 0 | 0 | 1 | 1 | Outputs 2's complement negative of M; ignores D and A | -M
| | | | 1 | 1 | 1 | 0 | 1 | 1 | 1 | Outputs M + 1 (increments M); ignores D and A | M+1
|