[ Система команд Структура слова команд Синтаксис команд Групи команд ] | 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 вибирає DAG 1 або DAG 2.1 визначає індексний регістр, М - регістр модифікації. Поле COMPUTE визначає обчислювальну операцію, виконувану паралельно з доступом до даних. Якщо в команді не визначено ніякої операції обчислення, то це поле NO Р.
Управління послідовністю виконання програми
Прямий (або відносно PC) перехід / виклик, необов'язкова умова
Функція:
Перехід чи виклик за певною адресою або за адресою щодо PC. Адреса щодо PC - це 24-розрядне число у вигляді двійкового доповнення. Модифікатор команди DB вказує, що перехід затриманий; інакше - він не затриманий. Якщо модифікатор переривання циклу (LA) визначений для переходу, то дані витягуються з стеків циклу і стека PC при виконанні переходу. Модифікатор LA повинен використовуватися тільки у випадку, якщо перехід виконується за кордон циклу. Якщо циклу немає або адреса переходу знаходиться всередині циклу, то модифікатор LA не повинен використовуватися.
Модифікатор очищення переривання (CI) команди JUMP дозволяє повторно використовувати переривання під час його обробки. Зазвичай ADSP -2106 x ігнорує і не фіксує переривання, яке відбувається повторно, коли програма його обробки вже виконується. Команда JUMP (CI) повинна розміщуватися всередині програми обробки переривання. JUMP (CI) очищає стан поточного переривання без виходу з програми обробки переривання, зводячи програму обробки переривання до стандартної підпрограмі - це дозволяє переривання статися знову в результаті якої-небудь події або завдання в системі ADSP -2106 x. Команда JUMP (CI) зводить програму обробки переривання до стандартної підпрограмі, обнулити відповідний біт у регістрі фіксування переривання (IRPTL) і регістрі покажчика маски переривання (IMASKP). Потім ADSP -2106 x дозволяє переривання статися знову. При поверненні з підпрограми, в яку була зведена програма обробки переривання командою 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 -2106 x ігнорує і не фіксує переривання, яке відбувається повторно, коли програма його обробки вже виконується. Команда JUMP (CI) повинна розміщуватися всередині програми обробки переривання. JUMP (CI) очищає стан поточного переривання без виходу з програми обробки переривання, зводячи програму обробки переривання до стандартної підпрограмі - це дозволяє переривання статися знову в результаті якої-небудь події або завдання в системі ADSP -2106 x. Команда JUMP (CI) зводить програму обробки переривання до стандартної підпрограмі, обнулити відповідний біт у регістрі фіксування переривання (IRPTL) і регістрі покажчика маски переривання (IMASKP). Потім ADSP -2106 x дозволяє переривання статися знову. При поверненні з підпрограми, в яку була зведена програма обробки переривання командою 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 лютого 1910
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 лютого 1910
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 співає-модифікується значенням певного регістра М і оновлюється модифікованим значенням. Адресація з перед-модифікацією для такого доступу до пам'яті даних заборонена.
Приклади: IF TF JUMP (M8, 18), ELSE R6 = DM (16, Ml);
IF NE JUMP (PC, 0X20), ELSE F12 = FLOAT RIO BY R3, R6 = DM (115, MO);
Код операції: (для непрямого переходу)
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
110 | D | DMI | DMM | COND | PMI | РММ | DREG |
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 лютого 1910
Код операції: (з переходом щодо 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
111
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 лютого 1910 COMPUTE COND визначає умову для перевірки. PMI визначає регістр I для команди непрямого переходу. Регістр I перед-модифікується, але не оновлюється значенням регістру М, який вибирається полем РММ. RELADDR - це 6-розрядне число у вигляді двійкового доповнення, яке додається до поточного значення PC для генерації адреси переходу. D вибирає тип доступу до пам'яті даних (читання і запис). DREG визначає регістр реєстрового файлу. DMI визначає регістр I, який співає-модифікується і оновлюється значенням регістру М, яка визначається полем DMM. Поле COMPUTE визначає обчислювальну операцію, виконувану паралельно з доступом до даних. Якщо в команді не визначено ніякої операції обчислення, то це поле NOR Повернення з підпрограми або переривання, необов'язкова умова, необов'язкова операція обчислення Функція: Повернення з підпрограми (RTS) або повернення з програми обробки переривання (RTI). Модифікатор команди DB вказує, що перехід затриманий; інакше - він незатриманих. Команда повернення з підпрограми змушує процесор виконати перехід за адресою, збереженому у вершині стека лічильника команд. Різниця між RTS і RTI полягає в тому, що команда RTI не тільки витягує адреса повернення з стека лічильника команд, але й також: 1) витягує вміст стека стану, якщо туди було поміщено вміст регістрів стану ASTAT і MODE 1 (якщо було переривання IRQ, _ 0, переривання по таймеру або векторне переривання VIRPT); 2) обнуляє відповідний біт у регістрах фіксування переривання (IRPTL) і покажчика маски переривання (IMASKP). Повернення виконується, якщо умова визначено і вірно. Якщо операція обчислення визначена без ELSE, вона виконується паралельно з поверненням. Якщо операція обчислення визначена з ELSE, вона виконується тільки в тому випадку, якщо умова помилкова. Зауважте, що умова має бути визначено, якщо визначено фраза ELSE обчислення. Якщо незатриманих виклик використовується як одна з трьох останніх команд в циклі, то з командою RTS повинен застосовуватися модифікатор повторного входу в цикл (LR). Команда RTS (LR) гарантує правильний повторний вхід в цикл. Наприклад, у циклі, організованому за лічильником, умови завершення циклу перевіряється за допомогою зменшення значення лічильника поточного циклу (CURLCNTR) протягом виконання двох останніх команд циклу. Команда RTS (LR) гарантує правильний повторний вхід до циклу, запобігаючи декремент лічильника циклів (двічі для однієї і тієї ж ітерації циклу). При поверненні з підпрограми, в яку була зведена програма обробки переривання командою JUMP (CI), повинен використовуватися модифікатор (LR) команди RTS (у разі, якщо переривання надходить протягом двох останніх команд циклу). Приклади: RTI, R6 = R5 XOR R1; IF NOT GT RTS (DB); IF SZ RTS, ELSE R0 = LSHIFT Rl BY R15. Код операції: (повернення з підпрограми) 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
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 лютого 1910 COMPUTE Код операції: (повернення з програми обробки переривання) 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
22 21 20 19 18 17 16 15 14 13 1211 10 9 8 7 6 5 4 3 лютого 1910 COMPUTE COND визначає умову для перевірки. Якщо в команді ніякого умови не визначено, то COND є умовою TRUE, і повернення виконується завжди. J визначає, затриманий повернення чи ні. Е визначає, використовується чи ні фраза ELSE. Поле COMPUTE визначає виконувану обчислювальну операцію. Якщо в команді не визначено ніякої операції обчислення, то це поле NO P. LR визначає, призначений чи ні модифікатор повторного входу в цикл. Завантаження лічильника циклу, команда DO UNTIL LCE Функція: Ініціалізує організований за лічильником програмний цикл. Лічильник циклу LCNTR завантажується 16-розрядним безпосереднім значенням даних чи значенням з універсального регістру. Початковий адресу циклу поміщається в стек PC. Адреса закінчення циклу і умова закінчення LCE поміщаються в стек адреси циклу. Кінцева адреса може бути міткою для абсолютної 24-розрядної адреси пам'яті програми або 24-розрядним адресою щодо PC у вигляді двійкового доповнення. LCNTR поміщається в стек лічильника циклу і стає значенням CURLCNTR. Цикл виконується до тих пір, поки вміст CURLCNTR не досягне нуля. Приклади: LCNTR = 100, DO fmax UNTIL LCE; (fmax - програмна мітка) LCNTR = R 12, DO (PC, 16) UNTIL LCE; Код операції: (для завантаження лічильника циклу безпосереднім значенням даних) 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 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RELADDR Код операції: (для завантаження лічильника циклу з універсального регістру) 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
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RELADDR RELADDR визначає адресу кінця циклу по відношенню до адреси команди DO LOOP. (Абсолютний адресу теж допускається; він перетворюється в еквівалентний відносний адресу асемблером при кодуванні) Лічильник циклу (LCNTR) завантажується 16-розрядним значенням DATA або вмістом регістра, певним полем UREG. <Addr 24> (PC, <reladdr 24>) UNTIL умова закінчення; Функція: Ініціалізує організований за лічильником програмний цикл. Початковий адресу циклу поміщається в стек PC. Адреса закінчення циклу і умова закінчення поміщаються в стек циклу. Кінцева адреса може бути міткою для абсолютної 24-розрядної адреси пам'яті програми або 24-розрядним адресою щодо PC у вигляді двійкового доповнення. Цикл повторюється до тих пір, поки не виконується вказана умова закінчення циклу. Приклади: DO end UNTIL FLAG IN; (end - програмна мітка) DO (PC, 7) UNTIL AC; Код операції: (відносна адресація) 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 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RELADDR RELADDR визначає адресу кінця циклу по відношенню до адреси команди DO LOOP. (Абсолютний адресу теж допускається; він перетворюється в еквівалентний відносний адресу асемблером при кодуванні) TERM визначає умова закінчення циклу. Команди безпосередній пересилання даних Пересилання даних між пам'яттю даних або пам'яттю програми і універсальним регістром, пряма адресація, безпосереднє значення адреси Функція: Звернення між пам'яттю даних або пам'яттю програми і універсальним регістром при прямої адресації. Повна адреса пам'яті даних або пам'яті програми визначається у програмі. Адреси пам'яті даних 32-розрядні (від Про до 2 32 -1). Адреси пам'яті програми 24-розрядні (від 0 до 24 Лютого -1). Приклади: DM (temp) = MODE 1; (temp - програмна мітка) DMWAIT = PM (0x489060); Код операції: 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 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 D вибирає тип звернення (запис або читання). G вибирає тип пам'яті (пам'ять даних або пам'ять програми). UREG визначає номер універсального регістру. ADDR містить безпосереднє значення адреси. Пересилання даних між пам'яттю даних або пам'яттю програми і універсальним Функція: Звернення між пам'яттю даних або пам'яттю програми і універсальним регістром при непрямої адресації з використанням регістрів I. Регістр I перед-модифікується безпосереднім значенням, заданим в команді. Вміст регістра I не оновлюється. Модифікатори адреси пам'яті даних 32-розрядні (від 0 до 2 32 -1). Модифікатори адреси пам'яті програми 24-розрядні (від 0 до 24 Лютого -1). Зауваження: Універсальний регістр (ureg) може знаходитися не в тому ж самому DAG (тобто DAG 1 або DAG 2), що і la / Mb або Ic / Md. Див розділ 4.4.1 "Обмеження на передачу даних з використанням регістрів DAG" в розділі 4 Передача даних. Приклади: DM (24,15) = TCOUNT; USTATl = PM (offs, 113); ("Offs" - визначена константа) Код операції: 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 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 D вибирає тип доступу (запис або читання). G вибирає тип пам'яті (дані або програма). UREG визначає номер універсального регістру. Поле I визначає індексний регістр I. Поле DATA визначає значення модифікації для регістра I. Прямий запис даних в пам'ять даних або пам'ять програми Синтаксис: DM (Ia, Mb) = <data 32>; PM (Ic, Md) Функція: Запис 32-розрядних даних в пам'ять даних або пам'ять програми при непрямої адресації. Дані розміщуються в старших 32 розрядах 40-розрядного слова пам'яті. Молодші 8 розрядів обнуляються. Регістр I співає-модифікується і оновлюється певним значенням регістру М. Зауваження: Універсальний регістр (ureg) може знаходитися не в тому ж самому DAG (тобто DAG 1 або DAG 2), що і la / Mb або Ic / Md. Приклади: DM (I 4, M 0) = 19304; РМ (114, Mil) = count; (count-константа, обумовлена користувачем) Код операції: 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 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 I вибирає індексний регістр I, М вибирає регістр модифікації М. G вибирає тип пам'яті (пам'ять даних або пам'ять програми). DATA визначає 32-розрядні дані. Запис даних в універсальний регістр Синтаксис: ureg = <data 32>; Функція: Запис 32-розрядних даних в універсальний регістр. Якщо регістр 40-розрядний, дані розміщуються в старших 32 розрядах, а в 8 молодших записуються нулі. Приклади: IMASK = 0 xFFFC 0060; M 15 = modl; (modi - константа, обумовлена користувачем) Код операції: 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 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 DATA UREG визначає номер універсального регістру. Поле DATA визначає значення даних. Висновок Набір команд процесорів сімейства ADSP-21000 забезпечує широкі можливості для їх програмування. Багатофункціональні команди дозволяють виконувати обчислення паралельно з передачею даних, а також одночасні операції помножувача і ALU. Практично кожна команда може бути виконана за один процесорний цикл. Алгебраїчний синтаксис, використовуваний асемблером сімейства ADSP-2106x, спрощує кодування і читаність. Зручний набір засобів розробки полегшує програмування. Список використаних джерел 1. Остапенко О.Г., Лавлінскій С.І., Сушков А.В. та ін Цифрові процесори обробки сигналів. Довідник. М.: Радіо і зв'язок, 1994.264 с. Будь ласка, не зберігайте тестовий текст. |