In DUKOV2, do you perhaps want to XORLW instead of XORWF? By specifying 00 as the operand for XORWF you are telling it to XOR W with the contents of memory address 00. As it is, if memory address 00 is not a zero, then the result is likely to be non-zero and hence you will branch straight to STOP. Memory address 00 seems to be the INDF register, and a quick glance at the datasheet suggests maybe you dont want to be using this...
Alternatively, since you are only wanting to affect the Z status bit to test for zero, I would use MOVF to move a register in to itself instead. If the contents were zero then Z is set and you havent modified any contents.
Also, for many of your instructions, I would highly recommend using the W and F mnemonics instead of 1 or 0 for the destination to make your code more readable. e.g. INCF MSG_COUNT,1 becomes INCF MSG_COUNT,F and it is easier to tell at a glance where the result of the operation should be stored.