- •Глава 16. Типы и форматы команд
- •16.1. Команды пересылки данных
- •16.2. Команды арифметической и логической обработки
- •16.3. Команды для работы со строками
- •16.4. Simd-команды
- •Перспективы векторных операций
- •16.5. Команды преобразования форматов
- •16.6. Команды ввода-вывода
- •16.7. Команды управления ходом выполнения программы
- •16.8. Команды ветвления
- •16.9. Команды пропуска
- •16.10. Форматы команд
- •Длина команды
- •Количество адресов в команде
- •16.11. Контрольные вопросы
Глава 16. Типы и форматы команд
Несмотря на различие в системах команд разных компьютеров, основные типы команд в них аналогичны. Это:
команды пересылки данных;
команды арифметической и логической обработки;
команды работы со строками;
команды SIMD (векторные команды);
команды преобразования данных;
команды ввода-вывода;
команды управления потоком команд.
16.1. Команды пересылки данных
Это наиболее распространенный тип машинных команд. В таких командах должна содержаться следующая информация:
адреса источника и получателя операндов — адреса ячеек оперативной памяти, номера регистров ядра процессора или информация о том, что операнды расположены в стеке;
длина подлежащих пересылке данных (обычно в байтах или словах), заданная явно или косвенно;
способ адресации каждого из операндов, с помощью которого в соответствии с содержимым адресной части команды может быть сформирован адрес операнда.
Рассматриваемая группа команд обеспечивает передачу информации между ядром процессора и оперативной памятью, внутри ядра процессора и между ячейками оперативной памяти. Пересылочные операции внутри ядра процессора имеют тип «регистр-регистр». Передачи между ядром процессора и оперативной памятью относятся к типу «регистр - оперативная память», а пересылки в оперативной памяти — к типу «оперативная память - оперативная память».
16.2. Команды арифметической и логической обработки
В данную группу входят команды, обеспечивающие арифметическую и логическую обработку данных в различных формах их представления. Для каждой формы представления чисел в архитектуре обычно предусматривается некий стандартный набор операций. Как правило, это: сложение; вычитание; умножение; деление; конъюнкция; дизъюнкция; неэквивалентность и некоторые другие в зависимости от области применения компьютера.
Помимо вычисления результата выполнение арифметических и логических операций сопровождается формированием в АЛУ признаков (флагов), характеризующих этот результат. Наиболее часто фиксируются такие признаки, как:
Z (Zero) — нулевой результат;
N (Negative) — отрицательный результат;
V (over-flow) — переполнение разрядной сетки;
С (Carry) — наличие переноса.
16.3. Команды для работы со строками
Для работы со строками в архитектуре обычно предусматриваются команды, обеспечивающие перемещение, сравнение и поиск строк. Во многих компьютерах перечисленные операции выполняются программно с использованием процедур.
16.4. Simd-команды
Название данного типа команд представляет собой аббревиатуру от Single Instruction Multiple Data — буквально «одна команда — много данных». В отличие от обычных команд, оперирующих двумя операндами, SIMD-команды обрабатывают сразу две группы операндов (в принципе их можно называть групповыми или векторными командами). Операнды таких команд обычно представлены в одном из упакованных форматов.
С 1992 года команды типа SIMD становятся неотъемлемым элементом архитектуры процессоров фирм Intel и AMD. Поводом послужило широкое распространение мультимедийных приложений. Видео, трехмерная графика и звук в компьютерах представляются большими массивами данных, элементы которых чаще всего обрабатываются идентично. Так, при сжатии видео и преобразовании его в формат MPEG один и тот же алгоритм применяется к тысячам разрядов данных. В трехмерной графике часто встречаются такие операции как: интерполирование и нормировка векторов, вычисление скалярного произведения векторов, интерполяция компонентов цвета и т. д. Включение SIMD-команд в архитектуру позволяет существенно ускорить подобные вычисления.
Первой SIMD-команды в архитектуру универсальных процессоров для персональных компьютеров ввела фирма Intel. Команды ММХ обеспечивали параллельную обработку 64-разрядных векторов, состоящих из упакованных целых чисел: 8 байтов; 4-х полуслов, 2-х слов; 1-го двойного слова. При выполнении арифметических операций каждое из чисел, входящих в группу, рассматривается как самостоятельное, без связи с соседними числами. Учитывая специфику обрабатываемой информации, команды ММХ реализовали так называемую арифметику с насыщением: если в результате сложения образуется число, выходящее за пределы отведенных под него позиций, оно заменяется наибольшим двоичным числом, которое в эти позиции помещается.
В дальнейшем были введены новые форматы векторных данных и, соответственно, расширены наборы команд для работы с этими векторными данными.
Первоначально были введены 128-разрядные векторные регистры XMM. В каждом таком регистре располагался вектор данных, состоящий: для целых чисел из: 16 байтов; 8-ми полуслов, 4-х слов; 2-х двойных слов; 1-го учетверенного слова; для чисел с плавающей точкой из: 4-х 32-разрядных чисел с плавающей точкой одинарной точности; 2-х 64-разрядных чисел с плавающей точкой удвоенной точности.
Следующим шагом стало введение 256-разрядных векторных регистров YMM (AVX). В каждом YMM-регистре располагался вектор данных, состоящий для чисел с плавающей точкой из 8-ми 32-разрядных чисел с плавающей точкой одинарной точности или 4-х 64-разрядных чисел с плавающей точкой удвоенной точности, или 2-х 128-разрядных данных целочисленного формата.
SIMD-команды имеются не только в архитектуре процессоров персональных компьютеров фирм Intel, AMD, но и в ряде других архитектур процессоров для высокопроизводительной обработки больших массивов данных.
Набор SIMD-команд очень обширный. Это:
обычные арифметические команды для обработки векторов (целых чисел разных форматов, чисел с плавающей точкой одинарной и удвоенной точности);
скалярное произведение векторов;
преобразования чисел из одних форматов в другие;
чтение векторов из оперативной памяти в векторный регистр;
запись содержимого векторного регистра в оперативную память;
обмен содержимым между векторными регистрами т.п.
