Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные команды для работы с целыми числами

Поиск
Инстр. Мнемоника Действие
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

Выражения

Простые выражения

Выражение - константа, символ, или ряд констант и символов, разделенные арифметическими операторами. 32-разрядные диапазоны допустимых значений выражения: от -2147 483 648 до 2147 483 647 для знаковых значений, от 0 до 4 294 967 295 для значений без знака. Три основных фактора влияют на порядок выполнения выражения:

· Круглые скобки. Выражения, включенные в круглые скобки, всегда рассчитываются сначала. 8 / (4 / 2) = 4, но 8 / 4 / 2 = 1. Вы не можете заменять круглые скобки на фигурные скобки ({}) или квадратные скобки ([]).

· Группы по старшинству. Операторы, перечисленные ниже, разделены на девять групп по старшинству. Когда круглые скобки не определяют порядок оценки выражения, первой выполняется самая высокая по старшинству операция. 8+4/2=10 (сначала вычислено 4/2).

· Выполнение слева направо. Когда круглые скобки и группы по старшинству не определяют порядок оценки выражения, выражения вычисляются слева направо, кроме группы 1, в которой они вычисляются справа налево. 8/4*2=4, но 8/(4*2)=1.

Список операторов, которые могут использоваться в выражениях, в соответствие с группами старшинства.

Группа Оператор Описание
  + - ~ ! Унарный плюс Унарный минус Дополнение до 1 Логическое НЕ
  * / % Умножение Деление Модуль
  + - Сложение Вычитание
  << >> Сдвиг влево Сдвиг вправо
  < < = > > = Меньше чем Меньше или равно Больше чем Больше или равно
  = ! = Равно Не равно
  & Поразрядное И
  ^ Поразрядное исключающее ИЛИ (XOR)
  | Поразрядное ИЛИ

Внимание: операторы группы 1 вычисляются справа налево. Все другие операторы вычисляются слева направо.

Ассемблер проверяет условия переполнения и антипереполнения, когда арифметические операции выполняются во время трансляции. Он дает предупреждение (Value truncated – значение усечено) всякий раз, когда происходит переполнение или антипереполнение. Ассемблер не проверяет переполнение или антипереполнение при умножении.

Четкие выражения. Некоторые директивы ассемблера требуют четких выражений в качестве операндов. Четкие выражения содержат только символы или разовые константы ассемблера, которые определены прежде, чем с ними сталкиваются в выражении. Значение четкого выражения должно быть абсолютным (без знака). Это - пример четкого выражения:

1000h+X

где X был предварительно определен как абсолютный символ.

Условные выражения

Ассемблер поддерживает условные операторы, которые могут использоваться в любом выражении. Они особенно полезны для условной трансляции. Условные операторы включают следующие:

Оператор Описание
= Равно
!= Не равно
< Меньше
<= Меньше или равно
> Больше
>= Больше или равно

Условные выражения равны 1, если они истинны, и 0, если ложны и могут использоваться только на операндах эквивалентных типов. Например, абсолютная величина сравнивается с абсолютной величиной, но не с перемещаемым значением.

Законные выражения

За исключением перечисленных ниже случаев в выражениях нет ограничений на использование операторов, констант, внутренне или внешне определенных символов.

Когда выражение содержит более чем один перемещаемый символ или не может быть вычислено во время ассемблирования, ассемблер кодирует и помещает его в объектный файл и оно вычисляется линкером. Если финальное значение выражения требует больше места, чем отведено для него, то Вы получите сообщение линкера об ошибке.

Исключения для законных выражений. При использовании в регистрах режима относительной адресации выражение в квадратных скобках должно быть четким. Например, *+А4[15]

Листинги

Листинги программ

Листинг программы показывает исходные инструкции и объектный код, который они производят. Чтобы получить файл листинга, вызовите ассемблер с опцией - L. Листинг печатается постранично. Незаполненную строку и строку заголовка, имеют наверху каждая страница распечатки. Любой заголовок, определенный.title директивой, печатается в строке заголовка. Номер страницы печатается справа от заголовка. Если Вы не используете.title директиву, печатается имя исходного файла. Ассемблер вставляет незаполненную строку ниже строки заголовка.

Каждая строка в исходном файле создает, по крайней мере, одну строку в файле листинга. Она содержит номер исходной инструкции, значение SPC, объектный код, и исходную инструкцию..

Пример показывает листинг ассемблера.

Листинг перекрестных ссылок

Листинг перекрестных ссылок показывает символы и их определения. Чтобы получить этот листинг, вызовите ассемблер с -x опцией или используйте.option директиву с операндом X. Ассемблер добавляет перекрестную ссылку в конец листинга программы.

Пример. Листинг перекрестных ссылок ассемблера

LABEL VALUE DEFN REF

 

.BIG_ENDIAN 00000000 0

.LITTLE_ENDIAN 00000001 0

.TMS320C6200 00000001 0

.TMS320C6700 00000000 0

.TMS320C6X 00000001 0

_func 00000000’ 18

var1 00000000– 4 17

var2 00000004– 5 18

Заголовки столбцов:

· LABEL (Метка) содержит каждый символ, который был определен или упомянут во время трансляции.

· VALUE (Значение) содержит шестнадцатеричное число с 8 цифрами (которое является значением, назначенным символу) или имя, которое описывает атрибуты символа. Значению может также предваряться знаком, который описывает атрибуты символа.

· DEFN (Определение) содержит номер инструкции, которая определяет этот символ. Этот столбец пустой для неопределенных символов.

· REF (Ссылка) перечисляет номера строк инструкций, которые обращаются к этому символу. Пробел в этом столбце указывает, что символ никогда не использовался.

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

Директивы ассемблера поставляют данные программе и управляют процессом трансляции. Директивы ассемблера дают возможность Вам делать следующее:

· Транслировать код и данные в указанные разделы.

· Резервировать пространство в памяти для неинициализированных переменных.

· Управлять видом листинга.

· Инициализировать память.

· Транслировать условные блоки.

· Определять глобальные переменные.

· Определять библиотеки, из которых ассемблер может получить макрокоманды.

· Исследовать информацию о символьной отладке.

Таблица дает сводку директив ассемблера. Помимо директив ассемблера, указанных здесь, программные средства ’C6x поддерживают следующие директивы:

· Ассемблер использует несколько директив для макрокоманд. Макро-директивы обсуждаются в главе 5, Макроязык; они не обсуждаются в этой главе.

· Оптимизатор ассемблера использует несколько директив, которые поставляют данные и управляют процессом оптимизации. Директивы оптимизатора Ассемблера обсуждены в Руководстве «Оптимизирующий компилятор C TMS320C6x»; они не обсуждаются в этой книге.

· Компилятор C использует директивы для символьной отладки. В отличие от других директив, директивы символьной отладки не используются в большинстве программ на языке ассемблера. Приложение B, Директивы символьной отладки, обсуждает эти директивы; они не обсуждаются в этой главе.

Внимание: Метки и комментарии не показаны в синтаксисе.

Любая исходная инструкция, которая содержит директиву, может также содержать метку и комментарий. Метки начинаются в первом столбце (они - единственные элементы, кроме комментариев, которые могут появляться в первом столбце), а комментарии должны начинаться с точки с запятой или звездочки, если комментарий - единственный элемент в строке. Чтобы улучшать разборчивость, метки и комментарии не показываются, как часть синтаксиса директив. В описании части, заключенные в квадратные скобки, могут пропускаться, ассемблер будет их задавать по умолчанию.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 217; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.84.179 (0.01 с.)