Available Languages?:

Набор инструкций

Набор инструкций ядра PIC24F значительно расширен по сравнению с набором инструкций микроконтроллеров PIC18. Так как величина слова инструкции PIC24F составляет 24 бита, увеличено как количество инструкций, так и методов адресации и поддерживаемых типов данных (двойное слово данных – 32 бита, слово данных – 16 бит, байт). Основные различия в наборах инструкций PIС18 и PIC24F приведены в таблице:

Параметры PIC18 PIC24F
Величина слова инструкции 16 бит 24 бита
Количество базовых инструкций 75 76
Поддерживаемая разрядность данных Байт Байт, слово, двойное слово
Количество операндов До двух (b = a + b) До трех (c = a + b)
Режимы адресаций Прямая, косвенная (5 видов) Прямая, косвенная (6 видов)
Косвенная адресация Используются регистры косвенной адресации FSR – максимум три указателя Как указатель используется любой регистр общего назначения – до 16 указателей
Адресация памяти данных Прямая адресация – ограничено текущим банком. Вся память данных адресуется за несколько инструкций Прямая адресация – ограничено областью ближней памяти 1). Вся память данных – косвенная адресация

Изменение набора инструкций PIC24F по сравнению с PIC18

Набор инструкций ядра PIC24F предоставляет пользователю дополнительные возможности, увеличивающие скорость выполнения математических алгоритмов и обеспечивающие улучшенную поддержку языков программирования высокого уровня. Последнее связно с гибкой работой с указателями и использованием программного стека:

Инструкции ядра PIC24F Описание
DIV Деление двух чисел, знаковое и беззнаковое, 32 бита на 16 бит и 16 бит на 16 бит
LNK, ULNK Фиксировать и освободить указатель стекового фрейма (W14)
LSR, ASR Двоичный и арифметический сдвиг вправо (от 1 до 15 бит). Аргументом, определяющим величину сдвига, может являться константа или переменная
MUL.SS, MUL.SU, MUL.UU Умножение (знаковое, смешанное, беззнаковое)
PUSH, POP Обе инструкции имеют произвольный аргумент, что позволяет сохранять в стеке значение, отличное от текущего значения счетчика команд
REPEAT Повтор следующей инструкции определенное количество раз
SL Сдвиг влево (от 1 до 15 бит). Аргументом, определяющим величину сдвига, может являться константа или переменная

Однако некоторые инструкции ядра PIC18 не могут быть заменены атомарной инструкцией ядра PIC24F. Как правило, аналогичный (но не идентичный, вследствие различия флагов в STATUS регистре) результат можно получить, используя одну или две инструкции PIC24F. К таким инструкциям ядра PIC18 относятся:

CPFSEQ, CPFSGT, CPFSLT, MOVSF, MOVSS, INFSNZ, DCFSNZ, DECFSZ, SUBULNK, INCFSZ, TSTFSZ, PUSHL, MOVFF (все режимы исключая перемещение с использованием косвенной адресации источника и приемника), SWAPF (все режимы за исключением использования с WREG)

За исключением перечисленных выше, все инструкции PIC18 имеют аналоги в наборе инструкций PIC24F. Более подробная информация приведена в приложении А..

Поддерживаемые типы данных

Кроме бит-ориентированных инструкций, инструкции ядра PIC18 поддерживают только работу с данными величиной 1 байт. Любые действия с данными разрядностью более 8 бит требуют корректной последовательности выполнения нескольких инструкций.

Ядро PIC24F имеет 16-битную шину данных, что определяет основной формат операндов как 16-битное слово (2 байта). Помимо этого большинство инструкций могут прозрачно использовать 8-битные и 32-битные операнды. При использовании ассемблера суффикс мнемоники .b указывает, что операция производится с 8-битными данными, а суффикс .d – что операция производится с двойным 32-битным словом. Выравнивание, определяемое разрядностью операнда производиться автоматически.

Операнды

В набор инструкций PIC18 входят команды, поддерживающие только унарные и бинарные операции. Унарная операция подразумевает, что результат сохраняется непосредственно в операнд (например, инкремент регистра WREG). Бинарная операция позволяет производить действия с двумя операндами (например, сложение) с последующим сохранением результата в один из операндов.

Набор инструкций PIC24F кроме унарных и бинарных операций поддерживает команды с тремя операндами. При этом результат операции с двумя операндами сохраняется в третий. Операции с тремя операндами могут выполнять большинство математических инструкций и инструкций сдвига.

Режимы адресации

Основное отличие в системах команд PIC18 и PIC24F заключается в количестве способов адресации данных и реализации этих способов. PIC18 и PIC24F поддерживают одни и те же методы адресаций (за исключением отсутствия в PIC18 косвенной адресации с пре-декрементом).

Прямая адресация

Архитектура PIC18 позволяет адресовать любой байт из памяти данных. Однако так как для прямой адресации в большинстве инструкций в качестве операнда используется 8-битная константа, память данных PIC18 условно разделена на 16 банков. Текущий банк определяется значением служебного регистра BSR.

Набор инструкций PIC24F разработан таким образом, чтобы любая команда, использующая прямую адресацию, имела доступ к первым 8 кБ памяти данных (NDS - Near Data Space: 0x00000x1FFF), то есть для прямой адресации используется 13-битная константа. Это позволяет использовать прямую адресацию регистров специального назначения (которые все расположены в NDS). Память данных, расположенная выше NDS (адреса, превышающие 0x1FFF) адресуется косвенно.

Косвенная адресация

В ядре PIC18 для косвенной адресации используется набор регистров специального назначения (указателей) и набор виртуальных регистров. При этом в три указателя FSR0, FSR1 и FSR2 может быть загружена 12-битная константа. Для выполнения косвенной адресации, в качестве операнда используется один из виртуальных регистров. В зависимости от того, какой из виртуальных регистров является операндом, может быть выполнена дополнительная операция над указателем, например инкремент или декремент. Таким образом, только три указателя и соответствующие им виртуальные регистры могут быть использованы для косвенной адресации.

В PIC24F в качестве указателя может использоваться любой из 16-и регистров общего назначения W0-W15. Ассемблер предусматривает специальный синтаксис записи косвенной адресации, в том числе и операции над указателем (адресация со смещением, инкремент и декремент указателя). Помимо пре-инкремента, пре-декремента, пост-инкремента указателя, возможен пре-декремент, недоступный в архитектуре PIC18.

Следует заметить, что при использовании косвенной адресации с изменением указателя, для байтовых инструкций указатель будет изменен на 1. Для инструкций, оперирующих со словом, указатель будет изменен на 2, что обеспечивает корректное выравнивание указателя.

Сравнение режимов косвенной адресации и их реализации приведены в таблице:

Косвенная адресация Виртуальный регистр PIC18, используемый в качестве операнда Синтаксис ассемблера PIC24F Изменение Wn или FSR после байтовой инструкции Изменение Wn или FSR после инструкции работы со словом
Без модификации INDFx [Wn] Wn = Wn Wn = Wn
С пре-инкрементом PREINCx [++Wn] Wn = Wn + 1 Wn = Wn + 2
С пре-декрементом - [–Wn] Wn = Wn - 1 Wn = Wn – 2
С пост-инкрементом POSTINCx [Wn++] Wn = Wn + 1 Wn = Wn + 2
С пост-декрементом POSTDECx [Wn–] Wn = Wn - 1 Wn = Wn – 2
Со смещением PLUSWx [Wn + Wb] Wn = Wn Wn = Wn

Типовая операция копирования массивов для семейства PIC18:

LoopSetup    MOVLW 0x10, LoopCount      ;set up loop counter
             LFSR 0, myArray0           ;set up pointer 0
             LFSR 1, myArray1           ;set up pointer 1
CopyLoop     MOVFF POSTINC0, POSTINC1   ;copy myArray1 to myArray0
             DECFSZ LoopCount, F        ;decrement loop counter
             BRA CopyLoop

Типовая операция копирования массивов для семейства PIC24F:

LoopSetup    MOV #myArray0, W0          ;set up pointer 0
             MOV #myArray1, W1          ;set up pointer 1
             REPEAT #15                 ;loop 16 times
             MOV [W1++], [W0++]         ;copy array1 to array

Нарушение последовательности «чтение-модификация-запись»

Расширенные возможности косвенной адресации в архитектуре PIC24F в некоторых случаях могут привести к нарушению последовательности «чтение-модификация-запись». Нарушения возникают в том случае, когда переменная, необходимая для выполнения инструкции, выборка которой происходит в данный момент, еще не изменена.

В общем случае это происходит тогда, когда сразу за инструкцией, изменяющей регистр общего назначения, следует инструкция, использующая этот регистр как указатель. Ядро PIC24F предусматривает такую опасность, и автоматически выполняет одну или более пустых инструкций (NOP) до момента завершения операции изменения указателя:

Метод адресации первой инструкции Метод адресации второй инструкции Количество пустых командных тактов 2) Пример (Wn = W2)
Прямая Прямая 0
ADD.w W0, W1, W2                
MOV.w W2, W3
Косвенная Прямая 0
ADD.w W0, W1, [W2]                
MOV.w W2, W3
Косвенная Косвенная 0
ADD.w W0, W1, [W2]                
MOV.w [W2], W3
Косвенная Косвенная, с модификацией указателя 0
ADD.w W0, W1, [W2]                
MOV.w [W2++], W3
Косвенная, с модификацией указателя Прямая 0
ADD.w W0, W1, [W2++]                
MOV.w W2, W3
Прямая Косвенная 1
ADD.w W0, W1, W2                
MOV.w [W2], W3
Прямая Косвенная с модификацией указателя 1
ADD.w W0, W1, W2                
MOV.w [W2++], W3
Косвенная Косвенная 1
ADD.w W0, W1, [W2]                
MOV.w [W2], W3
; W2=04h (mapped W2)
Косвенная Косвенная с модификацией указателя 1
ADD.w W0, W1, [W2]                
MOV.w [W2++], W3
; W2=04h (mapped W2)
Косвенная с модификацией указателя Косвенная 1
ADD.w W0, W1, [W2++]                
MOV.w [W2], W3
Косвенная с модификацией указателя Косвенная с модификацией указателя 1
ADD.w W0, W1, [W2++]                
MOV.w [W2++], W3




К содержанию

1) Near Data Space – 8 кБайт
2) выполняемых ядром после первой инструкции
 
articles/mchp/pic18_to_pic24_migration/core/instruction_set.txt · Последние изменения: 12.09.2008 15:16 От admin
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki