SX Microcontroller Bit Math Method

Testing bits in W

Dmitry Kiryashov says:

You can't apply sb/snb operations to [the W register ]. You need to put W value to some temp location first and finally check temp with sb / snb commands. [ed: unless you have optionx_carryx (or optionx on the old parts) in your device directive and have the RTW bit 7 of the option register cleared, then register 1 becomes the W register rather than the RTCC. The RTCC continues to work, but can't be read untill that bit is set. This is specific to the SX line of processors]

HINTS:

  1. 	and	W, #$80	; will test bit .7 in W, other bits are cleared ;-)
    	and	W, #$40	; test bit .6
    ;...
    

    result of operation in Z flag (=0 means bit=1 otherwise bit=0 result to Z=1)

    and W, #$xx is destructive command. You cannot restore W if you didn't save it before.

  2. You can also apply XORLW value command to check identity W to some value. It is useful command (sometimes) 'cause you can do comparison for alot of values and restore W after that to initial value.
    	xor	W, #A_CONST
    	snb	Z
    	jmp	A_CONST_MATCH
    
    	xor	W, #B_CONST^A_CONST	;compare with B_CONST
    	snb	Z
    	jmp	B_CONST_MATCH
    
    	xor	W, #C_CONST^B_CONST	;compare with C_CONST
    ;....
    
    	xor	W, #LAST_CONST	;last used const value -> restore initial W
    ;.....