Lo podes hacer de todas las formas posibles que se te ocurran, sumando, restando, haciendo una AND, usando una XOR, etc. Las mas simples son XOR y restando. supongamos que tenes el registro CONTADOR donde tenes tu dato.
;Restando:
MOVF CONTADOR, W
SUBLW d'4'
BTFSS STATUS, Z ; Si Z es 1, son iguales
;XOR:
MOVF CONTADOR, W
XORLW d'4'
BTFSS STATUS, Z ; Si Z es 1, son iguales
Para entenderlo mejor, explico cada una, la resta es simple, 4 - 4 = 0, y cuando es 0 se activa la bandera Z (zero)
La XOR la podes pensar a nivel bits. Y tendrias, voy a dar 2 ejemplos:
Para contador = 3
Contador: 0000 0011
ValorXOR: 0000 0100
--------------------------
Resultado: 0000 0111
La tabla de XOR la podes resumir que si haces la XOR con el valor d'4' le vas a invertir el bit solo a aquel que posea un 1, en nuestro caso d'4' posee un 1 en el tercer bit. Por lo tanto queda de esa forma, y no se cumple que se hace cero. Pero cuando son iguales:
Para contador = 4
Contador: 0000 0100
ValorXOR: 0000 0100
--------------------------
Resultado: 0000 0000
Le invierte el unico 1 que poseia, entonces el resultado si es 0, y podes determinar que son iguales gracias a la bandera Z.
--------------------------------------
¿ Que ventajas tiene uno del otro ?
La XOR te permite verificar una igualdad en este caso. Ya que va a modificar la bandera Z nomas.
La resta, por su parte, permite determinar otras cosas ademas, como que si es mayor uno de otro, o si es menor tambien. Ya que al realizar la resta se activa el bit del Carry segun los valores. Sea la resta que uses SUBWF, SUBLW, solo tenes que recordar que puede cambiar el orden de los operandos en cada una de esas.
Ya tu codigo quedaria:
MOVF CONTADOR, W
XORLW d'4'
BTFSC STATUS, Z ; Si Contador es igual a 4 , activa la salida
BSF PORTA, 0
MOVF CONTADOR, W
XORLW d'8'
BTFSC STATUS, Z ; Si Contador es igual a 8, desactiva la salida
BCF PORTA, 0