Э. Таненбаум - Архитектура компьютера (1127755), страница 108
Текст из файла (страница 108)
При наличии ПДП центральному процессору остается только инициализировать несколько регистров, после чего он может заниматься чем-нибудь другим, пока передача данных не завершится. При завершении передачи центральный процессор получает сипщл прерывания от контроллера ПДП. Некоторые контроллеры ПДП содержат 2, 3 и более наборов регистров, так что они могут управлять несколькими процессами передачи одновременно. Отметим, что если какое-нибудь высокоскоростное устройство, например диск, будет запускаться контроллером ПДП, потребуется очень много циклов шины и для обращений к памяти, и для обращений к устройству. Во время этих циклов центральному процессору придется ждать (контроллер ПДП всегда имеет приоритет перед ЦП на доступ к шине, поскольку устройства ввода-вывода обычно не допускают задержек) — этот процесс называется захватом цикла памяти.
Однако издержки, связанные с захватом циклов, не идут ни в какое сравнение с экономией, получаемой благодаря тому, что при передаче каждого байта (слова) не нужно обрабатывать прерывание. Команды процессора Репбигп 4 В этом н следующих двух подразделах мы рассмотрим наборы команд трех машин: Репг1пш 4, (ЛСгаБРАКС П1 и 8051. Каждая из них поддерживает базовые команды, обычно получаемые в результате работы компиляторов, а также дополнительные команды, которые используются редко или используются исключительно операционной системой. Начнем с Репгшш 4.
Команды Репгшш 4 представляют собой причудливую смесь 32-разрядных команд, а также команд, появившихся еще в процессоре 8088. В табл. 5.9 приведены наиболее распространенные целочисленные команды, при этом используются следующие обозначения: + 5КС вЂ” источник данных; + ПВТ вЂ” приемник данных; + № — количество битов, на которое происходит сдвиг; + ЕЧ вЂ” количество локальных переменных.
Перечень далеко не полный, поскольку в него не вошли команды с плавающей точкой, команды управления, а также некоторые нечасто встречающиеся целочисленные команды (например, использование 8-разрядного байта для выполнения поиска по таблице). Тем не менее таблица дает представление о том, какие действия может выполнять Репйшп 4. Многие команды РепВцш 4 обращаются к одному или к двум операндам, которые находятся в регистрах или памяти.
Например, бинарная команда А00 складывает два операнда, а унарная команда 1МС увеличивает значение одного операнда на 1. Некоторые команды имеют несколько похожих вариантов. Например, команды сдвига могут сдвигать слово либо вправо, либо влево, с учетом знакового бита или без учета. Большинство команд имеют несколько различных кодировок в зависимости от природы операндов. 432 Глава 5. Уровень архитектуры набора команд Таблица 5.9.
Наиболее распространенные целочисленные команды процессора Реп1когп 4 Команда Описание Команды перемещения МОУ 08Т, ВНС РЦВН ВНС Перемещение из ВНС в 08Т Помещение из ВНС в стек РОР 08Т ХСНО 081, 082 'кЕА 08Т, ЗНС СМОУ 08Т, ВНС Сложение ЗНС и 08Т Вычитание ВНС из 08Т Двоична-десятичные команды ААЗ ААО Команды обычного н циклического сдвига Команды тестирования и сравнения ТВТ ЗНС!, ВНС2 Операнды логической операции И, установка флагов Арифметические команды А00 08Т, ЗНС 808 08Т, ВНС М1Л. ЗНС !М(Л ВНС 0!Н ВНС 10У ВНС АСС 08Т, ВНС ЗВВ 08Т, ВНС (НС 08Т ОЕС 08Т НЕС 08Т Логические команды АНО 08Т, ЗНС ОН 08Т, ВНС ХОН 08Т, ВНС НОТ 08Т ВА1./ЗАН 08Т, № ВН(/ВНН 08Т, № НОЕ/НОН 08Т, № НО(/НОН 08Т, № Выталкивание слова из стека и помещение его в 08Т Смена мест 081 и 082 Загрузка действительного адреса ЗНС в 08Т Условное перемещение Умножение ЕАХ на ЗНС (без учета знака) Умножение ЕАХ на ЗНС (с учетом знака) Деление ЕОХ;ЕАХ на ЗНС (без учета знака) Деление ЕОХ;ЕАХ на ЗНС (с учетом знака) Сложение ВНС с 08Т и прибавление бита переноса Вычитание 08Т и перенос из ЗНС Инкремент (прибавление 1) 08Т Декремент (вычитание 1) 08Т Отрицание 08Т (вычитание 08Т из 0) Десятичная коррекция Коррекция АВСП-кода для сложения Коррекция АЗСП-кода для вычитания Коррекция АВСП-кода для умножения Коррекция АВСП-кода для деления Логическая операция И над ВНС и 08Т Логическая операция ИЛИ над ВНС и ОВТ Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ над ЗНС и ОВТ Замещение 08Т дополнением до 1 Сдвиг 08Т влево/вправо на № бит Логический сдвиг 08Т влево/вправо на № бит Циклический сдвиг 08Т влево/вправо на № бит Циклический сдвиг 08Т по переносу на № бит Типы команд 433 Описание Команда СМР ЗНС1, ЯНС2 Команды передачи управления ЗМР АООН ЗххАООН САЕЕ АООН НЕТ !НЕТ 1.ООРхх !МТ АООН ЕНТО Команды обработки строк 0005 ЯТОЗ МОУЗ СМРЗ ЯСАЯ с юдами условий Команды для работы ЯТС СМС ЯТО С1 0 ЗТ! РОЗНЕО РОРЕО 1АНР ВАНЕ Прочие команды УМАР ОЯТ Ожидание прерывания СУУО ЗУУОЕ ЕМТЕН 8!2Е, 1.У 1.ЕАЧЕ МОР Н1.Т !М А~, РОНТ СОТ Ройт, АЕ УУА!Т Установка флагов на основе разности ЯНС1 — ЯНС2 Переход к адресу Условные переходы на основе флагов Вызов процедуры по адресу Выход из процедуры Выход из прерывания Продолжение цикла до выполнения определенного условия Программное прерывание Прерывание, если установлен бит переполнения Загрузка строки Сохранение строки Перемещение строки Сравнение двух строк Сканирование строки Установка бита переноса в регистре ЕЕ1А68 Сброс бита переноса в регистре ЕЕ1А68 Дополнение бита переноса в регистре ЕР!.А65 Установка бита направления в регистре ЕГ1А65 Сброс бита направления в регистре ЕНА65 Установка бита прерывания в регистре ЕР1А68 Сброс бита прерывания в регистре ЕЕ1А68 Помещение значения из регистра ЕР1А68 в стек Выталкивание значения из стека в регистр ЕР!.А68 Загрузка АН из регистра ЕР1А68 Сохранение АН в регистре ЕЕ1А68 Изменение порядка следования байтов в ОЯТ Расширение ЕАХ до ЕОХ:ЕАХ для деления Расширение 18-разрядного числа в АХ до ЕАХ Создание стекового фрейма с байтами размера Удаление стекового фрейма, созданного командой ЕМТЕН Пустая операция Останов Перенос байта из порта в АЛУ Перенос байта из АЛУ в порт 434 Глава 5.
Уровень архитектуры набора команд При выполнении команд источники данных (8КС) не изменяются, а приемники (1)8Т) обычно изменяются. Существуют определенные правила, определяющие, что может быть источником, а что приемником, но здесь мы не будем о них говорить. Многие команды имеют три варианта: для 8-, 16- и 32-разрядных операндов соответственно. Они различаются по коду операции и/или по одному биту в команде. В табл. 5.9 приведены в основном 32-разрядные команды.
Для удобства мы разделили команды на несколько групп. Первая группа содержит команды, которые перемещают данные между компонентами машины: регистрами, памятью и стеком. Вторая группа содержит арифметические команды для операций со знаком и без знака. При умножении и делении 64-разрядное произведение или делимое хранится в двух регистрах: ЕАХ (младшие биты) и ЕОХ (старшие биты). Третья группа включает двоично-десятичную арифметику.
Здесь каждый байт рассматривается как два 4-разрядных полубайта. Каждый полубайт содержит 1 десятичный разряд (от 0 до 9). Комбинации битов от 1010 до 1111 не используются. Таким образом, 16-разрядное целое число может содержать десятичное число от 0 до 9999. Хотя такая форма хранения неэффективна, она устраняет необходимость преобразования десятичных входных данных в двоичные, а затем обратно в десятичные для вывода. Эти команды служат для выполнения арифметических действий над двоично-десятичными числами.
Они широко используются в программах на языке СОВ01.. Логические команды и команды сдвига манипулируют битами в слове или байте. Существует несколько комбинаций. Следующие две группы связаны с проверкой, сравнением и осуществлением перехода в зависимости от полученного результата. Результаты проверки и сравнения хранятся в различных битах регистра ЕЕЕАО5. Символами 1хх обозначена группа команд, выполняющих условный переход в зависимости от результатов предыдущего сравнения (то есть в зависимости от битов в регистре ЕН.АО8).
В Репг(цш 4 есть несколько команд для загрузки, сохранения, перемещения, сравнения и сканирования символьных строк или слов. Перед этими командами может стоять специальный префиксный байт кЕР (гереГЖоп — повторение), который заставляет команду повторяться до тех пор, пока не будет выполнено определенное условие (например, пока регистр ЕСХ, значение которого уменьшается на 1 после каждого повторения, не станет равным 0). Таким образом, различные действия (перемещение, сравнение и т. д.) могут производиться над произвольными блоками данных. Следующая группа команд управляет кодами условий. В последнюю группу входят команды, которые не вошли ни в одну из предыдущих групп.
Это команды перекодирования, управления, ввода-вывода и остановки процессора. Команды Репгшш 4 имеют ряд префиксов. Один из них (кЕР) мы уже упомянули. Префикс — это специальный байт, который может ставиться практически перед любой командой (подобно И10Е в 1ЛИ). Как уже отмечалось, префикс кЕР заставляет команду, идущую за ним, повторяться до тех пор, пока регистр ЕСХ не примет значение О. Префиксы йЕР1 и кЕРМ1 заставляют команду выполняться Типы команд 435 снова и снова, пока код выполнения условия Х не примет значение 1 или 0 соответственно. Префикс ЕОСК резервирует шину для всей команды, чтобы можно было осуществлять межпроцессорную синхронизацию. Другие префиксы используются для того, чтобы команда работала в 16- или 32-разрядном формате.
При этом меняется не только длина операндов, но и полностью переопределяются режимы адресации. Наконец, в Репбцш 4 реализована сложная схема сегментации, в которой задействованы код, данные, стек и дополнительные сегменты (наследие 8088). Префиксы позволяют регламентировать применение тех или иных сегментов при обращении к памяти. К счастью, эта проблема для нас не слишком актуальна.