Каждая команда микроконтроллера состоит из одного 14-разрядного слова разделенного на код операции, определяющий действие команды, один или несколько операндов, указывающих на данные, над которыми будет проводиться действие.
Полный список команд смотрите в табл. 1, табл. 2, табл. 3. Команды разделены на следующие группы:
На рис. 1 показан формат команд трех основных групп.
Для байт ориентированных команд:
Если , результат сохраняется в регистре W.
Если , результат сохраняется в регистре, который используется в команде.
В бит ориентированных командах:
В командах управления или операциях с константами:
Рис. 1.  
Все команды выполняются за один машинный цикл, кроме команд условия, в которых замещается значение программного счетчика. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из четырех тактов генератора. Для тактового генератора с частотой 4 МГц команда выполняется за 2 мкс.
Таблица 1    
Мнемоника командыОперацияЦиклыКод командыФлажкиПримечание
ADDWF f, dСложение (W + f d)100 0111 dfff ffffC.DC.Z1,2
ANDWF f, dЛогическое "И" (W and f d)100 0101 dfff ffffZ1,2
CLRF fОбнулить f100 0001 1fff ffffZ2
CLRW -Обнулить W100 0001 0xxx xxxxZ 
COMF f, dДополнение f (Логическое "НЕ")100 1001 dfff ffffZ1,2
DECF f, dДекремент f100 0011 dfff ffffZ1,2
DECFSZ f, dДекремент f, пропуск если "0"1(2)00 1011 dfff ffff 1,2,3
INCF f, dИнкремент f100 1010 dfff ffffZ1,2
INCFSZ f, dИнкремент f, пропуск если "0"1(2)00 1111 dfff ffff 1,2,3
IORWF f, dЛогическое "ИЛИ" (W or f d)100 0100 dfff ffffZ1,2
MOVF f, dПересылка (f W)100 1000 dfff ffffZ1,2
MOVWF fПересылка (W f)100 0000 1fff ffff  
NOPПустая операция100 0000 0xx0 0000  
RLF f, dСдвиг влево через перенос100 1101 dfff ffffС1,2
RRF f, dСдвиг вправо через перенос100 1100 dfff ffffC1, 2
SUBWF f, dВычитание (f W d)100 0010 dfff ffffC,DC,Z1, 2
SWAPF f, dОбменять полубайты f100 1110 dfff ffff 1,2
XOFWF f, dИсключающее "ИЛИ" (W or f d)100 0110 dfff ffffZ1,2

Таблица 2    
Мнемоника командыОперацияЦиклыКод командыФлажкиПримечание
BCF f. bОбнулить бит b в f101 00bb bfff ffff 1,2
BSF f, bУстановить бит b в f101 0lbb bfff ffff 1,2
BTFSC f, bТест бита b в f, пропуск если "0"1(2)01 l0bb bfff ffff 3
BTFSS f, bТест бита b в f пропуск если "1"1(2)01 11bb bfff ffff 3

Таблица 3    
Мнемоника командыОперацияЦиклыКод командыФлажкиПримечание
ADDLW кСложение (k + W W)111 111x kkkk kkkkC,DC,Z 
ANDLW кЛогическое "И" (k and W W)111 1001 kkkk kkkkZ 
CALL kВызов подпрограммы k210 0kkk kkkk kkkk  
CLRWDT -Обнулить WDT100 0000 0110 0100TO,PD 
GOTO kПереход к адресу k210 1kkk kkkk kkkk  
IORLW kЛогическое "ИЛИ" (К or W W)111 1000 kkkk kkkkZ 
MOVLW kПересылка (k W)111 00xx kkkk kkkk  
RETFIE -Возврат из прерывания200 0000 0000 1001  
RETLW kВозврат с константой211 01xx kkkk kkkk  
RETURN -Возврат из подпрограммы200 0000 0000 1000  
SLEEP -Останов100 0000 0110 0011TO,PD 
SUBLW kВычитание (k W W)111 110х kkkk kkkkC,DC,Z 
XORLW kИсключающее "ИЛИ"(k or W W)111 1010 kkkk kkkkZ 

Примечание 1
Если регистр ввода/вывода изменяется, то исходным значением будет величина, считанная непосредственно с контактов.
Примечание 2
Если команда модифицирует регистр TMR0, то предделитель будет обнулен.
Примечание 3
Если в счетчик программ записывается адрес (т.е. условие проверки "истина"), то команда выполняется за два цикла. Второй цикл выполняется как команда NOP.
Рекомендуемая структура программы для микроконтроллера PIC16F877
list      p=16f877          ;  директива определения процессора

#include <p16f877.inc>      ; подключение списка определений переменных процессора

__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
; '__CONFIG'  - директива определения битов конфигурации процессора

;***** ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ
w_temp        EQU     0x70   ; переменная для сохранения текущего состояния при обработке прерывания
status_temp   EQU     0x71   ; переменная для сохранения текущего состояния при обработке прерывания

;*****

ORG     0x000           ; размещение команд по адресу сброса процессора
clrf    PCLATH          ; очистка старших бит счетчика команд

goto    main            ; переход на основную программу

ORG     0x004           ; размещение команд по вектору прерывания процессора

movwf   w_temp          ; сохранение текущего значения регистра W
movf  STATUS,w          ; сохранение текущего значения регистра STATUS
movwf  status_temp

; ПРЕРЫВАЮЩАЯ ПРОГРАММА

movf    status_temp,w   ; восстановление значения регистра STATUS
movwf   STATUS
swapf   w_temp,f
swapf   w_temp,w        ; восстановление значения регистра W
retfie                  ; возврат в основную программу

main

; ОСНОВНАЯ ПРОГРАММА

END                     ; директива конца программы