Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Краткий обзор элементов языка ассемблера процессора NM 6403




Введение

Данная работа предполагает наличие общего представления об особенностях архитектуры процессора NM6403, которые рассматривалась в предыдущей лабораторной работе [ ]. Поэтому, описание функциональных узлов и выполняемых ими операций не рассматривается в данной работе. При необходимости, рекомендуется обратиться к методическому пособию по прошлой работе.

Формат ассемблерных инструкций

Процессор NM6403 работает с машинными командами 32-х и 64-х разрядного формата, причем в одной машинной команде содержится две операции процессора. В этом смысле NM6403 представляет собой скалярный микропроцессор со статической VLIW-архитектурой.

Разрядность инструкций процессора

Короткие инструкциине содержат константы и имеют разрядность 32 бита.

Длинные инструкциисодержат в коде команды 32-х разрядную константу, поэтому их разрядность составляет 64 бита. Процессор адресуется к 32-х разрядным словам. На хранение коротких инструкций отводится одна ячейка памяти, для длинных – две.

ПримечаниеДлинные инструкции всегда располагаются по четным адресам.

Если начало длинной инструкции при компиляции ассемблером приходится на нечетный адрес, перед ней автоматически вставляется пустая команда nul.

Процессор NM6403 за одно обращение к памяти считывает либо две коротких инструкции, либо одну длинную, поэтому регистр pc, определяющий адрес следующей считываемой инструкции, всегда имеет четное значение.

Типы инструкций процессора

Все инструкции процессора NM6403 делятся на:

  • скалярные инструкции, которые управляют работой скалярного RISC-ядра, таймеров, осуществляют загрузку/чтение всех регистров (доступных по чтению/записи) за исключением векторных регистров, образующих очереди FIFO;
  • векторные инструкции, которые управляют работой векторного процессора.

Структура инструкций процессора

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

В левойчасти инструкции записываются только адресные операции, в правойвсе арифметическо-логические, не связанные с вычислением адресов и обращением к памяти. Левая и правая части инструкции соединяются воедино при помощи ключевого слова with.

Пример скалярной инструкции процессора:

gr 0 = [ ar 0++] with gr 1 = gr 3 + gr 0;

gr 1 = gr 3 + gr 0 – правая часть инструкции, арифметическая операция.

gr 0 = [ ar 0++] – левая часть инструкции, адресная операция.

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

gr0 = [ar0++];

трактуется ассемблером как:

gr0 = [ar0++] with nul ;

Или то же самое с левой частью:

gr1 = gr3 + gr0 ;

рассматривается как:

nul with gr1 = gr3 + gr0;

Для улучшения читаемости программы, в случае если левая или правая часть инструкции не используется, связка with может опускаться.

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

Особенности структуры векторных инструкций процессора

Векторные инструкции процессора, также как и скалярные, разделены на левую и правую части. Однако помимо этого они имеют дополнительное поле, которое присутствует во всех векторных инструкциях за исключением одиночных инструкций ftw и wtw . Поле, о котором идет речь, называется полем количества повторений. Вот пример того, как выглядит векторная инструкция:

rep 32 data = [ar1++] with vsum , data, afifo;

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

В случае, если левая часть инструкции опущена, поле повторения и слово-связка with остаются при написании инструкции, например:

rep 16 with ram - 1; // правильная инструкция

Любые другие формы записи инструкции, как то

rep 16 ram - 1; или with ram - 1; // содержат ошибки

являются ошибочными, о чем сообщит компилятор.

Типы скалярных команд

Скалярная инструкция процессора состоит из двух частей, в каждой из которых могут встречаться только определенные типы скалярных команд. Далее в таблице указано, какие группы скалярных команд могут быть записаны в левой, а какие в правой части скалярной инструкции.

Табл. 1-1 Положение различных типов команд в скалярной инструкции.

Левая часть скалярной инструкции Правая часть скалярной инструкции
  • команды загрузки/записи регистров;
  • команды пересылки значений регистров;
  • команды адресной арифметики;
  • специальные скалярные команды;
  • команды безусловного и условного перехода;
  • команды безусловного и условного обращения к подпрограмме;
  • команды возврата из подпрограммы или прерывания;
  • пустая команда.
  • арифметические операции;
  • логические операции;
  • сдвиговые операции;
  • пустая операция.

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

В качестве примера скалярной инструкции, содержащей левую и правую части, может быть рассмотрена инструкция:

gr4 = [ar0++] with gr0 = gr1 and not gr2;

В её левой части происходит инициализация регистра gr4 содержимым ячейки па-мяти, на которую указывает регистр ar0 с постинкрементацией адреса. В правой части вы-полняется трехоперандная логическая операция. Содержимое регистров gr1 и gr2 подвергается побитовой логической операции and not, а результат записывается в регистр gr0.

Типы векторных команд

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

Табл. 1-2 Положение различных типов команд в векторной инструкции.

Левая часть векторной инструкции   Правая часть векторной инструкции
  • команды загрузки данных в векторный процессор;
  • команды выгрузки данных из векторного процессора;
  • специальные векторные команды;
  • пустая векторная операция.
 
- взвешенное суммирование (матричное умножение); - маскирование; - арифметические операции; логические операции; - операция циклического сдвига; - операции активации операндов; - выгрузка управляющих векторных регистров; - пустая операция.

Пример векторной инструкции с левой и правой частями:

rep 32 ram = [ar0++] with vsum , data, afifo ;

Ключевое слово with разделяет левую и правую части. Счетчик повторений rep число присутствует в каждой векторной команде за исключением стоящих отдельно ftw и wtw. В левой части векторной команды выполняется операция загрузки данных во внутренний буфер ram векторного процессора, в правой данные проходящие в ram по шине данных дублируются и направляются в рабочую матрицу для выполнения взвешенного суммирования.

Регистры процессора

Все регистры процессора NM6403 можно разделить на группы:

  • адресные регистры;
  • регистры общего назначения;
  • специальные регистры;
  • векторные регистры.

Основные регистры

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

Всего имеется 8 адресных регистров и 8 регистров общего назначения (см. Табл. 1-3). Все они 32-х разрядные, доступны как по чтению, так и по записи.

Табл. 1-3 Основные регистры процессора NM6403.

Адресные регистры Регистры общего назначения
ar0 ar1 ar2 ar3 ar4 ar5 ar6 ar 7(sp) gr0 gr1 gr2 gr3 gr4 gr5 gr6 gr 7

Адресные регистры

Адресные регистры делятся на две равноправные группы. В первую входят ar0 .. ar3, а во вторую ar4..ar7. Это связано с наличием двух адресных устройств в процессоре.

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

Адресные регистры могут использоваться только в левой части ассемблерной инструкции.

Примеры использования адресных регистров:

ar0 = ar5; // копирование.

ar2 = ar3 + gr3; // модификация.

[ar4++] = gr7 with gr7 -= gr4 ; // запись в память.

Адресный регистр ar7 используется процессором в качестве указателя стека адресов возврата sp(Stack Pointer). Это означает, что ar7 модифицируется автоматически, когда происходит вызов функции или прерывания, а также возврат из функции или из прерывания.

Регистры общего назначения

Регистры общего назначения в отличии от адресных не имеют разделения на группы, могут использоваться как в левой, так и в правой частях ассемблерной инструкции. С их помощью можно выполнять арифметические и логические преобразования, адресоваться по памяти.

Хотя регистры общего назначения могут использоваться для адресации по памяти, например:

[gr0] = gr4; // запись значения регистра gr4 в память

// по адресу, хранящемуся в gr0.

однако адресные регистры обладают в этом смысле значительно более широкими возможностями.

Примеры использования регистров общего назначения:

gr0 = gr5; // копирование.

gr2 = gr1 + gr3; // модификация.

[ar4++] = gr7 with gr7 -= gr4 ; // запись в память.

ПримечаниеВ процессоре NM6403 не предусмотрены специальные регистры для организации программных циклов.

Регистровые пары

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

Регистровые пары часто используются в инструкциях процессора, осуществляющих копирование, чтение/запись в память 64-х разрядных данных, некоторые виды адресных операций.

Приведем пример загрузки из памяти в регистровую пару 64-х разрядного значения:

ar0, gr0 = [ar1++]; // чтение 64-х разрядного слова.

Еще один пример использования регистровых пар встречается в некоторых методах адресации, например:

[ar0+=gr0] = gr4; // запись в память с модификацией.

Непарные регистры не могут использоваться в подобных операциях. Иными словами:

ar0, gr1 = [ar1++]; // неправильная инструкция.

[ar0+=gr1] = gr4; // неправильная инструкция.










Последнее изменение этой страницы: 2018-05-10; просмотров: 245.

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