SUBLW
will subtract the literal from the value in W regardless of W being zero or not. The result of course will be like
W = W - literal;
If W = 0 then it's a negation if the type is signed, or a wrap around if it's unsigned.
Before: W = 00000000
- 1
────────────────────
After: W = 11111111 (-1)
But if W is zero, subtract a non-zero number from it will make it non zero, thus the zero flag will not be ON
If you need to check whether the value is negative or not, use both carry flag and zero flag
Result Carry Zero
Positive 1 0
Zero 1 1
Negative 0 0