It's ok something like this ?!
Code:
TrisA = %00000000
TrisB = %11110000
PortB = 0

Flag                var bit
Q_New               var Byte
Q_Old               var byte
M_Count             var byte [4]
P_Count             var byte [4]
Q_Count             var word

' ---------------------- Set variable value @ startup ----------------------  
     
For Q_Old = 0 to 3
Read Q_Old,M_Count[Q_Old]
Read Q_Old + 4,P_Count[Q_Old]
Next Q_Old
     
  Q_Count = 0   
    Q_New = 0
    Q_Old = 0
     Flag = 0  
                        

Goto Main_Loop

Encoder:                                    '
Q_New = PortB.7 + PortB.6 + PortB.5         ' get port status
 
If M_Count[Q_Old] = Q_New then              ' if M_Count code satisfied then minus
          Q_Count = Q_Count - 1
             Flag = 0                       ' set flag for DOWN
goto Q_Skip
endif

If P_Count[Q_Old] = Q_New then              ' if M_Count code satisfied then plus
          Q_Count = Q_Count + 1
             Flag = 1                       ' set flag for UP
endif


Q_Skip:
Q_Old = Q_New                               ' update Q_Old Byte
 

Main_Loop:   
if Flag = 1 then do command1                             
if Flag = 0 then do command2                                  
goto Main_Loop