· Основные команды для работы с целыми числами
Инстр. | Мнемоника | Действие |
ZERO | zero (.unit) dst .unit =.L1,.L2, S1,.S2,.D1,.D2 | 0 => dst |
ADD ADDU | add (.unit) src1, src2,dst .unit =.L1,.L2, S1, S2 | src1+src2 => dst |
ADDK | addk (.unit) cst, dst .unit =.S1,.S2 | cst+dst => dst |
SUB SUBU | sub (.unit) src1, src2, dst .unit =.L1,.L2, S1, S2 | src1=src2 => dst |
ABS | abs (.unit) src, dst .unit =.L1,.L2 | abs(src) => dst |
B | b (.unit) label .unit = S1, S2 | |
CMPEQ | cmpeq (.unit) src1, src2, dst .unit =.L1,.L2 | 1 => dst при src1=src2 |
CMPGT CMPGTU | cmpgt (.unit) src1, src2, dst .unit =.L1,.L2 | 1 => dst при src1>src2 |
CMPLT CMPLTU | cmplt (.unit) src1, src2, dst .unit =.L1,.L2 | 1 => dst при src1<src2 |
MPY MPYU | mpy (.unit) src1, src2, dst .unit =.M1,.M2 | src1*src2 => dst |
MV | mv (.unit) src, dst .unit =.L1,.L2, S1,.S2,.D1,.D2 | src => dst |
MVK | mvk (.unit) cst, dst .unit =.S1,.S2 | cst => dst |
NEG | neg (.unit) src, dst .unit =.L1,.L2,.S1,.S2 | =src => dst |
NOP | nop | |
STB STH STW | stb (.unit) src, *+baseR[offserR] .unit =.D1,.D2 | src => baseR[offsetR] |
LDB LDH LDW | ldb (.unit) *+baseR[offserR], dst .unit =.D1,.D2 | baseR[offsetR] => dst |
AND | and (.unit) src1, src2, dst .unit =.L1,.L2, S1, S2 | src1 AND src2 => dst |
OR | or (.unit) src1, src2, dst .unit =.L1,.L2,.S1,.S2 | src1 OR src2 => dst |
XOR | xor (.unit) src1, src2, dst .unit =.L1,.L2, S1, S2 | src1 XOR src2 => dst |
NOT | not (.unit) srt, dst .unit =.L1,.L2,.S1,.S2 | |
SHL | shl (.unit) src2, src1, dst .unit =.S1,.S2 | (src2 на src1) => dst |
SHR | shr (.unit) src2, src1, dst .unit =.S1,.S2 | (src2 на src1) => dst |
· Основные команды для работы с вещественными числами
|
|
Инструкция | Мнемоника | Действие |
ABSSP ABSDP | abssp (.unit) src, dst .unit =.S1,.S2 | absdp(src) => dst |
ADDSP ADDDP | addsp (.unit) src1, src2, dst .unit =.L1,.L2 | src1+src2 => dst |
SUBSP SUBDP | subsp (.unit) src1, src2, dst .unit =.L1,.L2 | src1+src2 => dst |
CMPEQSP CMPEQDP | cmpeqsp (.unit) src1, src2, dst .unit =.S1,.S2 | 1 => dst при src1=src2 |
CMPGTSP CMPGTDP | cmpgtsp(.unit) src1, src2, dst .unit =.S1,.S2 | 1 => dst при src1>src2 |
CMPLTSP CMPLTDP | cmpltsp (.unit) src1, src2, dst .unit =.S1,.S2 | 1 => dst при src1<src2 |
MPYSP MPYDP | mpysp (.unit) src1, src2, dst .unit =.M1,.M2 | src1*src2 => dst |
SPINT | spint (.unit) src, dst .unit =.L1,.L2 | src1 => dst |
INTSP | intsp (.unit) src, dst .unit =.L1,.L2 | src1 => dst |
DPINT | dpint (.unit) src, dst .unit =.L1,.L2 | src1 => dst |
INTDP | intdp (.unit) src, dst .unit =.L1,.L2 | src1 => dst |
DPSP | dpsp (.unit) src, dst .unit =.L1,.L2 | src1 => dst |
SPDP | spdp (.unit) src, dst .unit =.L1,.L2 | src1 => dst |
· Константы
Ассемблер поддерживает каждую константу внутренне, как 32-разрядное число. Константы – не расширяются по знаку. Например, константа 00FFh равна 00FF (в 16-ричной системе) или 255 (в десятичной)..
Ассемблер поддерживает шесть типов констант:
· Двоичное целое число.
· Восьмеричное целое число.
· Десятичное целое число.
· Шестнадцатеричное целое число.
· Знак.
· Разовая ассемблерная константа.
Двоичная целочисленная константа. Это строка до 32 двоичных символов (0 и 1) с суффиксом B (или b). Если определено меньше 32 цифр, ассемблер выравнивает значение вправо и заполняет неопределенные левые биты нулями. Примеры допустимых двоичных констант:
0100000b Константа, равная 32 (10) или 20 (16)
01b Константа, равная 1 (10) или 1 (16)
Восьмеричная целочисленная константа. Это строка до 11 восьмеричных цифр (0 до 7) с суффиксом Q (или q). Примеры допустимых восьмеричных констант:
|
|
10Q Константа, равная 8 (10) или 8 (16).
226q Константа, равная 150 (10) или 96 (16).
Десятичная целочисленная константа. Это строка десятичных цифр (от 0 до 9). Им соответствуют десятичные числа в пределах от -2 147 483 648 до 4 294 967 295. Примеры допустимых десятичных констант:
1000 Константа, равная 1000 (10) или 3E8 (16).
-32768 Константа, равная -32 768 (10) или 8000 (16).
25 Константа, равная 25 (10) или 19 (16).
Шестнадцатеричная целочисленная константа. Это строка до восьми шестнадцатеричных цифр с суффиксом H (или h). Шестнадцатеричные цифры включают десятичные числа, 0-9, и символы A-F или a-f. Шестнадцатеричная константа должна начаться с десятичного числа (0-9). Если определено меньше, чем восемь шестнадцатеричных цифр, ассемблер выравнивает биты вправо. Примеры допустимых шестнадцатеричных констант:
78h Константа, равная 120 (10) или 0078 (16).
0Fh Константа, равная 15 (10) или 000F (16).
Символьная константа. Это – одиночный знак, заключенный в апострофы (одиночные кавычки). Знаки представлены внутренне, как знаки ASCII с 8 битами. Запоминается номер символа по таблице кодировки в двоичной форме. Примеры допустимых символьных констант:
’@‘ Определяет символьную константу, представлен внутренне как 61 (16-ричное 3d).
’C‘ Определяет символьную константу C и представлен внутренне как 43 (16-ричное 2b).
’’ Определяет нулевой символ и представлен внутренне как 00 (16-ричное 00).
Обратите внимание на различие между символьными константами и символьными строками. Символьная константа представляет одиночное значение; строка - последовательность знаков.
Разовые константы ассемблера. Если Вы используете.set директиву, чтобы назначить значение символу, то символ становится константой. Чтобы использовать эту константу в выражениях, значение ее должно быть абсолютным (без знака). Например:
sym.set 3
MVK sym, B1
Вы можете также использовать.set директиву, чтобы назначить символическую константу имени регистра. В этом случае, символ становится синонимом регистра:
sym.set B1
MVK 10, sym
Символьная строка. Это строка кодовых знаков, заключенная в двойные кавычки. Двойные кавычки, которые являются частью символьной строки, представляются двумя последовательными двойными кавычками. Максимальная длина строки изменяется и определена для каждой директивы, которая требует символьную строку. Знаки представляются внутренне, как кодовые знаки ASCII с 8 битами. Примеры допустимых символьных строк:
“sample program” определяет строку sample program с 14 знаками.
“PLAN “”C””” определяет строку PLAN “C” с 8 знаками.
Символьные строки используются для следующих целей:
· Имена файлов, как в директиве.copy “имя файла”.
· Имена разделов, как в директиве.sect “имя раздела”.
· Директивы инициализации данных, как в.byte “символьная строка”.
· Операнды директив.string.
Символы. Используются как метки, константы и символы замены. Имя символа - строка до 200 алфавитно-цифровых знаков (A-Z, a-z, 0-9, $, и _). Первый знак в символе не может быть числом, и символы не могут содержать внутренние пробелы. Символы, которые Вы определяете, чувствительны к регистру. Например, ассемблер различает ABC, Abc и abc, как три уникальных символа. Символ допустим только внутри ассемблерной программы.
Метки. Символы, используемые как метки, станут символическими адресами, которые связаны с ячейками памяти в программе. Метки, используемые локально, в пределах файла должны быть уникальны. Мнемонические коды операции и имена директив ассемблера без префикса (.) - допустимые имена меток.
Метки могут также использоваться, как операнды.global,.ref,.def, или.bss директив. Например:
.global label1
label2: MVK label2, B3
MVKH label2, B3
B label1
NOP 5
Локальные метки. Это специальные метки, чьи возможности и сила - временные. Локальная метка может быть определена двумя способами:
|
|
· $n, где n - десятичная цифра в диапазоне 0-9. Например, $ 4 и $ 1 являются допустимыми локальными метками..
· имя?, где имя - любое законное имя символа, как описано выше. Ассемблер заменяет вопросительный знак точкой, сопровождаемой уникальным числом. Когда исходный текст расширен, Вы не будете видеть уникальное число в файле листинга. Ваша метка появляется с вопросительным знаком, как это сделано в исходном определении. Вы не можете объявлять эту метку как глобальную.
Нормальные метки должны быть уникальны (они могут быть объявлены только однажды), и они могут использоваться как константы в поле операнда. Локальные метки, однако, могут быть отменены и определены снова. Локальные метки не могут быть определены директивами.
Символические константы. Символам могут быть присвоены постоянные значения. Используя константы, Вы можете сопоставлять имена с постоянными значениями. Директивы.set и.struct/.tag/.endstruct дают Вам возможность присвоить константам символические имена. Символические константы не могут быть переопределены.
Предопределенные символические константы. Ассемблер имеет несколько предопределенных символов, включая следующие типы:
· $, знак доллара, представляет текущее значение счетчик команд раздела (SPC). $ - перемещаемый символ.
· Символы регистров, включая A0-A15 и B0-B15.
· Регистры управления ЦП, включая следующее:
ACR | Регистр управления анализа |
ADR | Регистр данных анализа |
AMR | Регистр способа адресации |
ARP | Регистр возврата анализа |
CSR | Регистр управления состояния |
ICR | Регистр очистки прерываний |
IER | Регистр разрешения прерываний |
IFR | Регистр флагов прерываний |
NRP | Указатель возврата из немаскируемого прерывания |
IRP | Указатель возврата из маскируемого прерывания |
ISR | Указатель таблицы обслуживания прерываний |
ISTP | Регистр установки прерываний |
PCE1 | Счетчик команд |
PDATA_O | Выход программных данных |
STRM_HOLD | Регистр удержания потока |
TCR | Регистр управления тестом |
IN (’C67x только) ввода. | Универсальный регистр |
OUT (’C67x только) | Универсальный регистр вывода |
Регистры управления в тексте можно вводить либо всеми знаками верхнего регистра, либо всеми – нижнего; например, CSR можно ввести как csr.
|
|
Символы замены. Символы могут быть назначены строковым значениям (переменным). Это позволяет Вам заменять символьные строки, приравнивая их символическим именам. Символы, которые представляют строки знаков, называются символами замены. Когда ассемблер сталкивается с символом замены, его строковое значение заменяется именем символа. В отличие от символических констант, символы замены могут быть переопределены. Строка может быть назначена символу замены где-нибудь в пределах программы. Например:
.global _table
.asg ”B14”, PAGEPTR
.asg ”*+B15(4)”, LOCAL1
.asg ”*+B15(8)”, LOCAL2
LDW *+PAGEPTR(_table),A0
NOP 4
STW A0,LOCAL1
Когда Вы используете макрокоманды, символы замены важны, потому что макропараметры - фактически символы замены, которые назначены аргументу макрокоманды. Следующий код показывает, как символы замены используются в макрокоманде:
MAC.macro src1, src2, dst; макрокоманда умножения/сложения
MPY src1, src2, src2
NOP
ADD src2, dst, dst
. endm
* Вызов макрокоманды MAC
MAC A0,A1,A2