WikiDer > Перечень инструкций PIC
В ПОС Набор инструкций относится к набору инструкций, которые Технология микрочипов PIC или dsPIC микроконтроллер поддерживает. Инструкции обычно программируются в Флэш-память процессора и автоматически выполняется микроконтроллером при запуске.
Чипы PICmicro имеют Гарвардская архитектура, а слова-инструкции имеют необычный размер. Первоначально 12-битные инструкции включали 5 адресных битов для указания операнда памяти и 9-битных пунктов назначения ветвления. В более поздних версиях добавлены биты кода операции, что позволяет использовать дополнительные биты адреса.
В следующих таблицах набора команд номера регистров обозначены как «f», а константы - как «k». Битовые номера (0–7) выбираются буквой «b». Бит «d» выбирает место назначения: 0 указывает W, а 1 указывает, что результат записывается обратно в исходный регистр f. Флаги состояния C и Z могут быть установлены на основе результата; в противном случае они не изменяются. Команды сложения и вычитания (но не вращения), которые устанавливают C, также устанавливают флаг DC (перенос цифр), перенос с бита 3 на бит 4, что полезно для BCD арифметика.
Архитектура
Операнды памяти также называются «регистрами». Большинство из них представляют собой просто универсальное хранилище (ОЗУ), а некоторые места зарезервированы для регистры специальных функций. За исключением одного аккумулятора (называемого W
), почти все другие регистры отображаются в памяти, даже регистры, такие как счетчик команд и ALU регистр статуса. (Другими исключениями, которые не отображаются в памяти, являются стек адресов возврата и три государства регистры, используемые для настройки GPIO булавки.)
Набор команд не содержит инструкций условного перехода. Вместо этого он содержит инструкции условного пропуска, из-за которых следующая инструкция игнорируется. Условный переход, за которым следует безусловный переход, выполняет условный переход. Инструкции пропуска проверяют любой бит любого регистра. Регистр состояния ALU - это одна из возможностей.
Операнды памяти указаны абсолютный адрес; местоположение зафиксировано в время компиляции. Для обеспечения косвенной адресации предусмотрена пара регистров специальных функций:
- В выбор файла регистр (
FSR
) записывается с адресом желаемого операнда памяти, после которого - В косвенный файл регистр (
INDF
) становится псевдоним для операнда указал на ФСР.
Этот механизм также позволяет адресовать до 256 байт памяти, даже если набор команд допускает только 5- или 7-битные операнды памяти. Модели с большим количеством регистров (регистры специальных функций плюс ОЗУ), чем помещается в инструкции, предоставляют несколько банков памяти и используют один из двух механизмов для доступа к ним:
- Большинство базовых базовых устройств и некоторые базовые устройства среднего уровня используют старшие биты регистра выбора файла для выбора текущего банка регистров.
- Более свежие модели имеют отдельный регистр выбора банка, а
MOVLB
инструкция по установке.
Процессоры PIC с объемом программы более 256 слов используют выгружаемую память. Внутренний программный счетчик и стек возврата имеют такую ширину, которая необходима для адресации всей памяти, но только 8 младших битов видны программному обеспечению в PCL
(«Низкий уровень ПК») регистр. Есть дополнительная PCLATH
("PC latch high") регистр, который изменяется только программно. Любая операция, в которой не указан полный адрес назначения (например, 9-битный ИДТИ К
или 8-битная запись в регистр PC) заполняет дополнительные старшие биты из соответствующей части PCLATH. (Некоторые процессоры PIC18 расширяют это значение за пределы 16 бит с регистром PCLATU для передачи битов 16–23.)
Базовые основные устройства (12 бит)
1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Нет работы (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ВАРИАНТ | Скопируйте W в регистр OPTION | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | СПАТЬ | Перейти в режим ожидания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Перезапустить сторожевой таймер | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ж | ТРИС ж | Скопируйте W в трехсторонний регистр (ж = 1, 2 или 3) | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | k | MOVLB k* | Установите регистр выбора банка на k | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | ВОЗВРАЩАТЬСЯ† | Возврат из подпрограммы, W без изменений | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | РЕТФИ† | Возврат из прерывания; вернуть и разрешить прерывания | ||
0 | 0 | код операции | d | регистр | Операции ALU: dest ← OP (f, W) | ||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | ж | MOVWF ж | f ← W | ||||||
0 | 0 | 0 | 0 | 0 | 1 | d | ж | CLR ж,d | Z | dest ← 0, обычно пишется CLRW или CLRF ж | |||||
0 | 0 | 0 | 0 | 1 | 0 | d | ж | SUBWF ж,d | C | Z | dest ← f − W (dest ← f + ~ W + 1) | ||||
0 | 0 | 0 | 0 | 1 | 1 | d | ж | DECF ж,d | Z | dest ← f − 1 | |||||
0 | 0 | 0 | 1 | 0 | 0 | d | ж | IORWF ж,d | Z | dest ← f | W, включающее логическое или | |||||
0 | 0 | 0 | 1 | 0 | 1 | d | ж | ANDWF ж,d | Z | dest ← f & W, логический и | |||||
0 | 0 | 0 | 1 | 1 | 0 | d | ж | XORWF ж,d | Z | dest ← f ^ W, логическое исключающее или | |||||
0 | 0 | 0 | 1 | 1 | 1 | d | ж | ADDWF ж,d | C | Z | dest ← f + W | ||||
0 | 0 | 1 | 0 | 0 | 0 | d | ж | MOVF ж,d | Z | dest ← f | |||||
0 | 0 | 1 | 0 | 0 | 1 | d | ж | КОМФ ж,d | Z | dest ← ~ f, поразрядное дополнение | |||||
0 | 0 | 1 | 0 | 1 | 0 | d | ж | INCF ж,d | Z | dest ← f + 1 | |||||
0 | 0 | 1 | 0 | 1 | 1 | d | ж | DECFSZ ж,d | dest ← f − 1, пропустить, если ноль | ||||||
0 | 0 | 1 | 1 | 0 | 0 | d | ж | RRF ж,d | C | dest ← ПЕРЕНОСИТЬ << 7 | f >> 1, вращение вправо через перенос | |||||
0 | 0 | 1 | 1 | 0 | 1 | d | ж | RLF ж,d | C | dest ← F << 1 | ПЕРЕНОСИТЬ, повернуть влево через перенос | |||||
0 | 0 | 1 | 1 | 1 | 0 | d | ж | SWAPF ж,d | dest ← f << 4 | f >> 4, поменять местами полубайты | ||||||
0 | 0 | 1 | 1 | 1 | 1 | d | ж | INCFSZ ж,d | dest ← f + 1, пропустить, если ноль | ||||||
0 | 1 | opc | кусочек | регистр | Битовые операции | ||||||||||
0 | 1 | 0 | 0 | кусочек | ж | BCF ж,б | Очистить бит b из f | ||||||||
0 | 1 | 0 | 1 | кусочек | ж | BSF ж,б | Установить бит b из f | ||||||||
0 | 1 | 1 | 0 | кусочек | ж | BTFSC ж,б | Пропустить, если бит b из f очищен | ||||||||
0 | 1 | 1 | 1 | кусочек | ж | BTFSS ж,б | Пропустить, если установлен бит b функции f | ||||||||
1 | 0 | opc | k | Контрольные переводы | |||||||||||
1 | 0 | 0 | 0 | k | RETLW k | Установите W ← k, затем вернитесь из подпрограммы | |||||||||
1 | 0 | 0 | 1 | k | ВЫЗОВ k | Подпрограмма вызова, 8-битный адрес k | |||||||||
1 | 0 | 1 | k | ИДТИ К k | Перейти к 9-битному адресу k[1] | ||||||||||
1 | 1 | opc | 8-битный немедленный | Операции с W и 8-битным литералом: W ← OP (k, W) | |||||||||||
1 | 1 | 0 | 0 | k | MOVLW k | W ← k | |||||||||
1 | 1 | 0 | 1 | k | IORLW k | Z | W ← k | W, побитовое логическое или | ||||||||
1 | 1 | 1 | 0 | k | ANDLW k | Z | W ← k & W, побитовое и | ||||||||
1 | 1 | 1 | 1 | k | XORLW k | Z | W ← k ^ W, побитовое исключающее или | ||||||||
1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
*: Расширенная инструкция, недоступна на большинстве 12-битных PIC. Большинство моделей с расширенным ОЗУ (например, 16C5x, 16F5x) расширяют адресное пространство регистров, используя старшие биты FSR. Некоторые (например, PIC12F529T39A) имеют отдельный регистр выбора банка, который можно установить с помощью этой инструкции.
†: Расширенная инструкция, доступна только для PIC с «улучшенным базовым уровнем». Только очень немногие модели (16F527, 16F570, MCV20A) с поддержкой прерываний (и 4-уровневый стек) включают эти инструкции. Все такие модели также включают MOVLB.
Клоны ELAN Microelectronics (13 бит)
ELAN Microelectronics Corp. создать серию микроконтроллеров, подобных PICmicro, с 13-битным командным словом.[2] Инструкции в основном совместимы с 14-битным набором команд среднего уровня, но ограничены 6-битным адресом регистра (16 специальных регистров и 48 байтов ОЗУ) и 10-битным (1024 слова) пространством программы.
10-битный программный счетчик доступен как R2. Читает доступ только к младшим битам, а записывает очищает старшие биты. Исключением является инструкция TBL, которая изменяет младший байт, сохраняя биты 8 и 9.
7 команд немедленного накопления перенумерованы относительно 14-битного PICmicro, чтобы уместиться в 3 бита кода операции, а не в 4, но все они есть, а также дополнительная инструкция программного прерывания.
Есть несколько дополнительных различных инструкций, и есть некоторые изменения в терминологии (регистр PICmicro OPTION называется регистром CONTrol; регистры PICmicro TRIS 1–3 называются регистрами управления вводом-выводом 5–7), но эквиваленты очевидный.
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP* | Нет работы (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | DAA† | C | Десятичная корректировка после сложения | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ПРОДОЛЖЕНИЕ* | Напишите регистр CONT (CONT ← W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | СОН* | Перейти в режим ожидания (WDT ← 0, остановить часы) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | WDTC* | Перезапустить сторожевой таймер (WDT ← 0) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ж | IOW ж† | Скопируйте W в регистр управления вводом / выводом (ж = 5–7, 11–15) | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ENI† | Разрешить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | DISI† | Отключить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | RET | Возврат из подпрограммы, W без изменений | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | РЕТИ | Возврат из прерывания; вернуть и разрешить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | CONTR† | Чтение регистра CONT (W ← CONT) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ж | IOR ж† | Скопируйте регистр управления вводом / выводом в W (ж = 5–7, 11–15) | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | TBL† | C | Z | PCL + = W, сохранить PC-биты 8 и 9 |
0 | 0 | код операции | d | регистр | Операции ALU такие же, как у 12- и 14-битных PIC | |||||||||||
0 | 1 | opc | кусочек | регистр | Битовые операции такие же, как у 12- и 14-битных PIC | |||||||||||
1 | 0 | c | k | Передача управления такая же, как у 14-битного PIC | ||||||||||||
1 | 1 | код операции | 8-битный немедленный | Операции с W и 8-битным литералом: W ← OP (k, W) | ||||||||||||
1 | 1 | 0 | op | k | MOV / IOR / AND / XOR, то же, что и 12-битный PIC | |||||||||||
1 | 1 | 1 | 0 | 0 | k | RETLW k | W ← k, затем вернуться из подпрограммы | |||||||||
1 | 1 | 1 | 0 | 1 | k | SUBLW k | C | Z | W ← k − W (W ← k + ~ W + 1) | |||||||
1 | 1 | 1 | 1 | 0 | 0 | k | INT k† | Push PC, PC ← k (программное прерывание, обычно k = 1) | ||||||||
1 | 1 | 1 | 1 | 1 | k | ADDLW k | C | Z | W ← k + W | |||||||
1 | 1 | 1 | 1 | 0 | 1 | код операции | k | Расширения (заменяющие INT k за k≥128 на более поздних моделях)[4][5][6] | ||||||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | k | СТРАНИЦА k | Выберите страницу ROM k (как MOVLP k) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | k | БАНК k† | Выберите банк RAM k | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | k | LCALL k† | Длинный звонок с 17-битным адресом (инструкция из 2 слов) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | k | LJMP k† | Переход в длину с 17-битным адресом (инструкция из 2 слов) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 1 | ж | TBRD ж† | Чтение ПЗУ в TBHP: TBLP в указанный регистр | |||||||
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
*: Тот же код операции, что и для 12-битного PIC
†: инструкция, уникальная для набора инструкций EM78 без эквивалента PIC
Некоторые модели поддерживают несколько банков ПЗУ или ОЗУ, как и другие микроконтроллеры PIC.
Существует также 15-битный вариант набора команд, который почти идентичен, за исключением того, что номера регистров увеличены до 8 бит, а адреса вызова и перехода увеличены до 12 бит. Прочие отличия:[7]
- Инструкции CONTW, IOW, CONTR, IOR и INT удаляются,
- Операции с 8-битным литералом имеют два 0 бита, добавленные как биты 8 и 9,
- Расширения с 4-битным литералом имеют два нулевых бита, добавленных как биты 4 и 5, и
- Инструкции PAGE и BANK переименовываются в SBANK и GBANK и выполняют переключение банка в регистрах специальных функций и ОЗУ общего назначения, соответственно.
Набор 15-битных инструкций второго поколения включает несколько дополнительных инструкций:
1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP* | Нет работы (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | DAA* | C | Десятичная корректировка после сложения | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | СОН* | Перейти в режим ожидания (WDT ← 0, остановить часы) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | WDTC* | Перезапустить сторожевой таймер (WDT ← 0) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | MULW† | 8 × 8 → 16-битное умножение | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | DIVW† | 8 ÷ 8 → 8,8-битное деление | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ENI* | Разрешить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | DISI* | Отключить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | RET* | Возврат из подпрограммы, W без изменений | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | РЕТИ* | Возврат из прерывания; вернуть и разрешить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | ПЕРЕЗАГРУЗИТЬ | Сброс программного обеспечения | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | TBWR | Запись Flash ROM | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | k | INT k | Программное прерывание по адресу 2 × k | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | кусочек | ж | BTG ж,б | Инвертировать (переключить) бит b из f (ограниченный диапазон адресов) | |||||||
0 | 0 | код операции | d | регистр | Операции ALU такие же, как у EM78 и PIC | |||||||||||||
0 | 1 | opc | кусочек | регистр | Битовые операции такие же, как у EM78 и PIC | |||||||||||||
1 | 0 | c | k | Передача управления такая же, как у EM78 и 14-битного PIC | ||||||||||||||
1 | 1 | код операции | 0 | 0 | 8-битный немедленный | Операции с 8-битным литералом такие же, как у EM78 (кроме INT) | ||||||||||||
1 | 1 | код операции | зарегистрироваться или немедленно | Расширения набора инструкций | ||||||||||||||
1 | 1 | 0 | 0 | 0 | 0 | 1 | ж | JE р | Пропустить, если W = f | |||||||||
1 | 1 | 0 | 0 | 0 | 1 | 0 | ж | JGE р | Пропустить, если W> f | |||||||||
1 | 1 | 0 | 0 | 0 | 1 | 1 | ж | JLE р | Пропустить, если W | |||||||||
1 | 1 | 0 | 0 | 1 | 0 | 1 | k | JE k | Пропустить, если W = k | |||||||||
1 | 1 | 0 | 0 | 1 | 1 | 0 | k | (зарезервированный) | ||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | ж | TBRDA ж | Прочитать ROM в TBHP: TBLP в f; мбит в W | |||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | k | SJC адрес | Перейти на ПК + секст (k) если переносить | |||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | k | SJNC адрес | Перейти на ПК + секст (k) если несут ясно | |||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | k | SJZ адрес | Перейти на ПК + секст (k) если установлен нулевой флаг | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 1 | k | SJNZ адрес | Перейти на ПК + секст (k) если нулевой флаг снят | |||||||||
1 | 1 | 0 | 1 | 1 | 1 | d | ж | RR ж/ RRA | dest ← f << 7 | f >> 1, повернуть вправо без переноса | |||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | ж | XCH ж | Обмен f ↔ W | |||||||||
1 | 1 | 1 | 0 | 0 | 1 | d | ж | RL ж/ RLA | dest ← f << 1 | f >> 7, повернуть влево без переноса | |||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | ж | MUL ж‡ | PRODH: PRODL ← f × W | |||||||||
1 | 1 | 1 | 0 | 1 | 1 | Икс | k | (зарезервированный) | ||||||||||
1 | 1 | 1 | 1 | 0 | 0 | d | ж | SUBB | C | Z | dest ← f + ~ W + C, вычесть с переносом | |||||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | СБАНК k* | Выбрать банк регистров специальных функций k | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | k | GBANK k* | Выберите банк RAM k | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | k | LCALL k* | Длинный звонок с 19-битным адресом (инструкция из 2 слов) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | k | LJMP k* | Переход в длину с 19-битным адресом (инструкция из 2 слов) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 1 | ж | TBRD ж* | Прочтите ROM на TBHP: TBLP в f | |||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | ж | NEG ж | C | Z | f ← −f (f ← ~ f + 1), отрицать | |||||||
1 | 1 | 1 | 1 | 1 | 1 | d | ж | АЦП ж | C | Z | dest ← f + W + C, добавить с переносом |
*: Тот же код операции, что и 13-битный EM78
†: только на EM89F768N; операнды и результаты в специальных регистрах
‡: Только на EM88F794N, MTF213 и MTF351
Базовые устройства среднего уровня (14 бит)
Эти устройства имеют 14-битную кодовую память и улучшенный 8-уровневый стек вызовов. Набор команд очень мало отличается от базовых устройств, но 2 дополнительных бита кода операции позволяют напрямую адресовать 128 регистров и 2048 слов кода. Есть несколько дополнительных различных инструкций и две дополнительные 8-битные буквальные инструкции сложения и вычитания. Ядро среднего уровня доступно в большинстве устройств с маркировкой PIC12 и PIC16.
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Нет работы (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | ВОЗВРАЩАТЬСЯ | Возврат из подпрограммы, W без изменений | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | РЕТФИ | Возврат из прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | ВАРИАНТ | Скопируйте W в регистр OPTION (не рекомендуется) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | СПАТЬ | Перейти в режим ожидания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Перезапустить сторожевой таймер | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | ж | ТРИС ж | Скопируйте W в трехсторонний регистр (ж = 1, 2 или 3) (не рекомендуется) | |||
0 | 0 | код операции | d | регистр | Операции ALU: dest ← OP (f, W) | ||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | ж | MOVWF ж | f ← W | ||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | ж | CLR ж,d | Z | dest ← 0, обычно пишется CLRW или CLRF ж | |||||||
0 | 0 | 0 | 0 | 1 | 0 | d | ж | SUBWF ж,d | C | Z | dest ← f − W (dest ← f + ~ W + 1) | ||||||
0 | 0 | 0 | 0 | 1 | 1 | d | ж | DECF ж,d | Z | dest ← f − 1 | |||||||
0 | 0 | 0 | 1 | 0 | 0 | d | ж | IORWF ж,d | Z | dest ← f | W, включающее логическое или | |||||||
0 | 0 | 0 | 1 | 0 | 1 | d | ж | ANDWF ж,d | Z | dest ← f & W, логический и | |||||||
0 | 0 | 0 | 1 | 1 | 0 | d | ж | XORWF ж,d | Z | dest ← f ^ W, логическое исключающее или | |||||||
0 | 0 | 0 | 1 | 1 | 1 | d | ж | ADDWF ж,d | C | Z | dest ← f + W | ||||||
0 | 0 | 1 | 0 | 0 | 0 | d | ж | MOVF ж,d | Z | dest ← f | |||||||
0 | 0 | 1 | 0 | 0 | 1 | d | ж | КОМФ ж,d | Z | dest ← ~ f, поразрядное дополнение | |||||||
0 | 0 | 1 | 0 | 1 | 0 | d | ж | INCF ж,d | Z | dest ← f + 1 | |||||||
0 | 0 | 1 | 0 | 1 | 1 | d | ж | DECFSZ ж,d | dest ← f − 1, пропустить, если ноль | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | d | ж | RRF ж,d | C | dest ← ПЕРЕНОСИТЬ << 7 | f >> 1, вращение вправо через перенос | |||||||
0 | 0 | 1 | 1 | 0 | 1 | d | ж | RLF ж,d | C | dest ← f << 1 | ПЕРЕНОСИТЬ, повернуть влево через перенос | |||||||
0 | 0 | 1 | 1 | 1 | 0 | d | ж | SWAPF ж,d | dest ← f << 4 | f >> 4, поменять местами полубайты | ||||||||
0 | 0 | 1 | 1 | 1 | 1 | d | ж | INCFSZ ж,d | dest ← f + 1, пропустить, если ноль | ||||||||
0 | 1 | opc | кусочек | регистр | Битовые операции | ||||||||||||
0 | 1 | 0 | 0 | кусочек | ж | BCF ж,б | Очистить бит b из f | ||||||||||
0 | 1 | 0 | 1 | кусочек | ж | BSF ж,б | Установить бит b из f | ||||||||||
0 | 1 | 1 | 0 | кусочек | ж | BTFSC ж,б | Пропустить, если бит b из f очищен | ||||||||||
0 | 1 | 1 | 1 | кусочек | ж | BTFSS ж,б | Пропустить, если установлен бит b функции f | ||||||||||
1 | 0 | c | k | Контрольные переводы | |||||||||||||
1 | 0 | 0 | k | ВЫЗОВ k | Подпрограмма вызова | ||||||||||||
1 | 0 | 1 | k | ИДТИ К k | Перейти к адресу k | ||||||||||||
1 | 1 | код операции | 8-битный немедленный | Операции с W и 8-битным литералом: W ← OP (k, W) | |||||||||||||
1 | 1 | 0 | 0 | Икс | Икс | k | MOVLW k | W ← k | |||||||||
1 | 1 | 0 | 1 | Икс | Икс | k | RETLW k | W ← k, затем вернуться из подпрограммы | |||||||||
1 | 1 | 1 | 0 | 0 | 0 | k | IORLW k | Z | W ← k | W, побитовое логическое или | ||||||||
1 | 1 | 1 | 0 | 0 | 1 | k | ANDLW k | Z | W ← k & W, побитовое и | ||||||||
1 | 1 | 1 | 0 | 1 | 0 | k | XORLW k | Z | W ← k ^ W, побитовое исключающее или | ||||||||
1 | 1 | 1 | 0 | 1 | 1 | k | (зарезервированный) | ||||||||||
1 | 1 | 1 | 1 | 0 | Икс | k | SUBLW k | C | Z | W ← k − W (назначение ← k + ~ W + 1) | |||||||
1 | 1 | 1 | 1 | 1 | Икс | k | ADDLW k | C | Z | W ← k + W | |||||||
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
Усовершенствованные базовые устройства среднего уровня (14 бит)
Усовершенствованные базовые устройства среднего уровня включают более глубокий аппаратный стек, дополнительные методы сброса, 14 дополнительных инструкций и Язык программирования C оптимизации.[10] Особенно. есть два Регистры INDF
(INDF0
и INDF1
), и два соответствующих FSR
регистровые пары (FSRпL
и FSRпЧАС
). Особые инструкции по применению FSRп
регистры, такие как регистры адресов, с различными режимы адресации.
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ПЕРЕЗАГРУЗИТЬ | Сброс программного обеспечения | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | CALLW | Нажмите PC, затем перейдите к PCLATH: W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | BRW | ПК ← ПК + W, относительный прыжок с помощью W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | п | 0 | 0 | MOVIW ++ FSRп | Z | Приращение FSRп, то W ← INDFп | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | п | 0 | 1 | MOVIW −−FSRп | Z | Уменьшение FSRп, то W ← INDFп | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | п | 1 | 0 | MOVIW FSRп++ | Z | W ← INDFп, затем увеличить FSRп | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | п | 1 | 1 | MOVIW FSRп−− | Z | W ← INDFп, затем уменьшаем FSRп | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | п | м | MOVWI с использованием FSRп | INDFп ← W, те же режимы, что и MOVIW | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | k | MOVLB k | BSR ← k, переместить литерал в регистр выбора банка | ||||||
1 | 1 | код операции | d | регистр | Операции ALU: dest ← OP (f, W) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | d | ж | LSLF ж,d | C | Z | dest ← ж << 1, логический сдвиг влево | ||||||
1 | 1 | 0 | 1 | 1 | 0 | d | ж | LSRF ж,d | C | Z | dest ← ж >> 1, логический сдвиг вправо | ||||||
1 | 1 | 0 | 1 | 1 | 1 | d | ж | ASRF ж,d | C | Z | dest ← ж >> 1, арифметический сдвиг вправо | ||||||
1 | 1 | 1 | 0 | 1 | 1 | d | ж | SUBWFB ж,d | C | Z | dest ← ж + ~ W + C, вычесть с переносом | ||||||
1 | 1 | 1 | 1 | 0 | 1 | d | ж | ADDWFC ж,d | C | Z | dest ← ж + W + C, добавить с переносом | ||||||
1 | 1 | код операции | k | Операции с буквальным k | |||||||||||||
1 | 1 | 0 | 0 | 0 | 1 | 0 | п | k | ADDFSR FSRп,k | FSRп ← FSRп + k, добавить 6-битное смещение со знаком | |||||||
1 | 1 | 0 | 0 | 0 | 1 | 1 | k | MOVLP k | PCLATH ← k, переместить 7-битный литерал в высокий уровень защелки ПК | ||||||||
1 | 1 | 0 | 0 | 1 | k | БЮСТГАЛЬТЕР k | PC ← PC + k, относительная ветвь с использованием 9-битного смещения со знаком | ||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | п | k | MOVIW k[FSRп] | Z | W ← [FSRп+k], 6-битное смещение со знаком | ||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | п | k | MOVWI k[FSRп] | [FSRп+k] ← W, 6-битное смещение со знаком | |||||||
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | Описание |
Клоны Holtek (14 или 16 бит)
Холтек создавать многочисленные 8-битные микроконтроллеры с 14-битным командным словом, эквивалентным (не расширенному) ядру среднего уровня. Все кодировки команд умещаются в 14 бит и обеспечивают 7-битные адреса операндов, но модели с 4K или 8K слов программного ПЗУ предоставляют 15- или 16-битное ПЗУ и расширяют базовый 11-битный адрес назначения, используя биты 14-15 инструкция как биты 11–12 адреса. Некоторые модели расширяют 7-битные адреса ОЗУ, используя бит 14 инструкции как бит 7 адреса операнда.
Формат команд идентичен формату Microchip, но коды операций назначаются в другом порядке, а производитель использует другую мнемонику команд. Аккумулятор называется ACC, а не W, и место назначения указывается суффиксом мнемоники инструкции, а не операндом.
Помимо назначения кода операции, есть семантические различия в нескольких инструкциях:
- Команды вычитания вычитают операнд из аккумулятора, а команды вычитания Microchip делают обратное. (Это делает команду немедленного вычитания излишней, так как это эквивалентно сложению отрицательного числа.)
- Инструкции перехода к аккумулятору и очистки не изменяют никаких флагов.
В репертуар 14-битного PICmicro добавлено несколько операций:
- Поверните на один бит влево и вправо без нести,
- Установить операнд на все единицы,
- Пропустить, если операнд равен нулю (без предварительного увеличения или уменьшения),
- Сложить и вычесть с переносом,
- Десятичная корректировка после сложения, для двоично-десятичный код арифметика и
- Чтение из ПЗУ программы для поиска в таблице. Он использует регистры TBHP и TBLP в качестве 16-битного указателя, выбирает слово и сохраняет младший байт в указанном месте. Старшие 6–8 битов выбранного слова хранятся в регистре TBLH. Вторая форма использует только TBLP и читает с самой высокой 256-байтовой страницы в ПЗУ.
- Большинство моделей поддерживают вторую инструкцию для сброса сторожевого таймера, которая должна чередоваться с первой; повторения одной инструкции игнорируются. Это позволяет запускать две независимые программы сторожевого таймера, и отказ любой из них запускает сторожевой таймер.
- Holtek предоставляет два регистра косвенной адресации, например, улучшенный 14-битный PIC. Некоторые модели (например, HT66F70A) имеют три.
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | PIC экв. | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | ||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | NOP | Нет операции (MOV A, A) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | CLR WDT1 | CLRWDT | Перезапустить сторожевой таймер | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | HALT | СПАТЬ | Перейти в режим пониженного энергопотребления | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | RET | ВОЗВРАЩАТЬСЯ | Возврат из подпрограммы | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | РЕТИ | РЕТФИ | Возврат из прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | CLR WDT2 | — | Перезапустить сторожевой таймер | ||
0 | 0 | код операции | d | адрес | Операции ALU: dest ← OP (ACC, [m]) | |||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | м | MOV [м], А | MOVWF м | [м] ← ACC | ||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | м | CPLA / CPL [м] | КОМФ м,d | Z | dest ← ~ [m], поразрядное дополнение | |||||||
0 | 0 | 0 | 0 | 1 | 0 | d | м | ПОД / ПОДМ А, [м] | ≠ SUBWF м,d | C | Z | пункт назначения ← ACC - [m] (пункт назначения ← ACC + ~ [m] +1) | ||||||
0 | 0 | 0 | 0 | 1 | 1 | d | м | ДОБАВИТЬ / ДОБАВИТЬ A, [м] | ADDWF м,d | C | Z | dest ← ACC + [м] | ||||||
0 | 0 | 0 | 1 | 0 | 0 | d | м | XORA / XOR [м] | XORWF м,d | Z | dest ← ACC ^ [m], логическое исключающее или | |||||||
0 | 0 | 0 | 1 | 0 | 1 | d | м | ORA / OR [м] | IORWF м,d | Z | dest ← ACC | [m], логический включающий или | |||||||
0 | 0 | 0 | 1 | 1 | 0 | d | м | ANDA / И [м] | ANDWF м,d | Z | dest ← ACC & [m], логический и | |||||||
0 | 0 | 0 | 1 | 1 | 1 | 0 | м | MOV A, [м] | ≈MOVF м,0 | ACC ← [м] | ||||||||
0 | 0 | 0 | 1 | 1 | 1 | 1 | м | — | ≈MOVF м,1 | [м] ← [м] | ||||||||
0 | 0 | 1 | код операции | 8-битный немедленный | Операции с 8-битным литералом: ACC ← OP (ACC, k) | |||||||||||||
0 | 0 | 1 | 0 | 0 | 0 | k | (зарезервированный) | |||||||||||
0 | 0 | 1 | 0 | 0 | 1 | k | RET A,k | RETLW k | ACC ← k, затем вернуться из подпрограммы | |||||||||
0 | 0 | 1 | 0 | 1 | 0 | k | SUB A,k | ≠ SUBLW k | C | Z | ACC ← ACC - k (ACC ← ACC + ~ k + 1) | |||||||
0 | 0 | 1 | 0 | 1 | 1 | k | ДОБАВИТЬ,k | ADDLW k | C | Z | АКК ← АКК + К | |||||||
0 | 0 | 1 | 1 | 0 | 0 | k | XOR A,k | XORLW k | Z | ACC ← ACC ^ k, логическое исключающее ИЛИ | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | k | ИЛИ А,k | IORLW k | Z | ACC ← ACC | k, логический включающий или | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | k | И А,k | ANDLW k | Z | ACC ← ACC & k, логические и | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | k | MOV A,k | MOVLW k | АКК ← k | |||||||||
0 | 1 | код операции | d | адрес | Операции ALU: dest ← OP (ACC, [m]) | |||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | d | м | SZA / SZ [м] | — | dest ← [m], пропустить следующую инструкцию, если ноль | ||||||||
0 | 1 | 0 | 0 | 0 | 1 | d | м | СВОП / СВОП [м] | SWAPF м,d | dest ← [m] << 4 | [m] >> 4, поменять местами полубайты | ||||||||
0 | 1 | 0 | 0 | 1 | 0 | d | м | SBC / SBCM A, [м] | ≠ SUBWFB м,d | C | Z | dest ← ACC + ~ [m] + C, вычесть с переносом | ||||||
0 | 1 | 0 | 0 | 1 | 1 | d | м | АЦП / АЦП А, [м] | ADDWFC м,d | C | Z | dest ← ACC + [m] + C, добавить с переносом | ||||||
0 | 1 | 0 | 1 | 0 | 0 | d | м | INCA / INC [м] | INCF м,d | Z | dest ← [m] + 1 | |||||||
0 | 1 | 0 | 1 | 0 | 1 | d | м | DECA / DEC [м] | DECF м,d | Z | dest ← [m] - 1 | |||||||
0 | 1 | 0 | 1 | 1 | 0 | d | м | РАЗМЕР / РАЗМЕР [м] | INCFSZ м,d | dest ← [m] + 1, пропустить, если ноль | ||||||||
0 | 1 | 0 | 1 | 1 | 1 | d | м | SDZA / SDZ [м] | DECFSZ м,d | dest ← [m] - 1, пропустить, если ноль | ||||||||
0 | 1 | 1 | 0 | 0 | 0 | d | м | RLA / RL [м] | — | dest ← [m] << 1 | м >> 7, повернуть влево на 1 бит | ||||||||
0 | 1 | 1 | 0 | 0 | 1 | d | м | RRA / RR [м] | — | dest ← [m] << 7 | м >> 1, повернуть вправо на 1 бит | ||||||||
0 | 1 | 1 | 0 | 1 | 0 | d | м | RLCA / RLC [м] | RLF м,d | C | dest ← [m] << 1 | C, повернуть влево через перенос | |||||||
0 | 1 | 1 | 0 | 1 | 1 | d | м | RRCA / RRC [м] | RRF м,d | C | dest ← C << 7 | [m] >> 1, повернуть вправо через перенос | |||||||
0 | 1 | 1 | 1 | код операции | адрес | Отдельные операции: [м] ← специальные | ||||||||||||
0 | 1 | 1 | 1 | 0 | 0 | Икс | м | (зарезервированный) | ||||||||||
0 | 1 | 1 | 1 | 0 | 1 | 0 | м | TABRDC [м] | — | TBLH: [m] ← ПЗУ на TBHP: TBLP, поиск в таблице | ||||||||
0 | 1 | 1 | 1 | 0 | 1 | 1 | м | TABRDL [м] | — | Прочитать с последней страницы ПЗУ по адресу 0xff: TBLP | ||||||||
0 | 1 | 1 | 1 | 1 | 0 | 0 | м | (зарезервированный) | ||||||||||
0 | 1 | 1 | 1 | 1 | 0 | 1 | м | DAA [м] | — | C | [m] ← DAA (ACC), десятичная корректировка после добавления BCD | |||||||
0 | 1 | 1 | 1 | 1 | 1 | 0 | м | CLR [м] | ≈CLRF м | [м] ← 0 | ||||||||
0 | 1 | 1 | 1 | 1 | 1 | 1 | м | НАБОР [м] | — | [м] ← 255 | ||||||||
1 | 0 | c | k | Контрольные переводы | ||||||||||||||
1 | 0 | 0 | k | ВЫЗОВ k | ВЫЗОВ k | Подпрограмма вызова | ||||||||||||
1 | 0 | 1 | k | JMP k | ИДТИ К k | Перейти к адресу k | ||||||||||||
1 | 1 | opc | кусочек | адрес | Битовые операции | |||||||||||||
1 | 1 | 0 | 0 | кусочек | м | НАБОР [м].б | BSF м,б | Установить бит b [m] | ||||||||||
1 | 1 | 0 | 1 | кусочек | м | CLR [м].б | BCF м,б | Очистить бит b [m] | ||||||||||
1 | 1 | 1 | 0 | кусочек | м | SNZ [м].б | BTFSS м,б | Пропустить, если установлен бит b [m] | ||||||||||
1 | 1 | 1 | 1 | кусочек | м | SZ [м].б | BTFSC м,б | Пропустить, если бит b [m] очищен | ||||||||||
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | PIC экв. | C ? | Z ? | Описание |
Микроконтроллеры Padauk (13, 14, 15 или 16 бит)
Padauk Technology Co., Ltd. сделать серию PIC-подобных микроконтроллеров, отличающихся чрезвычайно низкой стоимостью, начиная с 0,033 доллара США в количестве,[12] многие модели стоят меньше 0,10 доллара США.[13]
Хотя очевидно, что это происходит из PIC, есть некоторые существенные различия:
- Они не используют механизм FSR / INDF для выполнения косвенного доступа к памяти, вместо этого имеют инструкции косвенной загрузки и сохранения, которые используют произвольное расположение ОЗУ в качестве указателя;
- они используют стек вызовов на основе RAM с регистром указателя стека;
- то нести флаг использует соглашение о «битах заимствования» для вычитания, а не соглашение о «битах переноса», используемое Microchip;
- они также включают подписанный флаг переполнения, который, как и перенос цифр, устанавливается командами сложения, вычитания и сравнения (каждая инструкция, которая устанавливает флаг переноса Кроме для смены инструкций);
- у них есть отдельные адресные пространства ОЗУ и регистров ввода / вывода (64 и 32 байта соответственно в 13-битном наборе команд);
- битовые операции ограничены пространством ввода-вывода и первыми 16 адресами RAM;
- однооперандные инструкции с источником памяти и назначением аккумулятора опускаются;
- предоставляются однооперандные инструкции с источником и получателем аккумулятора;
- операции вычитания вычисляют назначение - источник, обменивая входные операнды в зависимости от назначения;
- они работают быстрее, требуя 1 цикла для большинства инструкций и 2 цикла для передачи управления; и
- некоторые модели поддерживают временная многопоточность, имеющий несколько контекстов выполнения, выполнение которых чередуется.
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | ПОС эквивалент | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | NOP | Нет операции | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | (зарезервированный) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Икс | (зарезервированный) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | Икс | (зарезервированный) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | ЛДСПТЛ | — | A ← ROM [[SP]], загрузка младшего / старшего байта слова ROM с использованием 16-битного указателя поверх стека | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ЛДСПТН | — | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (зарезервированный) | ||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | код операции | Однооперандные инструкции для аккумулятора То же, что и инструкции с одним операндом для памяти (ниже), за исключением | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | PCADD A | ≈ADDWF PCL, 1 | ПК ← ПК + A, добавить в счетчик программ | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | СВОП А | — | A ← A << 4 | A >> 4, поменять местами полубайты | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (зарезервированный) | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | код операции | Инструкции по управлению системой | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | WDRESET | CLRWDT | Перезапустить сторожевой таймер | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | (зарезервированный) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | ПУШАФ | — | Нажмите A, затем отметьте флагом наверху стека | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | ПОПАФ | — | C | Z | Выдвигайте флаги, затем A сверху стека |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | (зарезервированный) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | ПЕРЕЗАГРУЗИТЬ | ПЕРЕЗАГРУЗИТЬ | Сброс программного обеспечения | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | СТОПСИС | СПАТЬ | Перейти в режим ожидания (часы остановлены) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | СТОПЕКС | — | Перейти в режим ожидания (часы идут) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | ДВИГАТЕЛЬ | BSF INTCON, GIE | Разрешить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | DISGINT | BCF INTCON, GIE | Отключить прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | RET | ВОЗВРАЩАТЬСЯ | Возврат из подпрограммы, без изменений | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | РЕТИ | РЕТФИ | Возврат из прерывания | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | MUL | — | MULRH: A ← A × MULOP (не для всех моделей) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | (зарезервированный) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | Икс | (зарезервированный) | ||||
0 | 0 | 0 | 0 | 0 | код операции | ioaddr | Байтовые операции ввода-вывода | ||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | ioaddr | XOR ioaddr, А | — | IO [ioaddr] ← A ^ IO [адрес] | ||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | ioaddr | MOV ioaddr, А | — | IO [ioaddr] ← A | ||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | ioaddr | MOV A,ioaddr | — | Z | A ← IO [ioaddr] | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | c | адрес | c | 16-битные операции (даже адрес ОЗУ ограничен) | |||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | адрес | 0 | STT16 адрес | — | Timer16 ← [адрес] | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | адрес | 1 | LDT16 адрес | — | [адрес] ← Таймер16 | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | адрес | 0 | IDXM адрес, А | — | [[адрес]] ← A, косвенный адрес памяти | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | адрес | 1 | IDXM A,адрес | — | A ← [[адрес]], косвенный адрес памяти | |||||
0 | 0 | 0 | 0 | 1 | k | Вернуть буквальную константу | |||||||||||
0 | 0 | 0 | 0 | 1 | k | RET k | RETLW k | A ← k, затем вернитесь из подпрограммы | |||||||||
0 | 0 | 0 | 1 | c | кусочек | c | адрес | Битовые операции с ОЗУ (только первые 16 байт) | |||||||||
0 | 0 | 0 | 1 | 0 | кусочек | 0 | адрес | T0SN адрес.б | BTFSC адрес,б | Пропустить, если бит б из [адрес] чисто | |||||||
0 | 0 | 0 | 1 | 0 | кусочек | 1 | адрес | T1SN адрес.б | BTFSS адрес,б | Пропустить, если бит б из [адрес] установлен | |||||||
0 | 0 | 0 | 1 | 1 | кусочек | 0 | адрес | SET0 адрес.б | BCF адрес,б | Очистить бит б из [адрес] | |||||||
0 | 0 | 0 | 1 | 1 | кусочек | 1 | адрес | SET1 адрес.б | BSF адрес,б | Установить бит б из [адрес] | |||||||
0 | 0 | 1 | d | код операции | адрес | Операции ALU между A и памятью | |||||||||||
0 | 0 | 1 | 0 | 0 | 0 | 0 | адрес | ДОБАВИТЬ адрес, А | ADDWF адрес,1 | C | Z | [адрес] ← [адрес] + A | |||||
0 | 0 | 1 | 0 | 0 | 0 | 1 | адрес | SUB адрес, А | SUBWF адрес,1 | C | Z | [адрес] ← [адрес] - А | |||||
0 | 0 | 1 | 0 | 0 | 1 | 0 | адрес | ADDCадрес, А | ADDWFC адрес,1 | C | Z | [адрес] ← [адрес] + A + C | |||||
0 | 0 | 1 | 0 | 0 | 1 | 1 | адрес | SUBCадрес, А | ≈SUBWFBадрес,1 | C | Z | [адрес] ← [адрес] - А - С | |||||
0 | 0 | 1 | 0 | 1 | 0 | 0 | адрес | И адрес, А | ANDWF адрес,1 | Z | [адрес] ← [адрес] & A, логический и | ||||||
0 | 0 | 1 | 0 | 1 | 0 | 1 | адрес | ИЛИ ЖЕ адрес, А | IORWF адрес,1 | Z | [адрес] ← [адрес] | A, логический включающий или | ||||||
0 | 0 | 1 | 0 | 1 | 1 | 0 | адрес | XOR адрес, А | XORWF адрес,1 | Z | [адрес] ← [адрес] ^ A, логическое исключающее или | ||||||
0 | 0 | 1 | 0 | 1 | 1 | 1 | адрес | MOV адрес, А | MOVWF адрес | [адрес] ← A | |||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | адрес | ДОБАВИТЬ,адрес | ADDWF адрес,0 | C | Z | A ← A + [адрес] | |||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | адрес | SUB A,адрес | ≠ SUBWF адрес,0 | C | Z | A ← A - [адрес] | |||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | адрес | ADDC A,адрес | ADDWFC адрес,0 | C | Z | A ← A + [адрес] + C | |||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | адрес | SUBC A,адрес | ≠ SUBWFBадрес,0 | C | Z | A ← A - [адрес] - C | |||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | адрес | И А,адрес | ANDWF адрес,0 | Z | A ← [A] и [адрес], логичный и | ||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | адрес | ИЛИ А,адрес | IORWF адрес,0 | Z | A ← A | [адрес], логическое включающее или | ||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | адрес | XOR A,адрес | XORWF адрес,0 | Z | A ← A ^ [адрес], логическое исключающее или | ||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | адрес | MOV A,адрес | MOVF адрес,0 | Z | A ← [адрес] | ||||||
0 | 1 | 0 | код операции | адрес | Однооперандные операции с памятью | ||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | адрес | ADDC адрес | — | C | Z | [адрес] ← [адрес] + C | |||||
0 | 1 | 0 | 0 | 0 | 0 | 1 | адрес | SUBC адрес | — | C | Z | [адрес] ← [адрес] - C | |||||
0 | 1 | 0 | 0 | 0 | 1 | 0 | адрес | ИЗСН адрес | INCFSZ адрес,1 | C | Z | [адрес] ← [адрес] + 1, пропустить, если ноль | |||||
0 | 1 | 0 | 0 | 0 | 1 | 1 | адрес | ДЗСН адрес | DECFSZ адрес,1 | C | Z | [адрес] ← [адрес] - 1, пропустить, если ноль | |||||
0 | 1 | 0 | 0 | 1 | 0 | 0 | адрес | INC адрес | INCF адрес,1 | C | Z | [адрес] ← [адрес] + 1 | |||||
0 | 1 | 0 | 0 | 1 | 0 | 1 | адрес | DEC адрес | DECF адрес,1 | C | Z | [адрес] ← [адрес] − 1 | |||||
0 | 1 | 0 | 0 | 1 | 1 | 0 | адрес | ЧИСТО адрес | ≈CLRF адрес | [адрес] ← 0 | |||||||
0 | 1 | 0 | 0 | 1 | 1 | 1 | адрес | XCH адрес | — | A ← [адрес], [адрес] ← A | |||||||
0 | 1 | 0 | 1 | 0 | 0 | 0 | адрес | НЕТ адрес | КОМФ адрес,1 | Z | [адрес] ← ~[адрес], поразрядное дополнение | ||||||
0 | 1 | 0 | 1 | 0 | 0 | 1 | адрес | NEG адрес | — | Z | [адрес] ← −[адрес], отрицать | ||||||
0 | 1 | 0 | 1 | 0 | 1 | 0 | адрес | SR адрес | ≈LSRF адрес,1 | C | [адрес] ← [адрес] >> 1, логический сдвиг вправо | ||||||
0 | 1 | 0 | 1 | 0 | 1 | 1 | адрес | SL адрес | ≈LSLF адрес,1 | C | [адрес] ← [адрес] << 1, сдвиг влево | ||||||
0 | 1 | 0 | 1 | 1 | 0 | 0 | адрес | SRC адрес | RRF адрес,1 | C | [адрес] ← C << 7 | [адрес] >> 1, повернуть вправо через перенос | ||||||
0 | 1 | 0 | 1 | 1 | 0 | 1 | адрес | SLC адрес | RLF адрес,1 | C | [адрес] ← [адрес] << 1 | C, повернуть влево через перенос | ||||||
0 | 1 | 0 | 1 | 1 | 1 | 0 | адрес | CEQSN адрес | — | C | Z | Вычислить A - [адрес], то пропускаем, если ноль | |||||
0 | 1 | 0 | 1 | 1 | 1 | 1 | адрес | (зарезервированный) | |||||||||
0 | 1 | 1 | opc | кусочек | адрес | Битовые операции с вводом / выводом | |||||||||||
0 | 1 | 1 | 0 | 0 | кусочек | адрес | T0SNioaddr.б | BTFSC ioaddr,б | Пропустить, если бит б из [ioaddr] чисто | ||||||||
0 | 1 | 1 | 0 | 1 | кусочек | адрес | T1SNioaddr.б | BTFSS ioaddr,б | Пропустить, если бит б из [ioaddr] установлен | ||||||||
0 | 1 | 1 | 1 | 0 | кусочек | адрес | SET0 ioaddr.б | BCF ioaddr,б | Очистить бит б из [ioaddr] | ||||||||
0 | 1 | 1 | 1 | 1 | кусочек | адрес | SET1 ioaddr.б | BSF ioaddr,б | Установить бит б из [ioaddr] | ||||||||
1 | 0 | код операции | буквальный | Буквальные операции: A ← OP (A,k) | |||||||||||||
1 | 0 | 0 | 0 | 0 | k | ДОБАВИТЬ,k | ADDLW k | C | Z | A ← A + k | |||||||
1 | 0 | 0 | 0 | 1 | k | SUB A,k | ≠ SUBLW k | C | Z | A ← A - k | |||||||
1 | 0 | 0 | 1 | 0 | k | CEQSN A,k | — | C | Z | Вычислить A - k, то пропускаем, если ноль | |||||||
1 | 0 | 0 | 1 | 1 | k | (зарезервированный) | |||||||||||
1 | 0 | 1 | 0 | 0 | k | И А,k | ≈ANDLW k | Z | A ← A & k | ||||||||
1 | 0 | 1 | 0 | 1 | k | ИЛИ А,k | ≈IORLW k | Z | A ← A | k | ||||||||
1 | 0 | 1 | 1 | 0 | k | XOR A,k | ≈XORLW k | Z | A ← A ^ k | ||||||||
1 | 0 | 1 | 1 | 1 | k | MOV A,k | MOVLW k | A ← k | |||||||||
1 | 1 | c | k | Управляющие передачи: ПК ← k | |||||||||||||
1 | 1 | 0 | k | ИДТИ К k | ИДТИ К k | ПК ← k | |||||||||||
1 | 1 | 1 | k | ВЫЗОВ k | ВЫЗОВ k | Нажмите ПК, затем ПК ← k | |||||||||||
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | ПОС эквивалент | C ? | Z ? | Описание |
Наборы 14-, 15- и 16-битных инструкций в основном отличаются наличием более широких полей адреса, хотя некоторые изменения кодировки сделаны, чтобы позволить несколько дополнительных инструкций (например, CNEQSN
, который выполняет сравнение и пропускает, если нет равный.)
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | ПОС эквивалент | C ? | Z ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Прочие инструкции такие же, как 13-битный | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (зарезервированный) | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (зарезервированный) | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (зарезервированный) | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | код операции | Инструкции с одним операндом на A такие же, как 13-битные | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | код операции | Инструкции по управлению системой такие же, как для 13-битных | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (зарезервированный) | |||||||||
0 | 0 | 0 | 0 | 0 | код операции | адрес | Операции ввода-вывода для байтов такие же, как для 13-битных, но коды операций изменены | |||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | ioaddr | XOR ioaddr, А | — | IO [ioaddr] ← A ^ IO [адрес] | |||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (зарезервированный) | ||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | ioaddr | MOV ioaddr, А | — | IO [ioaddr] ← A | |||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ioaddr | MOV A,ioaddr | — | Z | A ← IO [ioaddr] | ||||||
0 | 0 | 0 | 0 | 1 | 0 | k | Возвращает литеральную константу как 13-битную | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | c | адрес | c | 16-битные операции такие же, как 13-битные, но 128-байтовый диапазон | |||||||||
0 | 0 | 0 | 1 | 0 | кусочек | адрес | Копировать бит в I / O | |||||||||||
0 | 0 | 0 | 1 | 0 | кусочек | адрес | SWAPCioaddr.б | — | C | Обменять перенос с помощью [ioaddr] кусочек б | ||||||||
0 | 0 | 0 | 1 | 1 | c | d | адрес | Дополнительные операции с двумя операндами | ||||||||||
0 | 0 | 0 | 1 | 1 | 0 | 0 | адрес | КОМП А,адрес | — | C | Z | A - [адрес], флаги установлены, результат отброшен | ||||||
0 | 0 | 0 | 1 | 1 | 0 | 1 | адрес | КОМП адрес, А | — | C | Z | [адрес] - A, флаги установлены, результат отброшен | ||||||
0 | 0 | 0 | 1 | 1 | 1 | 0 | адрес | НАДД А,адрес | SUBWFадрес,0 | C | Z | A ← [адрес] + −A (A ← [адрес] + ~ A + 1) | ||||||
0 | 0 | 0 | 1 | 1 | 1 | 1 | адрес | НАДД адрес, А | — | C | Z | [адрес] ← A + - [адрес] ([адрес] ← A + ~ [адрес] + 1) | ||||||
0 | 0 | 1 | d | код операции | адрес | 2-операндные инструкции такие же, как 13-битные | ||||||||||||
0 | 1 | 0 | код операции | адрес | Операции с одним операндом в памяти такие же, как 13-битные, плюс CNEQSN | |||||||||||||
0 | 1 | 0 | 1 | 1 | 1 | 1 | адрес | CNEQSN адрес | — | C | Z | Вычислить A - [адрес], затем пропустить, если не ноль | ||||||
0 | 1 | 1 | opc | кусочек | ioaddr | Битовые операции с вводом / выводом такие же, как 13-битные | ||||||||||||
1 | 0 | 0 | opc | кусочек | адрес | Битовые операции с памятью такие же, как 13-битные, но с 64-байтовым диапазоном | ||||||||||||
1 | 0 | 1 | код операции | буквальный | Буквальные операции такие же, как 13-бит, плюс CNEQSN | |||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | k | CNEQSN A,k | — | C | Z | Вычислить A - k, то пропускаем, если не ноль | |||||||
1 | 1 | c | k | Передачи управления такие же, как 13-битные | ||||||||||||||
1 13 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | ПОС эквивалент | C ? | Z ? | Описание |
Высокопроизводительные базовые устройства PIC18 (16 бит)
В 2000 году Microchip представила архитектуру PIC18.[2] В отличие от 17-й серии, она оказалась очень популярной, в настоящее время в производстве находится большое количество вариантов устройств. В отличие от более ранних устройств, которые чаще всего программировались на ассемблере, C стал преобладающим языком разработки.[19]
PIC18 имеет 12-битное адресное пространство RAM, разделенное на 16 страниц по 256 байтов. 8-битный ж
поле определяет адрес в сочетании с а
бит и 4-битный регистр выбора банка (BSR
). Если а
= 0, BSR
игнорируется и ж
поле расширяется знаком до диапазона 0x000–0x07F (глобальная RAM) или 0xF80–0xFFF (регистры специальных функций). Если а
= 1, ж
поле расширяется BSR
для генерации 12-битного адреса.
PIC18 расширяет FSR
/INDF
Механизм, используемый в предыдущих процессорах PICmicro для косвенной адресации двумя способами:
Во-первых, он обеспечивает три регистры выбора файла. В FSRп
регистры имеют длину 12 бит (каждый разделен на две 8-битные части FSR0L
через FSR2H
) и доступ к соответствующему INDFп
регистр (INDF0
через INDF2
) действует как псевдоним для адресуемого байта.
Во-вторых, это режимы адресации. Для каждого из трех не только один INDFп
регистр, но пять, а используемый определяет режим адресации:
INDFп
: Доступ к байту в местоположенииFSRп
ПОСТДЕКп
: Доступ к байту вFSRп
, затем уменьшаемFSRп
POSTINCп
: Доступ к байту вFSRп
, затем увеличитьFSRп
PREINCп
: ПриращениеFSRп
, затем получить доступ к байту с увеличеннымFSRп
PLUSWп
: Доступ к байту вFSRп + W
(индексированная адресация).
Также есть инструкции для прямой загрузки пары FSR с 12-битным адресом и MOVFF
инструкция, которая перемещает байт между двумя 12-битными адресами.
1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | N ? | Описание | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | код операции | Разные инструкции | ||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Нет операции | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | СПАТЬ | Перейти в режим ожидания | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Перезапустить сторожевой таймер | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | ТОЛКАТЬ | Вставить ПК в верхнюю часть стека | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | Поп | Вставить (и сбросить) верх стека | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | DAW | C | Десятичная регулировка W | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | TBLRD ∗ | Таблица гласит: TABLAT ← mem [TBLPTR] | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | TBLRD ∗ + | Таблица, прочитанная с постинкрементом | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | TBLRD ∗ - | Таблица, прочитанная с постдекрементом | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | TBLRD + ∗ | Таблица читается с предварительным приращением | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | мод | TBLWR | Запись таблицы, те же режимы, что и TBLRD | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | s | РЕТФИ [, БЫСТРО] | Возврат из прерывания | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | s | ВОЗВРАТ [, БЫСТРО] | Возврат из подпрограммы | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | CALLW* | Нажмите PC, перейдите к PCLATU: PCLATH: W | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ПЕРЕЗАГРУЗИТЬ | 0 | 0 | 0 | Сброс программного обеспечения | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | —0— | k | MOVLB | Переместить буквальный k в банк выбрать регистр | ||||||||||
0 | 0 | 0 | 0 | 1 | код операции | буквальный | Буквальные операции: W ← OP (k, W) | ||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | k | SUBLW k | W ← k - W | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | k | IORLW k | W ← k | W, включающее логическое или | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | k | XORLW k | W ← k ^ W, исключая или | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | k | ANDLW k | W ← k & W, логический и | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | k | RETLW k | ВОЗВРАТ W ← k | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | k | MULLW k | W ← k × W | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | k | MOVLW k | W ← k | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | k | ADDLW k | W ← k + W | |||||||||||
0 | код операции | d | а | регистр | Операции ALU: dest ← OP (f, W) | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | а | ж | MULWF ж,а | PRODH: PRODL ← W × f (без знака) | |||||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | а | ж | DECF ж,d,а | C | Z | N | dest ← f - 1 | ||||||||
0 | 0 | 0 | 1 | 0 | 0 | d | а | ж | IORWF ж,d,а | Z | N | dest ← f | W, включающее логическое или | |||||||||
0 | 0 | 0 | 1 | 0 | 1 | d | а | ж | ANDWF ж,d,а | Z | N | dest ← f & W, логический и | |||||||||
0 | 0 | 0 | 1 | 1 | 0 | d | а | ж | XORWF ж,d,а | Z | N | dest ← f ^ W, исключающий или | |||||||||
0 | 0 | 0 | 1 | 1 | 1 | d | а | ж | КОМФ ж,d,а | Z | N | dest ← ~ f, поразрядное дополнение | |||||||||
0 | 0 | 1 | 0 | 0 | 0 | d | а | ж | ADDWFC ж,d,а | C | Z | N | цель ← f + W + C | ||||||||
0 | 0 | 1 | 0 | 0 | 1 | d | а | ж | ADDWF ж,d,а | C | Z | N | dest ← f + W | ||||||||
0 | 0 | 1 | 0 | 1 | 0 | d | а | ж | INCF ж,d,а | C | Z | N | dest ← f + 1 | ||||||||
0 | 0 | 1 | 0 | 1 | 1 | d | а | ж | DECFSZ ж,d,а | dest ← f - 1, пропустить, если 0 | |||||||||||
0 | 0 | 1 | 1 | 0 | 0 | d | а | ж | RRCF ж,d,а | C | Z | N | dest ← f >> 1 | C << 7, повернуть вправо через перенос | ||||||||
0 | 0 | 1 | 1 | 0 | 1 | d | а | ж | RLCF ж,d,а | C | Z | N | dest ← f << 1 | C, повернуть влево через перенос | ||||||||
0 | 0 | 1 | 1 | 1 | 0 | d | а | ж | SWAPF ж,d,а | dest ← f << 4 | f >> 4, поменять местами полубайты | |||||||||||
0 | 0 | 1 | 1 | 1 | 1 | d | а | ж | INCFSZ ж,d,а | dest ← f + 1, пропустить, если 0 | |||||||||||
0 | 1 | 0 | 0 | 0 | 0 | d | а | ж | RRNCF ж,d,а | Z | N | dest ← f >> 1 | f << 7, повернуть вправо (без переноса) | |||||||||
0 | 1 | 0 | 0 | 0 | 1 | d | а | ж | RLNCF ж,d,а | Z | N | dest ← f << 1 | f >> 7, повернуть влево (без переноса) | |||||||||
0 | 1 | 0 | 0 | 1 | 0 | d | а | ж | ИНФСНЗ ж,d,а | dest ← f + 1, пропустить, если не 0 | |||||||||||
0 | 1 | 0 | 0 | 1 | 1 | d | а | ж | DCFSNZ ж,d,а | dest ← f - 1, пропустить, если не 0 | |||||||||||
0 | 1 | 0 | 1 | 0 | 0 | d | а | ж | MOVF ж,d,а | Z | N | dest ← f | |||||||||
0 | 1 | 0 | 1 | 0 | 1 | d | а | ж | SUBFWB ж,d,а | C | Z | N | dest ← W + ~ f + C (dest ← W - f - C̅) | ||||||||
0 | 1 | 0 | 1 | 1 | 0 | d | а | ж | SUBWFB ж,d,а | C | Z | N | dest ← f + ~ W + C (dest ← f - W - C̅) | ||||||||
0 | 1 | 0 | 1 | 1 | 1 | d | а | ж | SUBWF ж,d,а | C | Z | N | dest ← f - W (dest ← f + ~ W + 1) | ||||||||
0 | 1 | 1 | 0 | код операции | а | регистр | Операции ALU, не писать в W | ||||||||||||||
0 | 1 | 1 | 0 | 0 | 0 | 0 | а | ж | CPFSLT ж,а | пропустить, если f | |||||||||||
0 | 1 | 1 | 0 | 0 | 0 | 1 | а | ж | CPFSEQ ж,а | пропустить, если f == W | |||||||||||
0 | 1 | 1 | 0 | 0 | 1 | 0 | а | ж | CPFSGT ж,а | пропустить, если f> W (без знака) | |||||||||||
0 | 1 | 1 | 0 | 0 | 1 | 1 | а | ж | TSTFSZ ж,а | пропустить, если f == 0 | |||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 0 | а | ж | SETF ж,а | f ← 0xFF | |||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 1 | а | ж | CLRF ж,а | 1 | f ← 0, PSR.Z ← 1 | ||||||||||
0 | 1 | 1 | 0 | 1 | 1 | 0 | а | ж | NEGF ж,а | C | Z | N | f ← −f | ||||||||
0 | 1 | 1 | 0 | 1 | 1 | 1 | а | ж | MOVWF ж,а | f ← W | |||||||||||
0 | 1 | 1 | 1 | кусочек | а | ж | BTG ж,б,а | Переключить бит b из f | |||||||||||||
1 | 0 | opc | кусочек | а | регистр | Битовые операции | |||||||||||||||
1 | 0 | 0 | 0 | кусочек | а | ж | BSF ж,б,а | Установить бит b из f | |||||||||||||
1 | 0 | 0 | 1 | кусочек | а | ж | BCF ж,б,а | Очистить бит b из f | |||||||||||||
1 | 0 | 1 | 0 | кусочек | а | ж | BTFSS ж,б,а | Пропустить, если установлен бит b функции f | |||||||||||||
1 | 0 | 1 | 1 | кусочек | а | ж | BTFSC ж,б,а | Пропустить, если бит b из f очищен | |||||||||||||
1 | 1 | 0 | opc | адрес | Операции с большим адресом | ||||||||||||||||
1 | 1 | 0 | 0 | источник | MOVFF s,d | Абсолютное перемещение | |||||||||||||||
1 | 1 | 1 | 1 | пункт назначения | |||||||||||||||||
1 | 1 | 0 | 1 | 0 | п | БЮСТГАЛЬТЕР п | Переход к ПК + 2п | ||||||||||||||
1 | 1 | 0 | 1 | 1 | п | RCALL п | Вызов подпрограммы на ПК + 2п | ||||||||||||||
1 | 1 | 1 | 0 | 0 | cond | п | Условный переход (на ПК + 2п) | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | п | BZ п | Переход, если установлен PSR.Z | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | п | BNZ п | Перейти, если ПСР.З очищен | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | п | до н.э п | Переход, если установлен PSR.C | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | п | BNC п | Перейти, если PSR.C очищен | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | п | BOV п | Переход, если установлен PSR.V | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | п | BNOV п | Переход, если PSR.V очищен | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | п | BN п | Переход, если установлен PSR.N | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | п | BNN п | Переходить, если PSR.N ясен | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | opc | k | Расширения для использования FSR2 в качестве указателя программного стека* | |||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | п | k | ADDFSR п,k* | FSRn + = k | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | k | ADDULNK k* | FSR2 + = k, поп-ПК | |||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | п | k | СУБФСР п,k* | FSRn - = k | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | k | СУБУЛНК k* | FSR2 - = k, поп ПК | |||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | k | PUSHL k* | [FSR2] ← k, декремент FSR2 | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | s | MOVSF src,ж * | f ← FSR2 [s] | ||||||||||
1 | 1 | 1 | 1 | ж | |||||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | s | MOVSS src,dst* | FSR2 [d] ← FSR2 [s] | ||||||||||
1 | 1 | 1 | 1 | —0— | d | ||||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | opc | k | Инструкции из 2 слов | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | s | k (лсбит) | ВЫЗОВ k[, БЫСТРЫЙ] | Подпрограмма вызова (20-битный адрес) | |||||||||||
1 | 1 | 1 | 1 | k (мсбит) | |||||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | ж | k (msb) | LFSR ж,k | Переместить 12-битный литерал в FSRж | ||||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | k (лсбит) | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | k (лсбит) | ИДТИ К k | Абсолютный скачок, ПК ← k (20-битный адрес) | |||||||||||
1 | 1 | 1 | 1 | k (мсбит) | |||||||||||||||||
1 | 1 | 1 | 1 | k | Нет операции, второе слово инструкций из 2 слов | ||||||||||||||||
1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | N ? | Описание |
*: Эти расширенные инструкции доступны только для некоторых моделей, и то только в том случае, если XINST
бит конфигурации установлен.
16-битные микроконтроллеры PIC24 и dsPIC
В 2001 году Microchip представила серию микросхем dsPIC,[21] которые начали массовое производство в конце 2004 года. Это первые 16-разрядные микроконтроллеры Microchip. Устройства PIC24 представляют собой микроконтроллеры общего назначения. Устройства dsPIC включают цифровая обработка сигналов возможности в дополнение.
Инструкции бывают двух основных типов. Одна из них похожа на классические инструкции PIC с одним операндом, с операцией между W0 и значением в указанном регистре f (т.е. первые 8 КБ ОЗУ) и выбором бита выбора места назначения, который обновляется с результатом. Регистры W отображены в память, поэтому операнд f может указывать регистр W.
Другая форма, новая для PIC24, определяет три регистровых операнда W, два из которых допускают 3-битную спецификацию режима адресации:
исходный операнд | операнд назначения | Описание | ||||
---|---|---|---|---|---|---|
PPP | Рег | Синтаксис | qqq | Рег | Синтаксис | |
000 | ssss | Ws | 000 | дддд | Wd | Зарегистрироваться напрямую |
001 | ssss | [Ws] | 001 | дддд | [Wd] | Косвенный |
010 | ssss | [Ws−−] | 010 | дддд | [Wd−−] | Косвенный с постдекрементом |
011 | ssss | [Ws++] | 011 | дддд | [Wd++] | Косвенный с постинкрементом |
100 | ssss | [−−Ws] | 100 | дддд | [−−Wd] | Косвенный с предварительным приращением |
101 | ssss | [++ Ws] | 101 | дддд | [++ Wd] | Косвенный с прединкрементом |
11k | кккк | #u5 | (Не используется, незаконно) | 5-битный беззнаковый немедленный | ||
11Икс | ssss | [Ws+ Wш] | 11Икс | дддд | [Wd+ Wш] | Косвенный со смещением регистра |
Режим адресации смещения регистра доступен только для MOV src,dst
инструкция, где регистр Ww может использоваться как смещение регистра для источника, назначения или обоих. Все остальные инструкции используют эту кодировку для беззнакового 5-битного непосредственного источника.
Для операндов TBLRD
и TBLWT
которые обращаются к программной памяти, разрешены только косвенные режимы и относятся к адресам в памяти кода.
Несколько инструкций состоят из двух слов. Второе слово - это NOP, которое включает до 16 бит дополнительного непосредственного операнда.
2 3 | 2 2 | 2 1 | 2 0 | 1 9 | 1 8 | 1 7 | 1 6 | 1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Мнемонический | C ? | Z ? | N ? | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | код операции | компенсировать | Контрольные переводы | ||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — | NOP | Нет операции | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | —0— | п<22:16> | ВЫЗОВ / НАЙТИ адрес 23 | (второе слово) | |||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | п | ДЕЛАТЬ #k,адрес | (второе слово) | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | opc | —0— | а | Вычисленная передача управления (в 16-битный Wa) | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | —0— | а | ЗВОНИТЕ Rа | Нажмите на компьютер, перейдите в Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | —0— | а | RCALL Rа | Нажмите ПК, перейдите на ПК + 2 × Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | —0— | а | GOTO Rа | Перейти к Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | —0— | а | Бюстгальтер Rа | Перейти на ПК + 2 × Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | п<15:1> | 0 | ВЫЗОВадрес 23 | Нажмите ПК, перейдите к абсолютному адресу | |||||||||||||||||
—0— | —0— | п<22:16> | ||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | — | (Зарезервированный) | |||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | п | 0 | ИДТИ Кадрес 23 | Перейти к абсолютному адресу | |||||||||||||||||
—0— | —0— | п<22:16> | ||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | B | k | d | RETLW [.B] #k, Втd | Wd = k, поп ПК | |||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | —0— | ВОЗВРАЩАТЬСЯ | поп-компьютер | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | —0— | РЕТФИ | C | Z | N | поп-эр, ПК | |||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | п | RCALL адрес | Нажимаем ПК, ПК + = 2 × s16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | ДЕЛАТЬ #k,адрес | Цикл с нулевыми издержками: k + 1 - количество повторов, PC + 2 × n последняя инструкция | ||||||||||||||||
—0— | п | |||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | ПОВТОРЕНИЕ #k | Повторить следующую инструкцию k + 1 раз | ||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | п | RCALL адрес | Нажимаем ПК, ПК + = 2 × s16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | — | (Зарезервированный) | ||||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | а | п | Бюстгальтер Oа, адрес | Если аккумулятор переполнен / насыщен, PC + = 2 × simm16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | а | п | Бюстгальтер Sа, адрес | |||||||||||||||||||
0 | код операции | ш | B | q | d | п | s | Обратное вычитание: dest ← источник - Wш | ||||||||||||||||||||
0 | 0 | 0 | 1 | 0 | ш | B | q | d | п | s | SUBR [.B] Wш,src,dst | C | Z | N | dst ← src - Ww = src + ~ Ww + 1) | |||||||||||||
0 | 0 | 0 | 1 | 1 | ш | B | q | d | п | s | SUBBR [.B] Wш,src,dst | C | Z | N | dst ← src - Ww - C̅ = src + ~ Ww + C | |||||||||||||
0 | 0 | 1 | 0 | k | d | MOV #k, Втd | Wd ← # imm16 | |||||||||||||||||||||
0 | 0 | 1 | 1 | cond | п | Условный переход на ПК + 2 ×п | ||||||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | п | BRA OV, г.адрес | ... если установлен PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | п | Бюстгальтер C,адрес | ... если установлен PSR.C | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | п | Бюстгальтер Z,адрес | ... если установлен PSR.Z | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | п | Бюстгальтер N,адрес | ... если установлен PSR.N | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | п | Бюстгальтер LE,адрес | ... если ПСР.З, или ПСР.Н ≠ ПСР.В | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | п | Бюстгальтер LT,адрес | ... если PSR.N ≠ PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | п | BRA LEU,адрес | ... если установлен PSR.Z или PSR.C очищен | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | п | БЮСТГАЛЬТЕР адрес | ... безоговорочно | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | п | BRA NOV,адрес | ... если PSR.V ясен | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | п | BRA NC,адрес | ... если PSR.C ясен | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | п | BRA NZ,адрес | ... если ПСР.З ясно | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | п | БРА НН,адрес | ... если PSR.N ясен | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | п | Бюстгальтер GT,адрес | ... если PSR.Z очищен, а PSR.N = PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | п | Бюстгальтер GE,адрес | ... если PSR.N = PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | п | БРА ГТУ,адрес | ... если PSR.Z очищен, а PSR.C установлен | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | п | (Зарезервированный) | |||||||||||||||||||
0 | код операции | ш | B | q | d | п | s | Операции ALU: dest ← OP (Wш,источник) | ||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | ш | B | q | d | п | s | ДОБАВИТЬ [.B] Wш,src,dst | C | Z | N | dst ← Ww + src | |||||||||||||
0 | 1 | 0 | 0 | 1 | ш | B | q | d | п | s | ADDC [.B] Wш,src,dst | C | Z | N | dst ← Ww + src + C | |||||||||||||
0 | 1 | 0 | 1 | 0 | ш | B | q | d | п | s | SUB [.B] Wш,src,dst | C | Z | N | dst ← Ww - src | |||||||||||||
0 | 1 | 0 | 1 | 1 | ш | B | q | d | п | s | SUBB [.B] Wш,src,dst | C | Z | N | dst ← Ww - ~ src - C̅ = Ww + ~ src + C | |||||||||||||
0 | 1 | 1 | 0 | 0 | ш | B | q | d | п | s | И [.B] Wш,src,dst | Z | N | dst ← Ww & src | ||||||||||||||
0 | 1 | 1 | 0 | 1 | ш | B | q | d | п | s | XOR [.B] Wш,src,dst | Z | N | dst ← Ww ^ src | ||||||||||||||
0 | 1 | 1 | 1 | 0 | ш | B | q | d | п | s | IOR [.B] Wш,src,dst | Z | N | dst ← Ww | src | ||||||||||||||
0 | 1 | 1 | 1 | 1 | ш | B | q | d | п | s | MOV [.B] src,dst | Z | N | dst ← src (разрешен режим смещения) | ||||||||||||||
1 | 0 | 0 | 0 | 0 | ж | d | MOV ж, Втd | Wd ← f | ||||||||||||||||||||
1 | 0 | 0 | 0 | 1 | ж | s | MOV Ws,ж | f ← Ws | ||||||||||||||||||||
1 | 0 | 0 | 1 | 0 | k | B | k | d | k | s | MOV [.B] [Ws+s10], Втd | Загрузить с 10-битным смещением | ||||||||||||||||
1 | 0 | 0 | 1 | 1 | k | B | k | d | k | s | MOV [.B]Ws,[Wd+s10] | Сохранить с 10-битным смещением | ||||||||||||||||
1 | 0 | 1 | 0 | 0 | код операции | б | Z | B | —0— | п | s | Битовые операции на источник | ||||||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | б | 0 | B | —0— | п | s | BSET [.B] #б,src | Установить бит b src | |||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | б | 0 | B | —0— | п | s | BCLR [.B] #б,src | Очистить бит b из src | |||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | б | 0 | B | —0— | п | s | BTG [.B] #б,src | Переключить бит b в src | |||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | б | 0 | 0 | —0— | п | s | BTST.C #б,src | C | Установите PSR.C = бит b src | ||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | б | 1 | 0 | —0— | п | s | BTST.Z #б,src | Z | Установите PSR.Z = бит b src | ||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | б | Z | 0 | —0— | п | s | BTSTS.z #б,src | C / Z | Проверьте бит b src (в C или Z), затем установите | ||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | Z | ш | 0 | —0— | п | s | BTST.z Wш,src | C / Z | Тестовый бит Ww из src | ||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | б | 0 | 0 | —0— | п | s | BTSS #б,src | Тестовый бит, пропустить, если установлен | |||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | б | 0 | 0 | —0— | п | s | BTS #б,src | Тестовый бит, пропустить, если сброшен | |||||||||||||
1 | 0 | 1 | 0 | 1 | код операции | б | ж | Битовые операции на ж | ||||||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | б | ж | б | BSET [.B] ж,#б | Установить бит b из f | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | б | ж | BCLR.B ж,#б | Очистить бит b из f | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | б | ж | BTG.B ж,#б | Переключить бит b из f | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | б | ж | BTST.B ж,#б | Z | Тестовый бит b из f | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | б | ж | BTSTS.B ж,#б | Z | Проверить бит b функции f, затем установить | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | Z | ш | 0 | —0— | п | s | BSW.z src, Втш | Скопируйте PSW.C или PSW.Z укусить Ww из src | |||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | б | ж | BTSS ж,#б | Тестовый бит, пропустить, если установлен | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | б | ж | BTSC ж,#б | Тестовый бит, пропустить, если сброшен | |||||||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | код операции | B | k | d | Регистр-немедленные операции: Wd ← OP (Wd,k) | ||||||||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | B | k | d | ДОБАВИТЬ [.B] #u10, Втd | C | Z | N | Wd ← Wd + k | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | B | k | d | ADC [.B] #u10, Втd | C | Z | N | Wd ← Wd + k + C | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | B | k | d | SUB [.B] #u10, Втd | C | Z | N | Wd ← Wd - k | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | B | k | d | SUBB [.B] #u10, Втd | C | Z | N | Wd ← Wd - k - C̅ | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | B | k | d | И [.B] #u10, Втd | Z | N | Wd ← Wd & k | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | B | k | d | XOR [.B] #u10, Втd | Z | N | Wd ← Wd ^ k | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | B | k | d | IOR [.B] #u10, Втd | Z | N | Wd ← Wd | k | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | B | k | d | MOV [.B] #u10, Втd | Wd ← k | |||||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | код операции | B | D | ж | Операции ALU: dest ← OP (ж, W0) | ||||||||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | ж | ДОБАВИТЬ [.B] ж[, WREG] | C | Z | N | dest ← f + W0 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | B | D | ж | АЦП [.B] ж[, WREG] | C | Z | N | цель ← f + W0 + C | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | ж | ПОД [.B] ж[, WREG] | C | Z | N | dest ← f - W0 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | ж | SUBB [.B] ж[, WREG] | C | Z | N | dest ← f - W0 + C̅ | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | ж | И [.B] ж[, WREG] | Z | N | dest ← f & W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | ж | XOR [.B] ж[, WREG] | Z | N | dest ← f ^ W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | ж | IOR [.B] ж[, WREG] | Z | N | dest ← f | W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | B | 1 | ж | MOV [.B] WREG,ж | f ← W0 | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | opc | ш | d | 0 | п | s | 16 × 16 → 32 умножение | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | ш | d | 0 | п | s | MUL.UU Wш,src, Втd | Wd + 1: Wd ← Ww × src (без знака) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | ш | d | 0 | п | s | MUL.US Wш,src, Втd | Wd + 1: Wd ← Ww × src (src подписано) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | ш | d | 0 | п | s | MUL.SU Wш,src, Втd | Wd + 1: Wd ← Ww × src (Ww со знаком) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | ш | d | 0 | п | s | MUL.SS Wш,src, Втd | Wd + 1: Wd ← Ww × src (со знаком) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | opc | B | q | d | п | s | Доступ к программной памяти (только косвенные режимы) | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | B | q | d | п | s | TBLRDL [.B] src,dst | dst ← ROM [TBLPAG: src] (биты 15: 0) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | B | q | d | п | s | TBLRDH [.B] src,dst | dst ← ROM [TBLPAG: src] (биты 23:16) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | B | q | d | п | s | TBLWTL [.B] src,dst | ПЗУ [TBLPAG: dst] ← src (биты 15: 0) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | B | q | d | п | s | TBLWTH [.B] src,dst | ПЗУ [TBLPAG: dst] ← src (биты 23:16) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | B | 0 | ж | MUL [.B] ж | W3: W2 ← f × W0 (без знака) | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | B | 1 | — | (Зарезервированный) | ||||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | — | (Зарезервированный) | ||||||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | — | (Зарезервированный) | |||||||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | —0— | d | 0 | п | s | MOV.D src, Втd | Загрузить регистровую пару | ||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | q | d | —0— | s | 0 | MOV.D Ws,dst | Пара регистров магазина | ||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | — | (Зарезервированный) | |||||||||||||||||||
1 | 1 | 0 | 0 | 0 | м | А | S | Икс | у | я | j | а | DSP MAC (только dsPIC) | |||||||||||||||
1 | 1 | 0 | 0 | 1 | Другие инструкции DSP (только dsPIC) | |||||||||||||||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | —0— | d | п | s | FF1R src, Втd | C | Найдите первый справа (lsb) | ||||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | —0— | d | п | s | FF1L src, Втd | C | Найдите первый слева (msb) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 0 | код операции | B | q | d | п | s | Сдвиг / поворот общего операнда | ||||||||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | B | q | d | п | s | SL [.B] src,dst | C | Z | N | dst ← src << 1, сдвиг влево (в перенос) | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | B | q | d | п | s | ЛСР [.B] src,dst | C | Z | N | dst ← src >> 1, логический сдвиг вправо | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | B | q | d | п | s | ASR [.B] src,dst | C | Z | N | dst ← src >> 1, арифметический сдвиг вправо | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | B | q | d | п | s | RLNC [.B] src,dst | Z | N | dst ← src <<< 1, повернуть влево (без переноса) | |||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | B | q | d | п | s | RLC [.B] src,dst | C | Z | N | C: dst ← src: C << 1, повернуть влево через перенос | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | B | q | d | п | s | RRNC [.B] src,dst | Z | N | dst ← src >>> 1, повернуть вправо (без переноса) | |||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | B | q | d | п | s | RRC [.B] src,dst | C | Z | N | dst: C ← C: src >> 1, повернуть вправо через перенос | ||||||||||
1 | 1 | 0 | 1 | 0 | 1 | код операции | B | D | ж | Сдвиг / поворот ж | ||||||||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | ж | SL [.B] ж[, WREG] | C | Z | N | dest ← f << 1, сдвиг влево (в перенос) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | ж | ЛСР [.B] ж[, WREG] | C | Z | N | dest ← f >> 1, логический сдвиг вправо | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | ж | ASR [.B] ж[, WREG] | C | Z | N | dest ← f >> 1, арифметический сдвиг вправо | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | ж | RLNC [.B] ж[, WREG] | Z | N | dest ← f <<< 1, повернуть влево (без переноса) | |||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | ж | RLC [.B] ж[, WREG] | C | Z | N | C: dest ← f: C << 1, повернуть влево через перенос | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | ж | RRNC [.B] ж[, WREG] | Z | N | dest ← f >>> 1, повернуть вправо (без переноса) | |||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | B | D | ж | RRC [.B] ж[, WREG] | C | Z | N | dest: C ← C: f >> 1, повернуть вправо через перенос | ||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | U | т | d | D | 0 | 0 | s | Разделить шаг (префикс REPEAT # 17) | |||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | —0— | d | 0 | 0 | 0 | s | DIV.S Wd, Втs | C | Z | N | W0 ← Wd / Ws, W1 ← остаток | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | т | d | 1 | 0 | 0 | s | DIV.SD Wd, Втs | C | Z | N | W0 ← Wt: Wd / Ws, W1 ← остаток | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | —0— | d | 0 | 0 | 0 | s | DIV.U Wd, Втs | C | Z | N | W0 ← Wd / Ws, W1 ← остаток | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | т | d | 1 | 0 | 0 | s | DIV.UD Wd, Втs | C | Z | N | W0 ← Wt: Wd / Ws, W1 ← остаток | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | т | —0— | 0 | 0 | 0 | s | DIVF Wт, Втs | C | Z | N | W0 ← Wt: 0 / Ws, W1 ← остаток | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | — | (Зарезервированный) | ||||||||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 1 | — | (Зарезервированный) | ||||||||||||||||||||
1 | 1 | 0 | 1 | 1 | 1 | код операции | ш | d | я | 0 | 0 | s | Сдвиг / поворот несколько | |||||||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | ш | d | 0 | 0 | 0 | s | SL Wш, Втs, Втd | Z | N | Wd ← Ww << Ws | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | ш | d | 1 | 0 | 0 | k | SL Wv,#u4, Втd | Z | N | Wd ← Ww << k | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | ш | d | 0 | 0 | 0 | s | ЛСР Wш, Втs, Втd | Z | N | Wd ← Ww >> Ws, логический сдвиг вправо | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | ш | d | 1 | 0 | 0 | k | ЛСР Wv,#u4, Втd | Z | N | Wd ← Ww >> k, логический сдвиг вправо | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | ш | d | 0 | 0 | 0 | s | ASR Wш, Втs, Втd | Z | N | Wd ← Ww >> Ws, арифметический сдвиг вправо | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | ш | d | 1 | 0 | 0 | k | ASR Wv,#u4, Втd | Z | N | Wd ← Ww >> k, арифметический сдвиг вправо | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | —0— | d | п | s | FBCL src, Втd | C | Найдите допустимый сдвиг арифметической нормализации | |||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | —0— | B | 0 | 0 | 0 | п | s | CP0 [.B] src | C | Z | N | Сравните с нулем, src - 0 | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | ш | B | 0 | 0 | 0 | п | s | CP [.B] Wш,src | C | Z | N | Сравните, Ww - src (Ww + ~ src + 1) | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | ш | B | 0 | 0 | 0 | п | s | CPB [.B] Wш,src | C | Z | N | Сравните с заимствованием, Ww - src - C̅ (Ww + ~ src + C) | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | B | 0 | ж | CP0 [.B] ж | C | Z | N | Сравните с нулем, f - 0 | ||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | B | 0 | ж | CP [.B] ж | C | Z | N | Сравнить, f - W0 | ||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | B | 0 | ж | CPB [.B] ж | C | Z | N | Сравните с заимствованием, f - W0 - C̅ (f + ~ W0 + C) | ||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | — | (Зарезервированный) | ||||||||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | opc | ш | B | —0— | s | Сравнить и пропустить | ||||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | ш | B | —0— | s | CPSGT [.B] Wш, Втs | ... если Ww> Ws, подписано | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | ш | B | —0— | s | CPSLT [.B] Wш, Втs | ... если Ww | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | ш | B | —0— | s | CPSNE [.B] Wш, Втs | ... если Ww ≠ Ws | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | ш | B | —0— | s | CPSNE [.B] Wш, Втs | ... если Ww = Ws | ||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | B | q | d | п | s | INC [.B] src,dst | C | Z | N | dst ← src + 1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | B | q | d | п | s | INC2 [.B] src,dst | C | Z | N | dst ← src + 2 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | B | q | d | п | s | DEC [.B] src,dst | C | Z | N | dst ← src − 1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | B | q | d | п | s | DEC2 [.B] src,dst | C | Z | N | dst ← src − 2 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | B | q | d | п | s | NEG [.B] src,dst | C | Z | N | dst ← ~ src + 1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | B | q | d | п | s | ГРЕБЕНЬ] src,dst | Z | N | dst ← ~ src | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | B | q | d | —0— | CLR [.B] dst | dst ← 0 | ||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | B | q | d | —0— | SETM [.B] dst | dst ← ~ 0 | ||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | B | D | ж | INC [.B] ж[, WREG] | C | Z | N | dest ← f + 1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | B | D | ж | INC2 [.B] ж[, WREG] | C | Z | N | dest ← f + 2 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | B | D | ж | DEC [.B] ж[, WREG] | C | Z | N | dest ← f − 1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | B | D | ж | DEC [.B] ж[, WREG] | C | Z | N | dest ← f − 2 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | B | D | ж | NEG [.B] ж[, WREG] | C | Z | N | цель ← ~ f + 1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | B | D | ж | ГРЕБЕНЬ] ж[, WREG] | Z | N | dest ← ~ f | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | B | D | ж | CLR [.B] ж[, WREG] | dest ← 0 | |||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | B | D | ж | SETM [.B] ж[, WREG] | dest ← ~ 0 | |||||||||||||||
1 | 1 | 1 | 1 | 0 | 0 | м | А | 1 | Икс | у | я | j | opc | DSP MPY / MAC / ED / EDAC (только dsPIC) | ||||||||||||||
1 | 1 | 1 | 1 | 0 | 1 | — | (Зарезервированный) | |||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | ж | 0 | ТОЛКАТЬ ж | Нажмите f на вершину стека | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | ж | 0 | Поп ж | Pop f из вершины стека | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | k | LNK #u14 | Нажмите W14, W14 ← W15, W15 + = k | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | —0— | ULNK | W15 ← W14, поп W14 | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 000 | d | п | s | SE src,dst | C | Z | N | dst ← sign_extend (src), скопируйте бит 7 в биты 15: 8 | ||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 000 | d | п | s | ZE src,dst | 1 | Z | 0 | dst ← zero_extend (src), очистить биты 15: 8 | ||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | k | DISI #u14 | Отключить прерывание для k+1 цикл | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 000 | d | 000 | s | EXCH Ws, Втd | Поменять местами содержимое регистров Ws, Wd | |||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 000 | 0000 | 000 | s | DAW.B Ws | C | Десятичная регулировка на основе C, DC | ||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | B | 000 | 0000 | 000 | s | СВОП [.B] Ws | Поменять местами половинки Ws | |||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | —0— | ПЕРЕЗАГРУЗИТЬ | Сброс программного обеспечения | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | —0— | k | PWRSAV #u1 | Перейти в спящий режим или режим ожидания | ||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | —0— | CLRWDT | Очистить сторожевой таймер | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | —0— | POP.S | Регистры Pop Shadow (W0–3, часть PSR) | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | —0— | PUSH.S | Проталкивать теневые регистры (W0–3, часть PSR) | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | — | (Зарезервированный) | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | — | НЕТ ПР | Нет операции (версия №2) |
Рекомендации
- ^ PIC10F200 / 202/204/206 Лист данных (PDF). Технология микрочипов. 2007. с. 52. Архивировано с оригинал (PDF) на 2015-08-11. Получено 2015-01-15.
- ^ http://www.emc.com.tw/eng/products.asp
- ^ ELAN Microelectronics Corp. (26 апреля 2016 г.), EM78P157N 8-битный микроконтроллер с OTP ROM Спецификация продукта (PDF), версия 1.3, в архиве (PDF) из оригинала от 04.03.2016, получено 2020-06-06
- ^ а б ELAN Microelectronics Corp. (25 апреля 2016 г.), EM78P143 8-битный микропроцессор с OTP ROM Спецификация продукта (PDF), версия 1.7, стр. 77, получено 2020-06-06
- ^ ELAN Microelectronics Corp. (апрель 2016 г.), EM78P346N 8-битный микропроцессор с OTP ROM Спецификация продукта (PDF), версия 1.5, стр. 77, получено 2019-07-11
- ^ ELAN Microelectronics Corp. (17 апреля 2000 г.), EM78860 8-битный микроконтроллер (PDF), п. 17, получено 2019-07-11
- ^ ELAN Microelectronics Corp. (15 марта 2013 г.), EM78F648 / 644/642 / 641N / 548/544/542 / 541N 8-разрядный микроконтроллер серии Flash (PDF), версия 1.2, с. 162–165, получено 2019-07-11
- ^ Получено из таблиц кодирования инструкций в Elan eUIDE II v2.19.60.14, выпущено 1 мая 2019 г., дата обращения 13 июля 2019 г. В частности,
Bin / *. Cfg
файлы. - ^ ELAN Microelectronics Corp. (2014-01-14), EM78XXX 15-битный набор команд (PDF), получено 2019-07-13
- ^ «Представляем усовершенствованную архитектуру среднего уровня» (PDF). Микрочип.
- ^ Волк, Эш «Ниндзи» (12 декабря 2018 г.). "Мышиные приключения №3: Написание дизассемблера". Получено 8 июля 2019.
- ^ Карлсон, Джей (6 сентября 2019 г.). «Что случилось с этими 3-центовыми микроконтроллерами? (Обзор Padauk PMS150C и друзей)». Получено 2020-05-18.
- ^ "Ужасный" микроконтроллер стоимостью 3 цента - краткий обзор микроконтроллеров стоимостью менее $ 0,10 ". Блог Вима. 12 августа 2019 г.. Получено 2020-05-18.
- ^ Волк, Эш «Ниндзи» (12 декабря 2018). "Документация для микроконтроллеров PADAUK FPPA". Получено 2020-05-18.
- ^ Padauk Technology Co. Ltd. (11 декабря 2018 г.). "PMC150 / PMS150 8-битный контроллер ввода-вывода типа OTP" (PDF) (техническая спецификация). Версия 1.8. С. 38–51. PDK-DS-PMX150-EN-V108. Получено 2020-06-08.
- ^ Волк, Эш «Ниндзи» (23 мая 2020 г.). «Основные устройства PADAUK FPPA (14 бит)». Получено 2020-06-08.
- ^ Волк, Эш «Ниндзи» (26 ноября 2018). "fppa_instructions_sets_notes / 14bit.txt". Получено 2020-06-08.
- ^ Padauk Technology Co. Ltd. (18 июня 2019 г.). "Технические данные контроллера ввода-вывода типа PFS154 8bit MTP" (PDF). Версия 1.04. С. 71–84. PDK-DS-PFS154_RN_V104. Получено 2020-06-09.
- ^ http://www.microchipc.com/sourcecode/
- ^ Microchip Technology, Inc. (2007 г.), PIC18F1220 / 1320 Лист данных (PDF), получено 2012-04-02
- ^ [1]
- ^ Справочное руководство программиста dsPIC30F (PDF), Microchip Technology, 2008, DS70157C, получено 2012-07-02