
PIC17C4X
DS30412C-page 136
1996 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
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'
Execute
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
Description:
Subtract WREG and the carry ag
(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'
Execute
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