К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 47
Текст из файла (страница 47)
3.47. плененные подпрограммы на языке ассемблера !А-32 Первая подпрограмма 2100 5РВ1 Р~ЛН МОЪг Р05Н Р1ЛН РПЗН РЫЗН МОЪ' МОЪ' МОЪ' РОР РОР РОР РОР РОР КЕТ Вторая подпрограмма 3000 5БВ2: РУЗН МОЪ' РБ5Н Р!ЛН МОЪ' ЕВК ЕВК,ЕЗР ЕАХ ЕВХ ЕСХ ЕРХ ЕАХ,]ЕВК-н8] ЕВХ ]ЕВКОЮ!2] Помещение параметра в стек Выталкивание результата работы 5РВ2 в ЕСХ Восстановление регистра указателя на фрейм Возврат в главную программу Восстановление регистра указателя на фрейм Возврат в первую подпрограмму 206 Глава 3.
Системы команд процессоров АВМ, Мошго!а и !Ше~ Стековый фрейм для второй подпрограммы ЕВР— в Стековый фрейм для первой подпрограммы ЕВР— т Старая вершина стека Рис. 3.48. Стековые фреймы длл программы, представленной на рнс 3.47 В завершение темы вызова подпрограмм мы рассмотрим пример обработки вложенных вызовов. На рис. 3.47 приведен код программы на языке ассемблера 1А-32, зквивалентной программе, представленной на рис.
2.28. Стековые фреймы обоих подпрограммы вы видите на рис. 3.48. Указателем на фрейм служит регистр ЕВР. Структура вызывающей программы и подпрограмм очень близка к структуре кода на рис. 2.28. Однако существенным отличием кода для 1А-32 является то, что для сохранения и восстановления регистров в нем применяются последовательности команд Р11БН и РОР, а не команды МочеМц1с1р1е. В наборе команд 1А-32 имеются команды Р11БНАП и РОРО, с помощью которых можно сохранить в стеке и восстановить из него все восемь регистров общего назначения, но в программе на рис.
3.47 мы предпочли воспользоваться отдельными командами Р~ЛН и РОР, поскольку в подпрограммах задействована только половина всех регистров. 3.23. Другие команды 207 3.23. Другие команды Мы рассмотрели лишь малую часть набора команд архитектуры 1А-32. Еще не- сколько важных команд будут представлены ниже. 3.23.1. Команды умножения и деления Кроме команд для сложения и вычитания целых чисел со знаком, описанных в разделе 3.17, в наборе команд 1А-32 имеются команды для целочисленного умножения и деления, а также для выполнения арифметических операций над числами с плавающей запятой. В общем случае в результате умножения двух 32-разрядных чисел получается произведение двойной длины, то есть 64-разрядное значение. Однако для многих приложений достаточно иметь результат одинарной длины, то есть 32-разрядное значение.
В подобных ситуациях используются разные команды. Результат одинарной длины генерирует команда 1М1П. ВЕС,згс помещающая 32-разрядное значение в регистр общего назначения ВЕС. Исходный операнд может находиться либо в регистре, либо в памяти. В случае 64-разрядного результата команда 1МШ згс использует в качестве второго операнда регистр ЕАХ. Исходный операнд может располагаться либо в регистре, либо в памяти. Произведение двойной длины по- мешается в два регистра: старшая половина разрядов результата сохраняется в регистре Е1)Х, а младшая — в регистре ЕАХ. Команда для выполнения целочисленного деления имеет следующий формат: П)~Ч згс Исходный операнд згс является делителем. Делимое всегда находится в регистре ЕАХ.
Перед выполнением команды знак делимого должен быть расширен на регистр Е1)Х. Для этого используется команда С1)Я (конвертирование двойного слова в четверное), которая не имеет операндов, поскольку всегда выполняется над регистрами ЕАХ и ЕПХ. Числа с плавающей запятой, о которых достаточно подробно рассказывается в главе 6, имеют гораздо больший диапазон значений, чем целые числа, и используются в первую очередь для научных вычислений. В архитектуре 1А-32 применяется полный набор арифметических операций с такими числами.
Их операнды и результаты располагаются в регистрах с плавающей запятой, показанных на рис. 3.37. Поддерживаются два формата чисел: с одинарной (32 разряда) и двойной (64 разряда) точностью. 3.23.2. Команды мультимедийного расширения Двухмерные графические и видеоизображения можно представить массивом, состоящим из большого количества точек.
Цвет и яркость каждой точки, называемой 208 Глава 3. Системы команд процессоров АНМ, Ьло1ого!а и 1п1е! пикселом, могут быть закодированы 8-битовым элементом данных. Обработка таких данных имеет две особенности. Во-первых, при обработке отдельных пикселов часто приходится выполнять очень простые арифметические и логические операции. Во-вторых, для некоторых приложений реального времени требуется исключительно высокая скорость вычислений.
Сказанное касается и обработки аудиосигналов и речи, представляемых последовательностью отсчетов непрерывного аналогового сигнала, генерируемых через фиксированные промежутки времени. Ускорить процесс обработки данных в приложениях обоих типов можно за счет разделения последовательности элементов данных (как правило, байтов или 16-разрядных слов) на маленькие группы, которые можно обрабатывать параллельно.
В наборе команд 1А-32 имеется множество таких, которые параллельно обрабатывают данные группами по 64 бита, называемыми четверными словами. (Четверное слово содержит восемь байт или четыре 16-разрядных слова.) Эти команды называются ММХ-командами или командами мультимедийного расширения (пгп111юед1а ехгепз1оп). Их операнды могут располагаться в памяти или в регистрах с плавающей запятой. Таким образом, эти регистры служат двойной цели: в них могут храниться числа с плавающей запятой или операнды ММХ-команд. При использовании в командах ММХ регистры обозначаются как ММΠ— ММ7.
Для пересылки 64-разрядных ММХ-операндов между памятью и регистрами ММХ используются специальные команды Моче. Команда РА1Н) В М М1,згс складывает соответствующие байты двух 8-байтовых операндов и помещает в регистр назначения восемь сумм. Исходный операнд может располагаться в памяти или в регистре ММХ, но операнд назначения обязательно должен находиться в регистре ММХ.
Подобные команды имеются как для операций по вычитанию, так и для логических операций. Типичной операцией, выполняемой в приложениях обработки сигналов, является свертка -- умножение короткой последовательности отсчетов входных сигналов на константы, называемые весовыми коэффициентами, и сложение произведений для получения значения выходного сигнала. Подобные операции осуществляются с помощью специальной команды ММХ, объединяющей умножение и сложение.
В ней используются 64-разрядные операнды ММХ, содержащие по четыре 16-разрядных элемента данных, представляющих отсчеты сигнала. 3.23.3. Векторные команды В архитектуре 1А-32 определен набор команд, предназначенных для выполнения арифметических операций над маленькими группами чисел с плавающей запятой. Команды 81М1) (51п8)е 1пз1гпсг1оп, Мп10р!е Пата — одиночный поток команд и множественный поток данных) полезны для векторных и матричных вычислений в научных приложениях. В терминологии 1пге! они называются командами потокового расширения Я1ЛЮ (Бггеащ1п8 81М1) Ехтепз1оп, ЯЕ).
Эти команды обрабатывают составные операнды длиной 128 бит, состоящие из четырех 32-разрядных чисел с плавающей запятой. Для хранения этих операндов имеются 3.24. Примеры программ 209 128-разрядные регистры (на рис. 3,37 не показаны). Двумя базовыми командами этой группы являются команды сложения и умножения. Они воздействуют на четыре соответствующие пары исходных 32-разрядных значений, которые находятся в составных 128-разрядных операндах, и помещают четыре отдельных результата в 128-разрядный операнд назначения. В этом разделе приводятся примеры программ для архитектуры 1А-32, рассмот- ренных в разделе 2.11. 3.24.1.
Программа для вычисления скалярного произведения двух векторов На рис. 3.49 приведена программа вычисления скалярного произведения двух векторов для процессоров архитектуры 1А-32. Начальные адреса этих векторов равны АУЕС и ВУЕС. Программа написана по образцу программы, показанной на рис. 2.33, В программе на рис.
3.49 для доступа к последовательным элементам векторов используется базовая индексная адресация. В качестве индексного регистра применяется регистр Е1)1. Коэффициент масштабирования равен 4, поскольку элементы векторов являются двойными словами (4 байта). В качестве счетчика цикла используется регистр ЕСХ,инициализированный значением и.
Это позволяет задействовать команду МООР (см. раздел 3.17 и рис. 3.40, б), которая сначала уменьшает значение регистра ЕСХ, а затем выполняет условный переход по адресу ЕООРЯТАКТ, если содержимое регистра ЕСХ не равно нулю. Предполагается, что произведение двух элементов векторов поместится в двойное слово, поэтому в команде умножения 1М1Л явно задан регистр назначения ЕРХ (см. раздел 3.23). ЕВР,АУЕС ЕВХ,ВУЕС ЕСХ,Х 1.ЕА ЕЕА МОУ МОУ ЕАХ,О МОУ ЕР1,0 1ООРЯТАКТ: МОУ 1М1Л.