Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КС-ZAO / Мет_ЦЭВМ_ч2_v3_2010.doc
Скачиваний:
14
Добавлен:
07.02.2016
Размер:
1.77 Mб
Скачать

Додаток б - Команди виклику програм

Ассемблер ASM21

asm21 sourcefile [-switch ...] -2181

-c

Чутливість до регістра символів вихідного тексту програми

-l

Генерувати файл .LST

-m [depth]

Помістити макрокоманди у файл .LST

-i [depth]

Помістити зміст include-файлів у файл .LST

-o filename

Дати своє ім'я вихідному файлу (ім'я файлу за замовчуванням: SOURCEFILE.OBJ)

-dident[=literal]

Визначає ідентифікатор для C-препроцесора ассемблера

-s

Немає перевірки семантики багатофункціональних команд

-2181

Використовувати специфічні команди ADSP-2181

Компоновщик LD21

ld21 file1 [file2 ...] [-switch ...]

ld21 -i file_all [-switch ...]

-a archfile

Підключення до компоновщика файлу архітектури (використовується ADSP2181.ACH)

-i file_all

Підключення файлів, перерахованих у файлі file_all

-e executable

Дати своє ім'я вихідному файлу (значення за замовчуванням: 210x.EXE)

-dryrun

Швидке виконання для перевірки помилок зв'язку (файл .EXE не генерується)

-g

Створити файл .SYM таблиці ідентифікаторів

-x

Створити файл .MAP карти пам'яті

-user fastlibr

Шукає файл бібліотеки, згенерований програмою-бібліотекарем

-dir directory;

Визначити каталог, де шукати бібліотечні підпрограми

-p

Бібліотечні підпрограми завантажують сторінки в місці виклику

Імітатор (симулятор) SIM2181

sim2181 [-switch ...]

-a archfile

Підключення до симулятору файлу архітектури (використовується ADSP2181.ACH)

-e exe_file

Завантажити файл .EXE у симулятор

-c

Чутливість до регістра символів тексту програми

-k keyfile

Завантажити і виконати файл натискання клавіш

-o msgfile

Генерувати файл, що містить повідомлення про помилки і Command Output Window

-w winfile

Використовувати файл конфігурації (.WIN)

Приклад: sim2181 -a C:\ADI_DSP\21xx\LIB\ADSP2181

Розщеплювач (спліттер) ППЗУ SPL21

spl21 exe_file promfile -pm [-switch ...]

spl21 exe_file promfile -dm [-switch ...]

spl21 exe_file promfile -loader -2181 [-s] [-i]

-pm

Витяг інформації пам'яті програм ППЗУ

-dm

Витяг інформації пам'яті даних ППЗУ

-s

Формат файлу ППЗУ: Motorola S record (за замовчуванням)

-I

Формат файлу ППЗУ: Intel Hex record

-us

Формат файлу ППЗУ: Motorola S record byte stream

-us2

Формат файлу ППЗУ: Motorola S2 record byte stream

-ui

Формат файлу ППЗУ: Intel Hex record byte stream

-loader –2181

Генерує програму початкового завантаження БПДП у файлі ППЗУ

Додаток в – Довідка по мові ассемблера asm21

Директиви ассемблера

.MODULE/qualifier/qualifier/ ... module_name;

.PAGE;

.CONST constant_name=expression;

.VAR/qualifier/qualifier/ ... buffer_name[length], ..;

.INIT buffer_name: init_values;

.GLOBAL buffer_name, ... ;

.ENTRY program_label, ... ;

.EXTERNAL external_symbol, ... ;

.PORT port_name;

.INCLUDE <filename>;

.DMSEG dmseg_name;

.MACRO macro_name (param1,param2, ... );

.ENDMACRO;

.LOCAL macro_label, ... ;

.NEWPAGE; Символ роздільника сторінки у файлі .LST

.PAGELENGTH #lines; Символ роздільника сторінки у файлі .LST через кожні #lines

.LEFTMARGIN #columns; Величина лівого поля у файлі .LST

.INDENT #columns; Відступ #columns у файлі .LST

.PAGEWIDTH #columns; Величина правого поля у файлі .LST

.ENDMOD;

.MODULE qualifiers: RAM, ROM, STATIC

ABS = address (не використовувати разом з STATIC)

SEG = seg_name

.VAR qualifiers: PM, DM, RAM, ROM, CIRC, STATIC

ABS = address (не використовувати разом з STATIC)

SEG = seg_name

.INIT init_values: constant, constant, ...

<filename>

^other_buffer

%other_buffer

Директиви препроцесора ассемблера

#define macro_name (param1,...) expression

Визначити макрокоманду

#undef macro_name

Скасувати макрокоманду

#include "filename"

Додати в програму текст із файлу filename

#if expression

Включати текст і ассембліювати у залежності від значення expression

#else

Включати текст і ассембліювати, якщо попередня умова (#if, #ifdef, #ifndef) не виконується

#endif

Кінець умови (#if, #ifdef, #ifndef)

#ifdef macro_name

Включати текст і ассембліювати, якщо макрокоманда macro_name визначена

#ifndef macro_name

Включати текст і ассембліювати, якщо макрокоманда macro_name не визначена

Символи і скорочення, що використовуються для опису команд ассемблера

UPPERCASE

Явний синтаксис

I0-I7

Індексні регістри для непрямої адресації

M0-M7

Модифікатори регістрів непрямої адресації

L0-L7

Кількість регістрів (довжина) циклічного буфера

<data>

Безпосередні дані

<addr>

Безпосереднє значення адреси (абсолютна адреса або мітка програми)

<exp>

Експонента (кількість зрушень) у безпосередній команді зрушення (8-розрядне число зі знаком)

cond

Умова (використовується в умовних командах)

term

Умова виконання циклу DO-UNTIL

dreg

Регістри даних: AX0, AX1, AY0, AY1, AR, MX0, MX1, MY0, MY1, MR0, MR1, MR2, SI, SE, SR0, SR1

reg

Усі регістри (регістри даних, а також I0, I1, I2, I3, I4, I5, I6, I7, M0, M1, M2, M3, M4, M5, M6, M7, L0, L1, L2, L3, L4, L5, L6, L7, TX0, TX1, RX0, RX1, SB, PX, ASTAT, MSTAT, SSTAT (тільки читання), IMASK, ICNTL, IFC (тільки запис), CNTR, OWRCNTR (тільки запис))

;

Крапкою з комою закінчують інструкцію

,

Комами розділяються операції, що є частинами однієї інструкції

[ ]

Квадратні дужки містять необов'язкову частину інструкції

[, …]

Кілька операцій інструкції, що випливають одна за іншою в будь-якому порядку

Option1

Список можливих значень, використовувати можна тільки одне значення

Option2

Option3

Прийняті значення умови (cond)

EQ

Дорівнює

NE

Не дорівнює

LT

Менше нуля

GE

більше або дорівнює нулю

LE

менше або дорівнює нулю

GT

Більше нуля

AC

Перенос АЛУ (прапор AC)

NOT AC

Немає переносу АЛУ

AV

Переповнення АЛУ (прапор AV)

NOT AV

Немає переповнення АЛУ

MV

Переповнення УН (прапор MV)

NOT MV

Немає переповнення УН

NEG

xop на вході має від’ємний знак

POS

xop на вході має позитивний знак

NOT CE

Значення лічильника не дорівнює нулю

FLAG_IN

На висновку FI рівень логічної одиниці

Тільки для JUMP, CALL

NOT FLAG_IN

На висновку FI рівень логічного нуля

Прийняті значення умови виконання циклу DO-UNTIL (term)

CE

Поки лічильник не дорівнює нулю

EQ

Поки дорівнює нулю

NE

Поки не дорівнює нулю

LT

Поки менше нуля

GE

Поки більше або дорівнює нулю

LE

Поки менше або дорівнює нулю

GT

Поки більше нуля

AC

Поки встановлений прапор AC (перенос АЛУ)

NOT AC

Поки не встановлений прапор AC (немає переносу АЛУ)

AV

Поки встановлений прапор AV (переповнення АЛУ)

NOT AV

Поки не встановлений прапор AV (немає переповнення АЛУ)

MV

Поки встановлений прапор MV (переповнення УН)

NOT MV

Поки не встановлений прапор MV (немає переповнення УН)

NEG

Поки xop на вході має від’ємний знак

POS

Поки xop на вході має позитивний знак

FOREVER

Завжди (нескінченний цикл)

Інструкції АЛУ (ALU)

Припустимі значення xop:

AX0, AX1, AR, MR0, MR1, MR2, SR0, SR1

Припустимі значення yop:

AY0, AY1, AF (AY0 не можна використовувати як yop у команді DIVS)

[IF cond]

AR

= xop +

yop

;

Додавання / Додавання з переносом

AF

C

yop + C

Constant

= xop -

yop

;

Віднімання X-Y /

Віднімання X-Y із запозиченням

yop + C - 1

Constant

= yop -

xop

;

Віднімання Y-X /

Віднімання Y-X із запозиченням

xop + C - 1

Constant

Допускаються значення xop:

AX0, AX1, AR, MR0, MR1, MR2, SR0, SRI

Допускаються значення yop (базовий набір):

AY0, AY1, AF

Допускаються значення yop і constant (розширений набір):

AY0,AY1,AF,0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,

16384,32767, -2,-3,-5,-9,-17,-33,-65,-129,-257,-513, -1025,

-2049,-4097,-8193,-16385,-32768

[IF cond]

AR

= xop

AND

yop ;

Побітові AND, OR, XOR

AF

OR

XOR

[IF cond]

AR

= xop PASS

xop

;

Пропуск, стирання

AF

yop

constant

Допускаються значення yop (базовий набір):

AY0, AY1, AF

Допускаються значення yop і constant (розширений набір):

AY0,AY1,AF,0,1,2,3,4,5,7,8,9,15,16,17,31,32,33,63,64,65,127,128,129,255,256,257,511,512,513,1023,1024,1025,2047,2048,2049,4095,

4096,4097,8191, 8192,8193,16383,16384,16385,32766,32767,-1,-2,

-3,-4,-5,-6,-8,-9,-10,-16,-17,-18,-32,-33,-34,-64,-65,-66,-128,

-129,-130,-256,-257,-258,-512,-513,-514,-1024,-1025,-1026,

-2048,-2049,-2050,-4096,-4097,-4098,-8192,-8193,-8194,-16384,

-16385,-16386,-32767,-32768

[IF cond]

AR

=

-

xop

;

Зміна знака

AF

yop

=

NOT

xop

;

Побітова інверсія

yop

0

=

ABS xop ;

Абсолютне значення

=

yop + 1 ;

Інкремент

=

yop

- 1 ;

Декремент

=

DIVS

yop, xop ;

Розподіл

=

DIVQ

xop ;

=

TSTBIT n of xop

;

Побітові операції

SETBIT n of xop

CLBIT n of xop

TGBIT n of xop

Допускаються значення xop:

AX0, AX1, AR, MR0, MR1, MR2, SR0, SR1

Допускаються значення n (0 – самий молодший розряд):

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

Побітові операції:

TSTBIT

SETBIT

CLBIT

TGBIT

Поразрядна операція AND з одиницею

Поразрядна операція OR з одиницею

Поразрядна операція AND з одиницею

Поразрядна операція XOR з одиницею

NONE = <ALU> ;

Результат не використовується

Де <ALU> - будь-яка безумовна операція основної системи команд ALU (за винятком команд розподілу DIVS і DIVQ). Виконавши таку операцію, ALU установлює прапори стану, а значення результату відкидається. Так виробляється тестування ALU без зміни значень у регістрах AR і AF.

Інструкції УН (MAC)

Припустимі значення xop:

MX0, MX1, AR, MR0, MR1, MR2, SR0, SR1

Припустимі значення yop:

MY0, MY1, MF

[IF cond]

MR

= xop *

yop

(SS)

;

Множення

MF

xop

(SU)

(US)

(UU)

(RND)

= MR + xop *

yop

(SS)

;

Множення / Накопичення

xop

(SU)

(US)

(UU)

(RND)

= MR + xop *

yop

(SS)

;

Множення / Віднімання

xop

(SU)

(US)

(UU)

(RND)

= MR [(RND)] ;

Передати MR

= 0 ;

Очищення

IF MV SAT MR ;

Умовне насичення MR

(S)

Вхідні значення зі знаком (xop, yop)

(U)

Вхідні значення без знака (xop, yop)

(RND)

Вихідне значення з округленням

Інструкції УЦС (Shifter)

Припустимі значення xop:

SI, AR, MR0, MR1, MR2, SR0, SR1

[IF cond]

SR =[SR OR] ASHIFT xop

(HI)

;

Арифметичний зсув

(LO)

[IF cond]

SR = [SR OR] LSHIFT xop

(HI)

;

Логічний зсув

(LO)

[IF cond]

SR = [SR OR] LSHIFT xop

(HI)

;

Нормалізація

(LO)

[IF cond]

SE = EXP xop ;

(HI)

;

Одержання порядку (експонента)

(LO)

(HIX)

[IF cond]

SB = EXPADJ xop ;

Вирівнювання порядку в блоці

SR = [SR OR] ASHIFT xop BY<exp>

(HI)

;

Безпосередній ASHIFT

(LO)

SR = [SR OR] LSHIFT xop BY<exp>

(HI)

;

Безпосередній LSHIFT

(LO)

(HI)

Зрушення відноситься до регістра SR1 (самі старші 16 розрядів)

(LO)

Зрушення відноситься до регістра SR0 (самі молодші 16 розрядів)

(HIX)

HI extend (біт переповнення AV зчитується детектором порядку)

Команди пересилання даних

reg = reg ;

Запис у регістр із регістра

reg

= <data> ;

Безпосередній запис у регістр

dreg

= <data> ;

dreg = DMOVLAY ;

Читання з підгружаючого регістра

DMOVLAY = dreg ;

Запис у підгружаючий регістр

reg = DM (<addr>) ;

Безпосереднє читання з пам'яті даних

dreg = IO (<addr>) ;

Безпосереднє читання порту введення/виводу

dreg = DM (

I0

,

M0

);

Читання з пам'яті даних (непряма адресація)

I1

M1

I2

M2

I3

M3

I4

M4

I5

M5

I6

M6

I7

M7

dreg = PM(

I4

,

M4

);

Читання з пам'яті програм (непряма адресація)

I5

M5

I6

M6

I7

M7

DM( <addr> ) = reg ;

Безпосередній запис у порт введення/висновку

DM (

I0

,

M0

)= dreg ;

Запис у пам'ять даних (непряма адресація)

I1

M1

I2

M2

I3

M3

I4

M4

I5

M5

I6

M6

I7

M7

PM (

I4

,

M4

)= dreg ;

Запис у пам'ять програм (непряма адресація)

I5

M5

I6

M6

I7

M7

<addr>

Адреса (значення від 0 до 2048)

Багатофункціональні інструкції

Обчислення і запис з регістра в регістр

<ALU>

,dreg = dreg ;

<MAC>

<SHIFT>

Обчислення і читання пам'яті

<ALU>

,dreg=DM

(

I0

,

M0

)

;

<MAC>

I1

M1

<SHIFT>

I2

M2

I3

M3

I4

M4

I5

M5

I6

M6

I7

M7

Обчислення і запис у пам'ять

DM

(

I0

,

M0

)

=dreg,

<ALU>

;

I1

M1

<MAC>

I2

M2

<SHIFT>

I3

M3

I4

M4

I5

M5

I6

M6

I7

M7

Одночасне читання пам'яті програм і пам'яті даних

AX0

=DM(

I0

,

M0

),

AY0

=PM(

I4

,

M4

);

AX1

I1

M1

AY1

I5

M5

MX0

I2

M2

MY0

I6

M6

MX1

I3

M3

MY1

I7

M7

Одночасне обчислення і читання пам'яті

<ALU>

,

AX0

=DM(

I0

,

M0

),

AY0

=PM(

I4

,

M4

);

<MAC>

AX1

I1

M1

AY1

I5

M5

MX0

I2

M2

MY0

I6

M6

MX1

I3

M3

MY1

I7

M7

<ALU>

Будь-яка інструкція АЛУ (крім DIVS, DIVQ)

<MAC>

Будь-яка інструкція множення / накопичення

<SHIFT>

Будь-яка інструкція УЦС (крім безпосереднього зрушення)

Можуть використовуватися тільки регістри результату (AR і MR, а не AF і MF)

Інструкції керування ходом програми

DO <addr> [UNTIL term]

; Цикл DO-UNTIL

[IF cond] JUMP

(I4)

;

Перехід

(I5)

(I6)

(I7)

<addr>

[IF cond] CALL

(I4)

;

Виклик підпрограми

(I5)

(I6)

(I7)

<addr>

IF

FLAG_IN

JUMP

<addr> ;

Перехід і виклик підпрограми в залежності від FLAG_IN

NOT FLAG_IN

CALL

[IF cond]

SET

FLAG_OUT

[, …];

Встановити логічний стан на висновку Flag Out

RESET

FL0

TOGGLE

FL1

FL2

[IF cond] RTS;

Повернення з підпрограми

[IF cond] RTI;

Повернення з процедури обробки переривання

IDLE [(n)];

Перехід у неактивний стан (n = 16, 32, 64, 128)

Інші інструкції

NOP;

Ні операції

MODIFY (

I0

,

M0

);

Модифікація адресного регістра

I1

M1

I2

M2

I3

M3

I4

M4

I5

M5

I6

M6

I7

M7

[

PUSH

STS] [,POP CNTR] [,POP PCI] [,POP LOOP];

Керування стеком

POP

ENA

SEC_REG

[, …];

Керування режимом

DIS

BIT_REV

AV_LATCH

AR_SAT

M_MODE

TIMER

G_MODE

INTS

IDLE;

Процесор переходить у неактивний стан, а тактові імпульси генеруються рідше в n раз (n = 16, 32, 64, 128)

IDLE (n);

0

SEC_REG

Альтернативний набір регістрів

1

BIT_REV

Для адресації DAG1 використовує зворотний порядок бітів

2

AV_LATCH

Контроль прапора переповнення AV

3

AR_SAT

Насичення регістра AR

4

M_MODE

Режим розміщення результату УН (MAC)

5

TIMER

Використовувати таймер

6

G_MODE

Включення режиму Go

7

INTS

Використовувати переривання