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