 Programming
           Programming
      Definitions for the main table:
| RA | Destination. Any of registers R0, R1, R2, R3 | 
| RB | Source. Any of registers R0, R1, R2, R3 (possibly with exception of RA, see notes) | 
| RC | Destination. May be either R0 or R1 | 
| RI | Index. May be either R2 or R3 | 
| sz | Size. May be B for byte or W for word | 
| wt | Weight. Used to specify the calculation of a weight (count of ones) value. | 
              
| Instruction | Notes | |||||||||||||||
| ABS RA | ||||||||||||||||
| ADD RA,RB | RB may equal RA | |||||||||||||||
| ADDI SP, #data | data is 8 bit signed value | |||||||||||||||
| ADDQ RA, #small | The small value may be 1, 2, -1, or -2. This instruction
                      is encoded as a single byte. | |||||||||||||||
| ADDX R0, R1 | ||||||||||||||||
| AND RA, RB | RB may not equal RA | |||||||||||||||
| ANDI PS, #data | data is 8 bits | |||||||||||||||
| ASL[.wt]
                        RA, descriptor ASR[.wt] RA, descriptor | Arithmetic shift. See notes on shift instructions below. | |||||||||||||||
| Bcc address | Conditional branch. The target is stored as a signed 8
                      bit displacement, -128...127. There are 16 possibilities: BCC: C clear BCS: C set BNE: Z clear (not equal) BEQ: Z set (equal) BVC: V clear BVS: V set BPL: N clear (plus) BMI: N set (minus) BGE: BLT: BGT: Use for 2s complement numbers BLE: Use for 2s complement numbers BUC: U clear BUS: U set BHI: Branch Higher. Similar to BGT but for unsigned numbers BLS: Branch on Lower or Same. Similar to BLE but for unsigned numbers | |||||||||||||||
| BCHG RA, descriptor | Invert specified bit in destination register. See notes on BIT instructions below | |||||||||||||||
| BCLR RA, descriptor | Clear specified bit in destination register. See notes on BIT instructions below | |||||||||||||||
| BSET RA, descriptor | Set specified bit in destination register. See notes on BIT instructions below | |||||||||||||||
| CLR RA | Alias for XOR RA, RA | |||||||||||||||
| CMP RA, RB | RB may not equal RA | |||||||||||||||
| DEC RA | Alias for ADDQ RA, #-1 | |||||||||||||||
| DIVS DIVU | This calculates R0/R1. R0 and R1 are left unchanged. R2 holds the quotient. R3 holds the remainder. There are two ways of defining signed division, both have validity. Both are implemented, controlled by the D bit of the PS register. The difference lies in whether or not negative remainders are allowed. 
 Divide by zero is trapped and causes vector #2 to be taken. | |||||||||||||||
| INC RA | Alias for ADDQ RA, #1 | |||||||||||||||
| INV RA | Invert all bits | |||||||||||||||
| JMP      
                        (R0) JMP address | Jump to specified location. | |||||||||||||||
| JSR      
                        (R0) JSR address | Jump to subroutine, pushes return address on stack | |||||||||||||||
| LD.sz     
                        RA, address LD.sz RC, (RI) LD.sz RC, (RI++) LD.sz RA, (SP + m) LD.sz RA, #immediate | Bytes are zero extended on loading to fill the 16 bit
                      destination register. The m value used for stack relative addressing is 8 bit unsigned. | |||||||||||||||
| LSL[.wt]  
                        RA, descriptor LSR[.wt] RA, descriptor | Logical shift. See notes on shift instructions below. | |||||||||||||||
| MOVE      
                        RA, RB MOVE R0, SP MOVE SP, R0 | RB may not equal RA | |||||||||||||||
| MULS MULU | This calculates R0*R1 to create a 32 bit result. The least significant 16 bits of the result are stored in R2, the most significant 16 bits are stored in R3. If it is a signed operation then R0 will hold the value of an internal calculation. If it is an unsigned operation R0 will be unchanged. R1 is always left unchanged. | |||||||||||||||
| NEG RA | ||||||||||||||||
| NEGX R0 | ||||||||||||||||
| NOP | ||||||||||||||||
| OR RA, RB | RB may not equal RA | |||||||||||||||
| ORI PS, # data | data is 8 bits | |||||||||||||||
| POP       
                        RA POP PS | ||||||||||||||||
| PUSH
                              RA PUSH PS | ||||||||||||||||
| RET | Return from subroutine | |||||||||||||||
| RETI | Return from interrupt/exception | |||||||||||||||
| ROL[.wt]
                          RA, descriptor ROR[.wt] RA, descriptor | Rotate. See notes on shift instructions below. | |||||||||||||||
| ROXL[.wt] 
                        RA, descriptor ROXR[.wt] RA, descriptor | Rotate extended with X bit. See notes on shift instructions below. | |||||||||||||||
| SQRT | This calculates the square root of R1. The result, rounded down, is put into R0. R1 holds the remainder. R2 is unchanged. R3 will be set to zero. | |||||||||||||||
| ST.sz     
                        address, RA ST.sz (RI), RC ST.sz (RI++), RC ST.sz (SP + m), RA | The m value used for stack relative addressing is 8 bit unsigned. | |||||||||||||||
| SUB RA, RB | RB may not equal RA | |||||||||||||||
| SUBX R0, R1 | ||||||||||||||||
| SXT RA | Sign extend LS byte of register to fill the register | |||||||||||||||
| TEST RA | Set status bits Z, N according to register | |||||||||||||||
| TRAP | Pushes PS and return address and then takes vector #3. | |||||||||||||||
| XOR RA, RB | RB may equal RA | 
Bit Instruction
                  Descriptors:
                The descriptor specifies the target bit and may be either a 4
                bit immediate value or a general purpose register (R0..R3). If a
                register is specified then only the least significant 4 bits are
                used. For example:
                BSET       
                  R0, #3
                  BCLR        R1, R2
                Shift Instruction
                  Descriptors:
                The descriptor specifiers the shift to apply and is a 15 bit
                signed value ranging -16..15. It may be either a 5 bit signed
                immediate value or a general purpose register (R0..R3). If a
                register is specified then only the least significant 5 bits are
                used. For example:
LSL 
                         R0, #3
                  ASR         R1, R2
              
              
© 2014-2016 James Newman.