Функциональная классификация машинных команд

 

Система команд Pentium 4, последнего на сегодняшний день процессора архитектуры IA-32, включает в себя около 330 мнемоник машинных команд. Если же считать по кодам операций, то их будет гораздо больше.

Весь набор машинных команд можно разбить на следующие группы:

  1. команды общего назначения, исполняемые целочисленным устройством, в том числе системные команды;
  2. команды сопроцессора;
  3. команды MMX-расширения;
  4. команды XMM-расширения (наборы команд SSE и SSE2).

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

 

 

Рисунок. Команды ассемблера.

 

Машинные команды могут либо совсем не иметь операндов, либо иметь один или два операнда.

Обычно машинная команда имеет два операнда, один из которых является приемником, а второй — источником.

Возможны следующие сочетания источника и приемника:

 

 

Исключения составляют следующие команды:

Цепочечные — могут перемещать данные из памяти в память

Работа со стеком — могут переносить данные из памяти в стек

Команды умножения

Способы задания операндов в команде:

1)операнд задается неявно на микропроцессорном уровне

Примеры:

std ; устанавливает DF=1

push eax ; устанавливает ESP=ESP-4

 

2)операнд задается в самой команде (непосредственный операнд)

Примеры:

num EQU 10 ; определяет константу num

mov al, 5 ; загружает в AL значение 5

add al, num ; устанавливает AL=AL+10

3)адресные операнды задают физическое размещение операнда в памяти

Пример:

mov eax, 0 ; загрузка в EBX двойного

mov ds, ax ; слова, расположенного

mov ebx, ds:0h ; в 0000:00000000h

4)перемещаемые операнды — любые символьные имена, представляющие адреса памяти

Пример:

.data

var1 DW 0CFFh ; объявляется переменная

.code

mov ax, var1 ; загружается в AX

5)регистровый операнд

Примеры:

movq mm0, mm1 ; регистру mm0присваивается

; значение из регистра mm1

sub eax, esi ; из eaxвычитается esi

6)операнд — порт ввода/вывода

Примеры:

in al, 48h ; взять байт из порта 48h

mov al, 20h ; вывести слово в

out dx, al ; порт 20h

7)операнд находится в стеке

Примеры:

push eax ; обменять значения

push ebx ; регистров EAX и EBX

pop eax ; через стек

pop ebx ;

8)операнд находится в памяти

Примеры:

.data

var DD 100 DUP(0)

...

lea esi, var ; загрузить в EAX второй

mov eax, [esi+4] ; элемент массива VAR

 

Виды адресации операндов делятся на два вида:

Прямые — эффективный адрес операнда находится непосредственно в коде команды

Косвенные — в самой команде находится лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах.

Относительная прямая адресация:

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

jzMETKA ; переход на метку METKA, если ZF=1

moval, 5

...

METKA:

Абсолютная прямая адресация:

Эффективный адрес операнда формируется из поля смещения команды.

moveax, DWORD PTR [0h] ; загружает в eax

; двойное слово

; с адреса ds:0h

Косвенная базовая адресация:

Эффективный адрес операнда может находится в любом регистре кроме ESP и EBP.

moveax, [ecx]

moval, [ebx]

Косвенная базовая адресация со смещением:

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

.data

var DD 5, 6, 7, 8

.code

movedx, OFFSET var ; загружаем адрес var

moveax, [edx+8h] ; доступ к 7

movedx, 4 ;

moveax, var[edx] ; доступ к 6

Косвенная индексная адресация со смещением:

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

.data

var DD 5, 6, 7, 8

.code

movedx, 3 ; загружаем адрес var

moveax, var[edx*4] ; доступ к 8 (=var+edx*4)

Косвенная базовая индексная адресация:

Эффективный адрес формируется как сумма двух регистров общего назначения: базового и индексного. Для индексного регистра возможно масштабирование.

.data

var DD 5, 6, 7, 8

.code

movebx, OFFSET var

movesi, 2

moveax, [ebx][esi*4] ; доступ к 7 (=ebx+esi*2)

Косвенная базовая индексная адресация со смещением:

Эффективный адрес формируется как сумма двух регистров общего назначения (базового и

индексного) и смещения.

.data

var DD 5, 6, 7, 8

.code

movebx, 4

movesi, 2

moveax, var[ebx][esi*4] ; доступ к 8 (=var+ebx+esi*4)

 

Все 32-хразрядные микропроцессоры Intel семейства Westmere, начиная с двухъядерных процессоров Clarkdale (Core i5 650), поддерживают шесть новых инструкций SIMD, которые Intel назвал AES-NI.

ММХ-технология

В основе технологии ММХ лежит расширение набора команд (57 новых команд) для эффективного выполнения типичных мультимедийных алгоритмов, к числу которых относятся и многие алгоритмы, характерные для цифровой обработки сигналов. Это первое существенное изменение в системе команд микропроцессоров семейства х86, начиная с выхода в свет микропроцессора i386. В технологии ММХ использована модель обработки данных SIMD, предусматривающая одновременное выполнение операции над несколькими целочисленными операндами разрядностью 1, 2 или 4 байта.

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

1.арифметические,

2.логические,

3.сдвига,

4.сравнения,

5.передачи данных,

6.упаковки,

7.распаковки,

8.отмены режима ММХ.

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

Стремясь устранить недостатки, свойственные ММХ-технологии (отсутствие ММХ-команд для работы с плавающей запятой, невозможность выполнения операций с плавающей запятой при выполнении ММХ-команд), Intel решила внести необходимые дополнения в архитектуру процессора Pentium III.

 

SSE-расширение

Новые 70 команд SSE-расширения делятся на 4 категории:

1.SIMD-команды обработки данных в формате с плавающей запятой одинарной точности (SPFP-команды);

2.дополнительные SIMD-команды для обработки целочисленных данных;

3.команды управления кэшированием;

4.команды сохранения и восстановления состояния процессора.

 

SPFP-команды используют 8 новых 128-разрядных регистров (ХММ-регистры) и новый тип данных – 128-разрядное значение, содержащее 4 последовательно расположенных («упакованных») 32-разрядных числа с плавающей запятой одинарной точности. При выполнении инструкций с ХММ традиционное оборудование FPU/MMX не используется, что позволяет эффективно смешивать инструкции ММХ с инструкциями над операндами с плавающей точкой.

 

Большинство SPFP-команд имеют два операнда. Данные, содержащиеся в первом операнде, после выполнения команды, как правило, замещаются результатами, а данные, содержащиеся во втором операнде, остаются неизменными.

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

Скалярные операции выполняются над младшими (занимающие разряды 0–31) элементами данных двух операндов. Остальные три элемента данных не изменяются.

В расширение SSE включены дополнительные SIMD-команды для работы с целочисленными данными. Эти новые команды расширяют возможности существующего набора команд технологии ММХ. Они выполняют SIMD-операции над несколькими целочисленными данными, упакованными в 64-разрядные группы, загружают и хранят упакованные данные в 64-разрядных ММХ-регистрах.

Кроме того, в SSE введены команды нового типа, обеспечивающие:

1.управление кэшированием данных с целью повышения эффективности использования кэш-памяти и сокращения числа обращений к основной памяти;

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

 

Первая группа команд выполняет запись данных из ММХ (ХММ) регистра в память, минуя кэш. Вторая – обеспечивает запись данных из памяти в кэш различных уровней.

 

Кроме ХММ-регистров в микропроцессоре Pentium III появился новый регистр состояния и управления MXCSR. Для работы с этими регистрами требуется поддержка как со стороны процессора, так и со стороны операционной системы. Чтобы прикладные программы и ОС могли сохранять и восстанавливать состояния новых компонентов процессора, введено несколько команд управления. Первая группа команд управления обеспечивает сохранение в памяти содержимого регистра МХCSR и, наоборот, загружает слово состояния из памяти в регистр MXCSR. Вторая группа – сохраняет в памяти состояние процессора (состояние регистров данных FPU, MMX-регистров, ХММ-регистров) и восстанавливает ранее сохраненное состояние процессора.

 

<== предыдущая лекция | следующая лекция ==>
Нестабильная стенокардия. | Требования к режиму питания в стационаре.

Дата добавления: 2021-10-28; просмотров: 280;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.031 сек.