PIC Instruction Set Summary
Notation:- fr: one of the 80 memory ram positions implemented as 8 bit registers (File Register Set or FRS) (0 =< fr <= 4f). The first 12 are special purpose registers (SFR) and the other 68 are general purpose registers(GPR).
- W: 8 bit accumulator of the Arithmetic Logic Unit (ALU)
- d: mnemonic for the destination of one operation, which can be 1 ( a file register f) or 0 (the accumulator w)
- k: an 8 bit literal
- b: 3 bit literal identifying one bit of a byte (0: least significant bit, 7: most significant bit). Example: f(7)
- addr: 11 bit literal representing an instruction address
- C: Carry bit = STATUS(0)
- Z: Zero bit = STATUS(2)
- DC: Digit Carry bit = STATUS(1)
- opr: mnemonic for one of the following binary operations:
- add - addition
- sub - subtraction
- and - logical and
- ior - logical or
- xor - exclusive or
1. Copy value from/to file register or literal to/from w | ||||
Mnemonic | Description | Status | Function | Obs |
movf fr, d | Move file register | | fr => d | see macro: mov f, d |
movwf fr | Move W to file register | w => fr | macro: mov w, fr | |
movlw k | Move literal to W | k => W | macro: movl k, w |
2. Logic / arithmetic instructions with a file register and w | ||||
Mnemonic | Description | Status | Function | Obs |
oprwf fr,d | logic / arithmetic operation with a file register and W | Z(all),C,DC (add,sub) | fr opr W => d | only add, sub affect C,DC macro: opr fr, d |
3. Logic / arithmetic instructions with a literal and w | ||||
Mnemonic | Description | Status | Function | Obs |
oprlw k | logic / arimetic operation with a literal and W | Z(all),C,DC (add,sub) | k opr W => W | only add, sub affect C,DC macro:oprl k,w |
4. One operand logic / arithmetic instructions | ||||
Mnemonic | Description | Status | Function | Obs |
clrw | Clear accumulator W | | 0 => W | |
clrf fr | Clear file register fr | | 0 => fr | |
decf fr,d | Decrement file register fr | | fr - 1 => d | |
incf fr, d | Increment file register fr | | fr + 1 => d | |
comf fr,d | 1's complement file register fr | | not fr => d | |
rlf fr, d | Rotate file register fr left thru C | | C <= fr(7), fr(i) <= fr(i-1), fr(0) <= C | |
rrf fr, d | Rotate file register fr right thru C | | C => fr(7), fr(i) => fr(i-1), fr(0) => C | |
bcf fr, b | Bit clear on file register fr | 0 => fr(b) | ||
bsf fr, b | Bit set on file register fr | 1 => fr(b) | ||
swapf fr,d | swap halves of fr | (fr(0:3) <=> fr(4:7)) => d | ||
nop | No operation |
5. Branch, Skip and Call instructions | ||||
Mnemonic | Description | Status | Function | Obs |
goto addr | branch to addr | addr => PC(0:10) | ||
call addr | call routine at addr | PC => TOS addr => PC(0:10) | ||
decfsz fr,d | Decrement fr, skip if zero | fr - 1 => d, skip if 0 | ||
incfsz fr,d | Increment fr, skip next instr if zero | fr + 1 => d, skip next instr if 0 | ||
btfsc fr,b | Bit test fr, skip if clear | skip next instr if fr(b) =0 | ||
btfss fr,b | Bit test fr, skip if set | skip next instr if fr(b)=1 | ||
return | return from subroutine | TOS => PC | ||
retlw k | return with literal in w | k =>w, TOS => PC | ||
retfie | return from interrupt | TOS => PC, 1 => GIE |
6. Buit-in macros for commonly used logic / arithmetic operations | ||||
Mnemonic | Description | Status | Function | Obs |
addcf fr, d | Add carry to fr | | btfsc 3, 0 incf f,d | |
subcf fr, d | Subtract carry from fr | | btfsc 3, 0 decf fr,d | |
negf fr, d | Negate file register fr | | comf fr, 1 incf fr,d | |
b addr | Branch to addr | goto adddr | ||
bz addr | Branch on Zero to addr | btfsc 3, 2 goto addr | ||
bnz addr | Branch on No Zero to addr | btfss 3, 2 goto addr | ||
bc addr | Branch on Carry to addr | btfsc 3, 0 goto addr | ||
bnc addr | Branch on No Carry to addr | btfss 3, 0 goto addr | ||
skpc | Skip on Carry | btfss 3, 0 | ||
skpnc | Skip on No Carry | btfsc 3, 0 | ||
skpz | Skip on Zero | btfss 3, 2 | ||
skpnz | Skip on No Zero | btfsc 3, 2 | ||
clrz | Clear Zero flag | bcf 3, 2 | ||
setz | Set Zero flag | bsf 3, 2 | ||
clrc | Clear Carry flag | bcf 3, 0 | ||
setc | Set Carry flag | bsf 3, 0 | ||
tstf fr | Test file register fr | | movf fr, f | |
xchg fr1, fr2 | Exchange file regs fr1 & fr2 | | movf fr2, 0 xorwf fr1,1 xorwf fr1, 0 xorwf fr1, 1 movwf fr2 | Macro uses only w as temporary variable See:mymacros.inc |
decbnz fr,addr | Decrement file register, if # 0 branch to addr | decfsz fr goto addr | In:mymacros.inc |
Copyright © C閘io Guimar鉫s
Institute of Computing - Unicamp - Brazil
Last Update: Nov 29, 2001 by celio
No comments:
Post a Comment