Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛК_МашЗавЯП_А4.doc
Скачиваний:
157
Добавлен:
10.06.2015
Размер:
19.94 Mб
Скачать
    1. Xmm технология

Технология MMX получила свое развитие в микропроцессоре Pentium III с появлением специального аппаратного блока SSE (StreamingSIMD Extension - потоковое SIMD-расширение) обработки информации по схеме SIMD. Новая технология получила название XMM (eXtendedMulti-Media). БлокSSEсодержит отдельный регистровый файл из восьми 128-разрядных регистровXMM, что позволяет обрабатывать по схеме SIMD числа с плавающей запятой (четыре 32-разрядных числа).

Числа с плавающей запятой имеют следующий формат:

  • знак: 1 разряд;

  • порядок (смещенный): 8 разрядов;

  • мантисса: 23 разряда.

Расширено и количество форматов чисел с фиксированной точкой, обрабатываемых в XMMпо схеме SIMD:

  • 16 операндов х 8 разрядов;

  • 8 операндов х 16 разрядов;

  • 4 операнда х 32 разряда;

  • 2 операнда х 64 разряда.

Для обработки чисел новых форматов в систему команд дополнительно введены 70 новых команд.

Блок SSE2, включенный в микропроцессор Pentium 4, реализует 144 новые команды. Из этих 144 инструкций 68 расширяют возможности старых SIMD-инструкций по работе с целыми числами, а 76 являются совершенно новыми. Среди последних - инструкции, позволяющие оперировать со 128-разрядными числами (как целыми, так и вещественными с двойной точностью).

Операции SSE2 позволили существенно повысить эффективность применения микропроцессора при реализации трехмерной графики и современных интернет-приложений, обеспечении сжатия и кодирования аудио- и видеоданных и ряда других применений. В результате производительность процессора Pentium 4 при выполнении таких операций стала вдвое выше, чем Pentium III.

Отметим несколько новых по сравнению с MMX инструкций, вошедших в состав команд SSE/SSE2.

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

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

Новые возможности в этом направлении обработки информации были обеспечены в технологии SSE3, внедренной в ядре Prescott процессора Pentium 4 добавлением набора из 13 инструкций, и в технологии SSE4 в микропроцессорах семейства INTel Core 2 Duo.

  1. Система команд

    1. Формат команды

Машинная команда представляет собой закодированное по определенным правилам указание микропроцессору на выполнение некоторой операции или действия. Под каждую команду в системной памяти процессора прошиты подпрограммы их выполнения. Ассемблер, анализируя исходник проекта, в сегменте кода, заменяет предложения исходника на эти подпрограммы.

Каждая команда содержит элементы, определяющие:

  • Код операции (КОП) описывает, что делать. Значение в поле КОП определяет в блоке микропрограммного управления подпрограмму, реализующую действия для данной команды.

  • Операнды описывают объекты, с которыми нужно что-то делать. Операнды в команде могут и не задаваться, а подразумеваться по умолчанию.

  • Типы операндов описывают, как делать, обычно задаются неявно.

Правила кодирования команд называются форматом команд. Команды процессоров архитектуры IA-32 считаются сложными. Максимальная длина машинной команды IA-32 составляет 15 байт. Реальная команда может содержать гораздо меньшее количество полей, вплоть до одного — только КОП. Приведенный на рисунке формат машинной команды является самым общим.

Опишем назначения полей машинной команды.

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

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

  • 2eh –замена сегмента CS.

  • 36h –замена сегмента SS.

  • 3eh –замена сегмента DS.

  • 26h –замена сегмента ES.

  • 64h –замена сегмента FS.

  • 65h –замена сегмента GS.

  • Префикс разрядности адреса уточняет разрядность адреса (32 или 16-разрядный). Каждой команде, в которой используется адресный операнд, ставится в соответствие разрядность адреса этого операнда. Этот адрес может иметь разрядность 16 или 32 бит.  Это смещение называется эффективный адрес. Если разрядность адреса 32 бит, это означает, что команда содержит 32-разрядное смещение, оно соответствует 32-разрядному смещению адресного операнда относительно начала сегмента и по его значению формируется 32-битное смещение в сегменте. С помощью префикса разрядности адреса можно изменить действующее по умолчанию значение разрядности адреса. Это изменение будет касаться только той команды, которой предшествует префикс. 

  • Префикс разрядности операнда аналогичен префиксу разрядности адреса, но указывает на разрядность операндов (32 или 16-разрядные), с которыми работает команда. В соответствии с какими правилами устанавливаются значения атрибутов разрядности адреса и операндов по умолчанию?

  • Префикс повторения используется с цепочечными командами (командами обработки строк). Этот префикс “зацикливает” команду для обработки всех элементов цепочки. Система команд поддерживает два типа таких префиксов: безусловные (rep — 0f3h), заставляющие повторяться цепочечную команду некоторое количество раз; условные (repe/repz — 0f3h, repne/repnz — 0f2h), которые при зацикливании проверяют некоторые флаги, и в результате проверки возможен досрочный выход из цикла

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

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

  • Поле reg (3-бита) определяют регистр, используемый в команде.

  • Бит d задает направление передачи данных: при 0 из регистра reg, при 1 в регистр reg,

  • Бит s задает необходимость расширения 8-битового непосредственного операнда ло 16 или 32 бита

  • Бит w определяет размер данных, которыми оперирует команда: байт, слово, двойное слово: при 0 — 8 битов; при 1 — 16 битов для 16-разрядного размера операндов или 32 бита для 32-разрядного размера операндов.

Однобайтовые КОП.

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

Байт режима адресации modr/m. Иногда называется постбайтом, Значения этого байта определяет используемую форму адреса операндов. Операнды могут находиться в памяти в одном или двух регистрах. Если операнд находится в памяти, то байтmodr/mопределяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса. Байтmodr/mсостоит из трех полей:

  • Поле mod определяет количество байт, занимаемых в команде адресом операнда, поле смещение в команде).Поле mod используется совместно с полем r/m, которое указывает способ модификации адреса операнда смещение в команде. К примеру, если mod = 00, это означает, что поле смещение в команде отсутствует, и адрес операнда определяется содержимым базового и (или) индексного регистра. Какие именно регистры будут использоваться для вычисления эффективного адреса, определяется значением этого байта. Если mod = 01, это означает, что поле смещение в команде присутствует, занимает один байт и модифицируется содержимым базового и (или) индексного регистра. Если mod = 10, это означает, что поле смещение в команде присутствует, занимает два или четыре байта (в зависимости от действующего по умолчанию или определяемого префиксом размера адреса) и модифицируется содержимым базового и (или) индексного регистра. Если mod = 11, это означает, что операндов в памяти нет: они находятся в регистрах. Это же значение байта mod используется в случае, когда в команде применяется непосредственный операнд.

  • Поле reg/КОП определяет либо регистр, находящийся в команде на месте первого операнда, либо возможное расширение кода операции;

  • Поле r/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда (если mod = 11), либо используемые для вычисления эффективного адреса (совместно с полем смещение в команде) базовые и индексные регистры.

Байт масштаб-индекс-база sib (Scale-Index-Base)используется для расширения возможностей адресации операндов. На наличие байтаsibв машинной команде указывает сочетание одного из значений 01 или 10 поля mod и значения поля r/m= 100. Байтsibсостоит из трех полей:

  • Поле масштаба ss. В этом поле размещается масштабный множитель для индексного компонента index, занимающего следующие три бита байта sib. В поле ss может содержаться одно из следующих значений: 1, 2, 4, 8. При вычислении эффективного адреса на это значение будет умножаться содержимое индексного регистра.

  • Поле index — используется для хранения номера индексного регистра, который применяется для вычисления эффективного адреса операнда;

  • Поле base — используется для хранения номера базового регистра, который также применяется для вычисления эффективного адреса операнда. Напомню, что в качестве базового и индексного регистров могут использоваться практически все регистры общего назначения.

Поле смещения в команде. 8, 16 или 32-разрядное целое число со знаком, представляющее собой, полностью или частично (с учетом вышеприведенных рассуждений), значение эффективного адреса операнда.

Поле непосредственного операнда. Необязательное поле, представляющее собой 8, 16 или 32-разрядный непосредственный операнд. Наличие этого поля, конечно, отражается на значении байта modr/m.

Для описания команд приняты обозначения:

  • Структура регистра флагов eflags: В нижней строке этой таблицы приводятся значения флагов после выполнения команды:

  • 1 — после выполнения команды флаг устанавливается (равен 1);

  • 0 — после выполнения команды флаг сбрасывается (равен 0);

  • r — значение флага зависит от результата работы команды;

  • ? — после выполнения команды флаг не определен;

  • пробел — после выполнения команды флаг не изменяется;

  • Для представления операндов в синтаксических диаграммах используются следующие обозначения:

  • r8, r16, r32 — операнд в одном из регистров размером байт, слово или двойное слово;

  • m8, m16, m32, m48 — операнд в памяти размером байт, слово, двойное слово или 48 бит;

  • i8, i16, i32 — непосредственный операнд размером байт, слово или двойное слово;

  • a8, a16, a32 — относительный адрес (смещение) в сегменте кода.

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

Конструируя команду на основе подобной синтаксической диаграммы, вы должны помнить о соответствии типов. В подобной диаграмме допустимы только следующие сочетания: "r8, m8", "r16, m16", "r32, m32". Например, сочетание "r8, m16" недопустимо. Однако есть единичные случаи, когда подобные сочетания возможны; тогда они специально оговариваются.

Описанная в данном приложении система команд в полном объеме поддерживается микропроцессором Pentium. Предыдущие модели микропроцессора могут не поддерживать отдельные команды. Чтобы прояснить этот момент, мы будем указывать в примерах для каждой команды директиву типа .286. Это будет означать, что описываемая команда поддерживается всеми моделями микропроцессора, начиная с i286. Если ничего не указывается, то это означает, что данная команда работает на всех моделях микропроцессоров Intel, начиная с i8086/8088.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]