Э. Таненбаум - Архитектура компьютера (1127755), страница 110
Текст из файла (страница 110)
Все они представлены в табл. 5.12. В каждой строке таблицы указан мнемонический код, краткое описание и режимы адресации для источников или приемников (входных или выходных регистров), обозначенных, соответственно, как 5СК или ЕХТ. Вполне объяснимо разнообразие команд )(ОЧ для перемещения данных между сумматором (АСС), регистрами и памятью.
Также предусмотрены команды помещения элементов в стек и их выталкивания из стека. Указатель стека устанавливается в специальном регистре. Память в диапазоне выше адреса 256 всегда является внешней, так как объем встроенной памяти 8051 равен 128 байт, а 8052 — 256 байт. Обращение к внешней памяти осуществляется только через 16-разрядный регистр ВРТК.
Группу команд перемещения дополняют разнообразные команды перестановки элементов регистров. В микросхеме 8051 реализованы простые арифметические команды сложения, вычитания, умножения и деления, причем две последние работают со строго определенными регистрами. Допустимы и широко применяются команды положительного и отрицательного приращения. Кроме того, предусмотрены команды логических вычислений и циклического сдвига. Далее в табл.
5.12 указаны побитовые операции. Например: 5ЕТВ 43 440 Глааа 5. Уровень архитектуры набора команд Рег. Неп. Ей З С Вит Ком. Описание моч Перемещение из ЗСЯ з АСС Да Да Да Да Да Да моч МОЧ МОЧ МОЧ МОЧС МОЧС МОЧХ МОЧХ МОЧХ РОЗИ Помещение ЗСЯ байта з стек Да Да Дз да Да ХСН Да ХСНО ЗУЧАР Перестановка полубайтов ЕХТ АОО Прибавление ЗСВ к АСС АООС ЗОВЕ !МС Да Да ОЕС 1МС Умножение М1й. Деление Десатичная коррекция ЕХТ ЗСЯ И АСС О1Ч ОА АМ 1. Да Дз Да Да Да Да Да Да Да Да Да Да Да Да Да Лд Да Да Да АМ1.
АСС И ЕХТ АМ. Ойь Ой1. АСС ИЛИ ЕХТ Ой!. Хй1. Хйь Хйь Сброс ЕХТ Таблица 5.12. Набор команд процессора 8051 Перемещение из ЗСВ в регистр Перемещение из ЗСй в память Перемещение из ЗСВ в ОЗУ через региотр Да Перемещение 16-разрядной константы в ОРТЯ Перемещение кода в АСС со омвшлнивм от ОРТВ Перемещение кода в АСС со смещением от РС Перемещение байта из внешнего ОЗУ в АСС Перемещение байта из внешнего ОЗУ з АСС ФОРТЯ Перемещение байта из АСС во внешнее ОЗУ Перемещение байта и АСС ЭОРТВ во внешнее ОЗУ Выталкивание байта из стека в ЕХТ Обмен данными между АСС и ЕХТ Обмен цифрой младшего разряда между АСС и ЕХТ Прибавление ЗСВ к АСС с переносом Вычитание ЗСЯ из АСС с займом Положительное приращение ЕХТ Отрицательное приращение ЕХТ Непосрадстванный операнд И ЕХТ ЗСй ИЛИ АСС Напосрадственный операнд ИЛИ ЕХТ ЗСВ ИСКЛЮЧАЮЩЕЕ ИЛИ АСС АСС ИСКЛЮЧАЮЩЕЕ ИЛИ ЕХТ Непосредственный операнд ИСКЛЮЧАЮЩЕЕ ИЛИ ЕХТ Да Да Да Да Да Да Да Да Ком.
Описание АСС Рег. Иеп. ФВ й С Бит СРЕ й(. Я(.С Циклический сдвиг ЕХТ влево путем переноаа Да йй Да Циклический сдвиг ЕХТ вправо через перенос Да Сброс бита ЯЯС С1.Я ВЕТВ Установка бита Ань АМ(. ОВ1. Ойь МОН МОН чН чМС ,18 дВС (.САц. ВЕТ А)МР Ц)МР чМР )МЕ С.)МЕ СчМЕ ОчМЕ МОР Пустая операция Образование дополнения ЕХТ Циклический сдвиг ЕХТ влево Циклический сдвиг ЕХТ вправо Дополнение бита ВСЯ И перенос Дополнение ВСЯ И перенос ВСЯ иди перенос Дополнение ВСЯ ИЛИ перенос Перемещение ВСВ к переносу Перемещение переноса к ВСЯ Относительный переход (если переноа) Относительный переход (если нет переноса) Относительный переход (если установлен бит прямого доступа) Относительный переход (если бит прямого доступа не установлен) Относительный переход (если бит прямого доступа установлен, а переноса нет) АСАЦ.
Вызов подпрограммы (11-разрядная алресация) Вызов подпрограммы (1б-разрядная адресация) Возврат после вызова подпрограммы Возврат после прерывания Короткий относительный переход (8-разрядная адресация) Абсолютный переход (11-разрядная агазесация) Абаалютный переход (16-разрядная щ(ресация) Косвенный переход относительно ОРЯ + АСС Переход при нулевом значении АСС Переход при ненулевом значении АСС Сравнение ВСЯ с АСС, переход при неравенстве Сравнение ВСВ с непосредственным операндом, переход при неравенстве Отрицательное приращение ЕХТ, переход при неравенстве нулю Типы команд 441 Да Да Да Да Да Да Да Да Да Да Да Да 442 Глава 5. Уровень архитектуры набора команд Эта операции устанавливает (делает равным 1) бит 43, но не оказывает влияния на остальные биты того же байта.
За командами побитовых операций в таблице следуют команды передачи управления, в частности переходов, вызовов подпрограмм, условных переходов (две команды) и сравнения, а также команда 0зйЕ, предназначенная для организации циклов. Сравнение наборов команд Рассмотренные наборы команд разительно отличаются друг от друга. Репбпш 4 — это классическая двухадресная 32-разрядная С15С-машина. Она пережила долгую историю, у нее особые и нерегулярные режимы адресации, и многие ее команды обращаются непосредственно к памяти. П)гга5РАКС П1— это современная трехадресная 64-разрядная К15С-машина с архитектурой загрузки/сохранения, всего двумя режимами адресации, компактным и эффективным набором команд.
Архитектура 8051 рассчитана на небольшой встроенный процессор, устанавливаемый на единственную микросхему. В основе набора команд компьютера Репггпш 4 лежат три основополагающих фактора: + обратная совместимость; + обратная совместимость; + и еще раз обратная совместимость. При нынешнем положении вещей никто не стал бы разрабатывать такую нерегулярную машину с таким небольшим количеством абсолютно разных регистров.
По этой причине для Рептшщ 4 очень сложно писать компиляторы. Из-за недостатка регистров компиляторам постоянно приходится сохранять переменные в памяти, а затем вновь загружать их, что очень невыгодно даже при 3-уров- невой кэш-памяти. Только благодаря таланту инженеров компании 1пге1 процессор Репггцш 4 работает достаточно быстро, несмотря на все недостатки его архитектуры команд. Но, как мы видели в главе 4, конструкция этого процессора чрезвычайно сложна. Весьма современный уровень архитектуры набора команд представлен в процессоре 1111га5РАКС П1.
Это — полная 64-разрядная архитектура (с шиной 128 бит). Процессор содержит множество регистров, а в наборе команд преобладают 3-регистровые операции; имеется также небольшая группа команд загрузки и сохранения. Все команды одного размера, хотя число форматов совершенно невообразимо. Большинство новых разработок очень похоже на П)тга5РАКС П1, но форматов команд у них меньше. В микросхеме 8051 реализован достаточно простой и стандартный набор команд, причем немного как самих команд, так и режимов адресации. Отличительные характеристики этого набора — 4 набора регистров для ускоренной обработки прерываний, возможность доступа к регистрам в пространстве памяти н на удивление мощные команды побитовой обработки.
Основное преимущество такого решения состоит в том, что оно реализуется на незначительном числе транзисторов. Отсюда экономия пространства при размещении на кристалле, а значит, снижение стоимости процессора. Поток управления 443 Поток управления Потоком управления называют последовательность выполнения команд в ходс работы программы. При отсутствии переходов и вызовов процедур команды вызываются из последовательных ячеек памяти.
Вызов процедуры влечет за собой изменение потока управления, выполнение последовательности прерывается, и начинается выполнение вызванной процедуры. Сопрограммы вызывают сходные изменения в потоке управления. Они нужны для моделирования параллельных процессов. Программы перехвата исключений и обработки прерываний тоже меняют поток управления при возникновении определенных ситуаций. Всс это мы обсудим в следующих подразделах.
Последовательный поток управления и переходы Большинство команд не меняют поток управления. После выполнения одной команды вызывается и выполняется та команда, которая расположена в памяти следом за выполненной. После выполнения каждой команды счетчик команд увеличивается на число, соответствующее длине команды. Значение счетчика команд представляет собой линейную функцию от времени — это значение растет на среднюю длину команды за средний промежуток времени. Иными словами, процессор выполняет команды в том же порядке, в котором они расположены в программе, как показано на рис. 5.22, а. Если программа содержит переходы, соответствие между порядком расположения команд в памяти и порядком их выполнения нарушается. При наличии переходов значение счетчика команд перестает быть монотонно возрастающей функцией от времени, как показано на рис.
5.22, б. В результате последовательность выполнения команд из самой программы уже не видна. тт х в о й о тт х и 3 о М о Время Время Рис. 6.22. Значение счетчика команд как функция от времени (приближенно): без переходов (а); с переходами (б) 444 Глава б. Уровень архитектуры набора команд Если программист не знает, в какой последовательности процессор будет выполнять команды, это может привести к ошибкам. Такое наблюдение вызвало к жизни известную статью о необходимости избегать в программах оператора доте [55].
Эта статья привела к революции в программировании, одним из результатов которой стало появление операторов, позволяющих лучше структурировать поток управления, чем оператор доте. Естественно, подобные программы в конце концов все равно компилируются в программы уровня 2, содержащие многочисленные переходы, которых требует реализация операторов 1т, н)пце и тому подобных высокоуровневых структур. Процедуры Самым важным инструментом структурирования программ является процедура.
С одной стороны, вызов процедуры, как и команда перехода, изменяет поток управления, но, в отличие от команды перехода, после выполнения процедуры управление возвращается команде, вызвавшей процедуру. С другой стороны, тело процедуры можно рассматривать как определение новой команды на более высоком уровне. С этой точки зрения вызов процедуры можно считать самостоятельной командой, даже если процедура очень сложная. Чтобы понять часть программы, содержащую вызов процедуры, нужно знать, что и как эта процедура делает. Особый интерес представляет рекурсивная процедура, которая вызывает саму себя либо непосредственно, либо через цепочку других процедур.