Эта команда выполняет побитовую операцию Исключающее ИЛИ между любым регистром данных и содержимым регистра W, помещая результат либо в исходный регистр данных, либо в W.
Пример 1: переключение состояния старшего бита регистрв 36Н
MOVLW b’10000000’ ; маска
XORWF H’36’ ; переключаем только старший бит регистра
Пример 2:определение отличий между двумя группами битов.
Порт В микроконтроллера, к которому подключены восемь переключателей передней панели стиральной машины, непрерывно опрашивается.Процедура ожидает изменение состояния переключателей:
START
MOVFW PORTB ; считываем начальное состояние переключателей
MOVWF H’20’ ; сохраняем в регистре 20Н
LOOP
MOVWF PORTB ; считываем текущее состояние переключателей
XORWF H’20’,w ; ищем отличие от исходного
BTFSC STATUS,Z ; ЕСЛИ результат проверки ноль (Z=1)
GOTO LOOP ; ТО проверяем снова
……… ……. ; ИНАЧЕ продолжаем
При этом возможны два варианта:

Результат, получаемый в рабочем регистре, отражает любые изменения состояния передней панели. В первом случае между исходным состоянием переключателей, сохраненным в регистре 20Н, и текущим нет никаких отличий. Во втором случае 4-й переключатель был переключен из 1 в 0. Чтобы определить, какой именно бит изменился, можно сдвигать результат вправо с подсчетом количества сдвигов до тех пор, пока оставшееся значение не будет равно 0.
А характер изменения (0→1или 1→0) можно определить путем логического умножения итогового байта на байт исходного состояния переключателей: ANDWF H’20’.Если 4-й бит равен нулю, то исходное значение тоже равно 0 и, соответственно, состояние бита изменилось с 0 на 1 и наоборот.
Команды циклического сдвига
Во всех PIC микроконтроллерах имеется две команды циклического сдвига содержимого любого регистра данных, по одной команде для каждого направления.