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.