Э. Таненбаум - Архитектура компьютера (1127755), страница 109
Текст из файла (страница 109)
Команды ЦйгаЗРАЙС П! Все целочисленные команды пользовательского режима ЫггаЯРАКС 1П перечислены в табл. 5.10, при этом используются следующие обозначения: + 8КС вЂ” регистр-источник; + ПВТ вЂ” регистр-приемник; + К1 — регистр-источник; + 82 — источник (регистр или непосредственно данные); + А1)1)К вЂ” адрес памяти; + ТКАРФ вЂ” номер системного прерывания; + ЕСХ вЂ” код функции; + МАВК вЂ” тип операции; + СОХ вЂ” константа; + Ч вЂ” обозначение регистра; + СС вЂ” набор кодов условия; + К вЂ” регистр-приемник; + сс — условие; + г — ЕХ, ЕЕУ„Х, ЫХ, СХ или СЕХ. В таблице не представлены команды с плавающей точкой, команды управления (например, команды управления кэш-памятью, команды перезагрузки системы), команды, включающие отличные от пользовательских адресные пространства, устаревшие команды.
Набор команд удивительно мал. Оно и понятно, ведь Исга8РАКС П1 — это К18С-процессор. Структура команд ЕОАО и 5ТОйЕ очень проста. Эти команды имеют варианты для 1, 2, 4 и 8 байт. Если в 64-разрядный регистр загружается число размером меньше 64 бит, это число может быть либо расширено по знаку, либо дополнено нулями.
Существуют командгя для обоих вариантов. Следующая группа команд предназначена для арифметических операций. Команды с буквами СС в названии устанавливают биты кода условия. В С18С- машинах большинство команд устанавливают кодгя условия, но в К1ЯС-машине это нежелательно, поскольку ограничивает способность компилятора сортировать команды, чтобы минимизировать задержки.
436 Глава 5. Уровень архитектуры набора команд Таблица 5.10. Основные команды процессора 01(гавРАНС 111 Команда Описание Команды загрузки (.088 АООН, Овт Загрузка Загрузка Загрузка Загрузка Загрузка Загрузка Загрузка байта со знаком (8 бит] байта без знака (8 бит) 1п1ЫЖаЫ бобу = 'кООВ АООЙ, ОВТ ЬОЗН АООН, 08Т полуслова со знаком (8 бит) полуслова без знака (16 бит) слова со знаком (32 бита) слова без знака (32 бита) расширенного слова (64 бита) ОООН АООй, 08Т ЬОЗУУАООй, 08Т ЬО(й)У АООЙ, 08Т (ОХ АООН, 08Т Команды сохранения ВТВ вйС, АООН Сохранение байта (8 бит) Сохранение полуслова (16 бит) ВТН ЗНС, АООН вт)К( ЗНС, АООЙ ЗТХ ВНС, АООН Арифметические команды АОО Н1, 82, 08Т АООСС АООС АООССС 808 Н1, 82, 08Т 80ВСС ВОВС 80ВССС МО(Х Н1, 82, 08Т 80(УХ Н1, 82, 08Т 00!УХ Н1, 82, 08Т ТАОСС Н1, 82, 08Т Команды обычного и циклического сдвига ви.
Нт, вг, овт ЗШ( Н1, 82, 08Т вй1.81, 82, 08Т вй1.Х й1, 82, 08Т ЗНА Н1, 82, 08Т ЗНАХ Й1, 82, 08Т Логические команды АМО й1, 82, ОЗТ АМОСС й1, 82, ОВТ АМОН й!, 82, 08Т Сохранение слова (32 бита) Загружает расширенное слово (64 бита) Сложение Сложение и установка кода условия Сложение с переносом Сложение с переносом и установкой кода условия Вычитание Вычитание с установкой кода условия Вычитание с переносом Вычитание с установкой кода переноса Умножение Деление с учетом знака Деление без учета знака Сложение с использованием поля тета Логический сдвиг влево (32 бита) Логический сдвиг влево (64 бита) Логический сдвиг вправо (32 бита) Логический сдвиг вправо (64 бита) Арифметический сдвиг вправо (32 бита) Арифметический сдвиг вправо (64 бита) Логическое И Логическое И с установкой кода условия Логическое НЕ-И Типы команд 437 Описание Команда Логическое НЕ-ИЛИ с установкой кода условия Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ ХОВ В1, 82, 08Т ХОВСС В1, 82, 08Т Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ с установкой кода условия Логическое ИСКЛЮЧАЮЩЕЕ НЕ-ИЛИ ХМОВ й1, 82, 08Т ХМОВСС Логическое ИСКЛЮЧАЮЩЕЕ НЕ-ИЛИ с установкой кода условия Команды передачи управления ВРсс АООВ ВРг ВВС, АООВ Системное прерывание при определенном условии Выборка данных из памяти с упреждением Атомарная операция загрузки/сохранения Барьер в памяти Установка битов с 10-го по 13-й Перемещение при определенном условии Перемещение в зависимости от значения регистра Пустая операция Подсчет генеральной совокупности Чтение регистра кода условия Запись регистра кода условия Чтение счетчика команд Если изначальный порядок следования команд А ...
В ... С, где А устанавливает коды условий, а В их проверяет, то компилятор не сможет вставить команду С между А и В, если тоже С устанавливает коды условий. По этой причине многие команды имеют два варианта, а компилятор обычна использует ту команду, которая не устанавливает коды условий, если не планируется проверить их позже.
АМОМСС й1, 82, 08Т Ой В1, 82, 08Т ОВСС й1, 82, 08Т ОВМ В1, 82, 08Т ОВМСС В1, 82, 08Т САНЬ АООВ ВЕТОВМ АООВ ЗМРь АООВ, 08Т ВАЧЕ й!, 82, 08Т ВЕВТОВЕ й1, 82, 08Т Тсс СС, ТВАРЕ РВЕРЕТСН РМС ьОВТОВ АСОВ, й МЕМВАВ МАЗК Прочие команды ВЕТН! СОМ, 08Т МОЧсс СС, 82, 08Т МОЧг, В1, 82, 08Т МОР РОРС 81, 08Т ВОССВ Ч, 08Т УЧЯССВ, й!, 82, Ч ВОРС Ч, 08Т Логическое НЕ-И с установкой кода условия Логическое ИЛИ Логическое ИЛИ с установкой кода условия Логическое НЕ-ИЛИ Переход с прогнозированием ветвлений Переход в регистр Вызов процедуРы Выход из процедуры Переход со связыванием Расширение регистровых окон Восстановление регистровых окон 438 Глава 5.
Уровень архитектуры набора команд Поддерживаются также команды умножения, деления с учетом знака и деления без учета знака. Кроме того, поддерживается специальный формат 30-разрядных чисел с автоматическим опознаванием типа данных за счет поля тега. Этот формат используется для таких языков, как Зша11га!к и Рго1оя, в которых тип переменных может меняться во время выполнения программы.
При наличии таких чисел компилятор вставляет, например, команду АОО, а во время выполнения программы машина определяет, какая именно команда АОО нужна в данном случае, целочисленная или с плавающей точкой. Группа команд сдвига включает одну команду сдвига влево и две команды сдвига вправо.
Каждая из них имеет два варианта: 32- и 64-разрядный. Команды сдвига в основном используются для манипулирования битами. Большинство С15С-машин имеют довольно много разнообразных команд обычного и циклического сдвига, но практически все они совершенно бесполезны. Логические команды аналогичны арифметическим. Эта группа включает команды АМО (И), Ой (ИЛИ), ХОй (ИСКЛЮЧАЮЩЕЕ ИЛИ), АМОН (НЕ-И), Ойй (НЕ-ИЛИ) и ХМОй (ИСКЛЮЧАЮЩЕЕ НЕ-ИЛИ).
Полезность последних трех команд сомнительна, но они могут выполняться за один цикл и не требуют практически никакого дополнительного аппаратного обеспечения, а потому часто включаются в набор команд. Даже разработчики К15С-машин порой поддаются искушению. Следующая группа содержит команды передачи управления. Символами ВРсс обозначена группа команд, которые совершают переходы в зависимости от различных условий, а также указывают компилятору, требуется или нет прогнозирование ветвлений.
Команды ВРг проверяют регистры и совершают переход, если условие подтверждается. Предусмотрено два способа вызова процедур. Для команды САЕС используется вариант 4 формата с 30-разрядным смещением (см. рис. 5.11). Этого значения достаточно для того, чтобы добраться до любой команды в пределах 2 Гбайт от вызывающего оператора в любом направлении. Команда САСС копирует адрес возврата в регистр К15, который после вызова превращается в регистр КЗ1. Второй способ вызова процедуры — использование команды АНРЕ в варианте 1а или 1Ь формата (см.
рис. 5.11). Эта команда позволяет помещать адрес возврата в любой регистр. Такая форма может быть полезной в том случае, если целевой адрес вычисляется в ходе выполнения программы. Команды 5АУЕ и йЕ5ТОйЕ манипулируют регистровым окном и указателем стека. Обе команды совершают прерывание, если следующее (предыдущее) окно недоступно.
В последней группе содержатся команды,не попавшие ни в одну из других групп. Команда 5ЕТН1 введена из-за невозможности поместить 32-разрядный непосредственный операнд в регистр. Команда 5ЕТН1 устанавливает биты с 10-го по 31-й, а затем следующая команда передает оставшиеся биты, используя непосредственный формат. Команда РОРС подсчитывает число установленных (единичных) битов в слове. Последние три команды предназначены для чтения и записи специальных регистров.
Типы команд 439 Ряд широко распространенных С)5С-команд, не представленных в табл. 5.10, можно легко смоделировать, использовав либо регистр СО, либо операнд-константу (см. вариант 1Ь формата на рис. рис. 5.11). Некоторые из них перечислены в табл. 5.11.
Эти команды распознаются ассемблером Шгга5РАКС П1 и часто вставляются в код компиляторами. При моделировании многих из них используется тот факт, что регистр СО связан с аппаратным нулем и запись в этот регистр не дает никакого эффекта. Таблица 5.11. Некоторые моделируемые команды О)(таЯРАНС )В Команда Описание МОЧ ЗНС, 08Т СМР ЯНС1, ЗНС2 ТЗТ ЗНС Выполнение команды ОН с операндами ЯНС и 60 и сохранение результата в ОЗТ Вычитание ЗНС2 из ЯНС1 (команда ЯОВСС) и сохранение результата в 60 Выполнение команды ОНСС с операндами ЯНС и 60 и сохранение резул~тата в 60 Выполнение команды ХМОН с операндами ОЯТ и 60 Вычитание ЯНС2 из ЯНС! (команда 80ВСС) и сохранение результата в 60 Прибавление 1 к 08Т (непосредственный операнд) — команда А00 Вычитание 1 из 08Т (непосредственный операнд) — команда 80В Выполнение команды ОН с операндами 60 и 60 и сохранение результата в 08Т Выполнение команды ЯЕТН! с операндами 60 и О Выполнение команды ЗМРь% (Т е 8, %60 ЫОТ 08Т МЕ6 ОЗТ !МС ОЯТ ОЕС ОЗТ Сьн ОЗТ НОР НЕТ Команды 8051 Набор команд 8051 очень прост.