Datasheet
PIC17C7XX
DS30289C-page 226 1998-2013 Microchip Technology Inc.
SUBWF Subtract WREG from f
Syntax: [ label ] SUBWF f,d
Operands: 0 f 255
d [0,1]
Operation: (f) – (W) dest)
Status Affected: OV, C, DC, Z
Encoding:
0000 010d ffff ffff
Description:
Subtract WREG from register 'f' (2’s
complement method). If 'd' is 0, the
result is stored in WREG. If 'd' is 1, the
result is stored back in register 'f'.
Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read
register 'f'
Process
Data
Write to
destination
Example 1:
SUBWF REG1, 1
Before Instruction
REG1 = 3
WREG = 2
C=?
After Instruction
REG1 = 1
WREG = 2
C = 1 ; result is positive
Z=0
Example 2:
Before Instruction
REG1 = 2
WREG = 2
C=?
After Instruction
REG1 = 0
WREG = 2
C = 1 ; result is zero
Z=1
Example 3:
Before Instruction
REG1 = 1
WREG = 2
C=?
After Instruction
REG1 = FF
WREG = 2
C = 0 ; result is negative
Z=0
SUBWFB
Subtract WREG from f with
Borrow
Syntax: [ label ] SUBWFB f,d
Operands: 0 f 255
d [0,1]
Operation: (f) – (W) – C
dest)
Status Affected: OV, C, DC, Z
Encoding:
0000 001d ffff ffff
Description:
Subtract WREG and the carry flag
(borrow) from register 'f' (2’s comple-
ment method). If 'd' is 0, the result is
stored in WREG. If 'd' is 1, the result is
stored back in register 'f'.
Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read
register 'f'
Process
Data
Write to
destination
Example 1:
SUBWFB REG1, 1
Before Instruction
REG1 = 0x19 (0001 1001)
WREG = 0x0D (0000 1101)
C=1
After Instruction
REG1 = 0x0C (0000 1011)
WREG = 0x0D (0000 1101)
C = 1 ; result is positive
Z=0
Example2: SUBWFB REG1,0
Before Instruction
REG1 = 0x1B (0001 1011)
WREG = 0x1A (0001 1010)
C=0
After Instruction
REG1 = 0x1B (0001 1011)
WREG = 0x00
C = 1 ; result is zero
Z=1
Example3: SUBWFB REG1,1
Before Instruction
REG1 = 0x03 (0000 0011)
WREG = 0x0E (0000 1101)
C=1
After Instruction
REG1 = 0xF5 (1111 0100) [2’s comp]
WREG = 0x0E (0000 1101)
C = 0 ; result is negative
Z=0