48967 (666127), страница 2
Текст из файла (страница 2)
(Ia,Mb) (Ic,Md)
Функция:
Обновление определенного регистра I значением определенного регистра М. Если операция вычисления определена, она выполняется параллельно с доступом к данным. Если определено условие, то оно влияет на выполнение всей команды. Замечание: см. раздел 4.4.1 "Ограничения на передачу данных с использованием регистров DAG" в главе 4 Передача данных. Примеры: IF NOT FLAG2_IN R4=R6*R12 (SUF), MODIFY (110,M8); IF NOT LCE MODIFY (13,Ml);
Код операции: (с доступом к данным)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
000 | 00100 | G | COND | I | М |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 1 0
COMPUTE
COND определяет условие для проверки. Если в команде не определено никакого условия, то COND является условием TRUE, и команда выполняется всегда. G выбирает DAG1 или DAG2.1 определяет индексный регистр, М - регистр модификации. Поле COMPUTE определяет вычислительную операцию, выполняемую параллельно с доступом к данным. Если в команде не определено никакой операции вычисления, то это поле NOР.
Управление последовательностью выполнения программы
Прямой (или относительно PC) переход/вызов, необязательное условие
Функция:
Переход или вызов по определенному адресу или по адресу относительно PC. Адрес относительно PC - это 24-разрядное число в виде двоичного дополнения. Модификатор команды DB указывает, что переход задержанный; иначе - он не задержанный. Если модификатор прерывания цикла (LA) определен для перехода, то данные извлекаются из стеков цикла и стека PC при выполнении перехода. Модификатор LA должен использоваться только в случае, если переход выполняется за границу цикла. Если цикла нет или адрес перехода находится внутри цикла, то модификатор LA не должен использоваться.
Модификатор очистки прерывания (CI) команды JUMP позволяет повторно использовать прерывание во время его обработки. Обычно ADSP-2106x игнорирует и не фиксирует прерывание, которое происходит повторно, когда программа его обработки уже выполняется. Команда JUMP (CI) должна размещаться внутри программы обработки прерывания. JUMP (CI) очищает состояние текущего прерывания без выхода из программы обработки прерывания, сводя программу обработки прерывания к стандартной подпрограмме - это позволяет прерыванию произойти снова в результате какого-либо события или задачи в системе ADSP-2106x. Команда JUMP (CI) сводит программу обработки прерывания к стандартной подпрограмме, обнуляя соответствующий бит в регистре фиксирования прерывания (IRPTL) и регистре указателя маски прерывания (IMASKP). Затем ADSP-2106x позволяет прерыванию произойти снова. При возвращении из подпрограммы, в которую была сведена программа обработки прерывания командой JUMP (CI), должен использоваться модификатор (LR) команды RTS (в случае, если прерывание поступает в течение двух последних команд цикла).
Примеры:
IF AV JUMP (PC, 0X00А4);
CALL init (DB); (init - это программная метка)
JUMP (PC,2) (DB,CI); (очистка текущего прерывания
для повторного использования)
Код операции: (для прямого перехода)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24
000 | 00110 | в | А | COND | J | CI |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 13 12 | 11 | 10 | 9 | 8 | V | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ADDR |
Код операции: (для перехода относительно PC)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24
000 | 00111 | в | А | COND | J | CI |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 13 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RELADDR |
COND определяет условие для проверки. Если в команде не определено никакого условия, то COND является условием TRUE, и команда выполняется всегда. В выбирает тип перехода - переход или вызов. J определяет, задержан переход или нет. Поле адреса ADDR определяет 24-разрядный адрес памяти программы. RELADDR - это 24-разрядное число в виде двоичного дополнения, которое прибавляется к текущему значению PC для генерации адреса перехода. Бит А активизирует прерывание цикла. CI активизирует очистку прерывания. (Для вызовов CI и А игнорируются)
Косвенный (или относительно PC) переход/вызов, необязательное условие, необязательная операция вычисления
Функция:
Переход или вызов по адресу, определяемому пред-модифицированным значением регистра I, или по адресу относительно PC. Адрес относительно PC - это 6-разрядное число в виде двоичного дополнения. Если регистр I определен, то он модифицируется определенным значением регистра М для генерации адреса перехода. На содержимое регистра I операция модификации не влияет.
Переход или вызов выполняется, если заданное условие верно. Если операция вычисления определена без ELSE, то она выполняется параллельно с вызовом или переходом. Если операция вычисления определена с ELSE, то она выполняется, только если заданное условие ложно. Заметим, что условие должно быть задано, если определена фраза ELSE вычисление.
Переход или вызов по определенному адресу или адресу относительно PC. Адрес относительно PC - это 24-разрядное число в виде двоичного дополнения. Модификатор команды DB указывает, что переход задержанный; иначе - он не задержанный. Если модификатор прерывания цикла (LA) определен для перехода, то данные извлекаются из стеков цикла и стека PC при выполнении перехода. Модификатор LA должен использоваться только в случае, если переход выполняется за границу цикла. Если цикла нет или адрес перехода находится внутри цикла, то модификатор LA не должен использоваться.
Модификатор очистки прерывания (CI) команды JUMP позволяет повторно использовать прерывание во время его обработки. Обычно ADSP-2106x игнорирует и не фиксирует прерывание, которое происходит повторно, когда программа его обработки уже выполняется. Команда JUMP (CI) должна размещаться внутри программы обработки прерывания. JUMP (CI) очищает состояние текущего прерывания без выхода из программы обработки прерывания, сводя программу обработки прерывания к стандартной подпрограмме - это позволяет прерыванию произойти снова в результате какого-либо события или задачи в системе ADSP-2106x. Команда JUMP (CI) сводит программу обработки прерывания к стандартной подпрограмме, обнуляя соответствующий бит в регистре фиксирования прерывания (IRPTL) и регистре указателя маски прерывания (IMASKP). Затем ADSP-2106x позволяет прерыванию произойти снова. При возвращении из подпрограммы, в которую была сведена программа обработки прерывания командой JUMP (CI), должен использоваться модификатор (LR) команды RTS (в случае, если прерывание поступает в течение двух последних команд цикла). (См. команду типа 11, возвращение из подпрограммы)
Примеры:
JUMP (M8,112), R6=R6-1; IF EQ CALL (PC,17), ELSE R6=R6-1;
Код операции: (для косвенного перехода)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
000 | 01000 | в | А | COND | PMI | РММ | J | Е | CI |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 10
COMPUTE
Код операции: (для перехода относительно PC)
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23
000 | 01001 | в | А | COND | RELADDR | J | Е | CI |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 2 10
COMPUTE
COND определяет условие для проверки. Если условие в команде не определено, то COND является условием TRUE, и команда выполняется всегда. Е определяет, используется или нет фраза ELSE. В выбирает тип перехода - переход или вызов. J определяет задержан переход или нет. Бит А активизирует прерывание цикла. CI активизирует очистку прерывания. (Для вызовов CI и А игнорируются) RELADDR - это 6-разрядное число в виде двоичного дополнения, которое прибавляется к текущему значению PC для генерации адреса перехода. PMI выбирает регистр I для косвенного перехода. Регистр I пред-модифицируется, но не обновляется значением регистра М, который выбирается полем РММ. Поле COMPUTE определяет вычислительную операцию, выполняемую параллельно с доступом к данным. Если в команде не определено никакой операции вычисления, то это поле NOР.
Косвенный (или относительно PC) переход и необязательная операция вычисления с передачей данных между памятью данных и регистровым файлом
Функция:
Условный переход по адресу, определяемому пред модифицированным значением регистра I, или по адресу относительно PC и необязательная операция вычисления параллельно с пересылкой данных между памятью данных и регистровым файлом. В этой команде условие IF и ключевое слово ELSE должны обязательно использоваться. Если заданное условие верно, то выполняется переход. Если заданное условие ложно, то операция вычисления и передача из (в) памяти данных выполняются параллельно. В этой команде необязательна только операция вычисления.
Для перехода адрес относительно PC - это 6-разрядное число в виде двоичного дополнения. Если регистр I определен (1с), он модифицируется значением определенного регистра М (Md) для генерации адреса перехода. Операция модификации не влияет на содержимое регистра I. Заметим, что модификаторы команды задержанного перехода (DB), прерывания цикла (LA) и очистки прерывания не разрешены в этой команде.
Для доступа к памяти данных адрес обеспечивается регистром I (la). Значение регистра I поет-модифицируется значением определенного регистра М и обновляется модифицированным значением. Адресация с пред-модификацией для такого доступа к памяти данных запрещена.