Section 7.2
Instructions of the CSC-1

Here is the complete list of CSC-1 instructions along with their opcodes and formats and assembler mnemonics, (pronounced nee-MAHN-niks) which are short names of 2 or 3 characters used in writing assembler programs.

opcode mnemonic        format                   meaning
----------------------------------------------------------------------------
0000      LOD     0000xxxxxxxxxxxx   Load memory word xx... into A
0001      STD     0001xxxxxxxxxxxx   Store A into memory xx...
0010      LDI     0010kkkkkkkkkkkk   Load constant kk... into A
0011      ADD     0011xxxxxxxxxxxx   Add memory word xx... to A
0100      SUB     0100xxxxxxxxxxxx   Subtract memory word xx...from A
0101      AND     0101xxxxxxxxxxxx   Boolean bitwise AND of memory with A
0110      OR      0110xxxxxxxxxxxx   Boolean bitwise OR of memory with A
0111      NOT     0111xxxxxxxxxxxx   Boolean bitwise NOT of memory
1000      JMP     1000xxxxxxxxxxxx   Jump to address xx... unconditionally
1001      JZ      1001xxxxxxxxxxxx   Jump to address xx... if Z=1
1010      JC      1010xxxxxxxxxxxx   Jump to address xx... if C=1
1011      JV      1011xxxxxxxxxxxx   Jump to address xx... if V=1
1100      JN      1100xxxxxxxxxxxx   Jump to address xx... if N=1
1101      JP      1101xxxxxxxxxxxx   Jump to address xx... if N=0 and Z=0
1110      CAL     1110xxxxxxxxxxxx   Call subroutine xx...
11110001  RET     1111000100000000   Return from subroutine
11110010  A2S     1111001000000000   Copy A into S
11110011  S2A     1111001100000000   Copy S into A
11110100  SHL     1111010000000000   Shift Left 1 bit (logical shift)
11110101  SHR     1111010100000000   Shift Right 1 bit (logical shift)
11110110  LDS     1111011000000000   Load A via S (indirect load)
11110111  STS     1111011100000000   Store A via S (indirect store)
11111000  NOP     1111100000000000   No Operation (waste cycle)
11111001  HLT     1111100100000000   Halt the computer

We will become very familiar with these instructions as we learn to implement them and to write simple assembler programs using them.

In the above notation, xxxxxxxxxxxx is a 12-bit binary number. Since it is a memory address, it is unsigned.

kkkkkkkkkkkk is also a 12-bit binary number, also unsigned. It is just a binary number, from 0 to 4095, and is not necessarily a memory address. The letter k was chosen because this number is a constant (konstant in German) that is plunked into the A register by the LDI instruction.