Э. Таненбаум - Архитектура компьютера (1127755), страница 104
Текст из файла (страница 104)
Как вы помните, к микросхеме 8051 можно подключить до 64 Кбайт внешней памяти для программ и столько же внешней памяти для данных. К этим модулям тоже нужно как-то обращаться. За взаимодействие с внешней памятью программ отвечают две команды: команда ЫИР за счет 16-разрядного смещения может 418 Глава 5. Уровень архитектуры набора команд переходить к любому адресу в памяти, а команда ьСАь1. аналогичным способом может вызывать любые размещенные в памяти подпрограммы. Доступ к внешней памяти данных осуществляется по-другому. В 8051 есть 16-разрядный регистр с двойным указателем (ПРТК), в котором размещаются 16-разрядные адреса памяти.
Программы загружают этот регистр и через него обращаются к любым байтам из 64 Кбайт памяти. Сравнение режимов адресации Таблица 5.8. Сравнение режимов адресации Рептюгп 4 0ИгаЗРАПС П! 8051 Режим адресации Неявная Непосредственная Прямая Регистровая Косвенная регистровая Индексная Относительная индексная Стековвя Да Да Да Да Дв Да Да Да Дв Дв Да Дв Да Дв Да Па практике для эффективной архитектуры команд вовсе не нужно множество разнообразных режимов адресации. Поскольку практически весь код, написанный на этом уровне, порождается компиляторами (за исключением 8051), режимов адресации должно быть мало и они должны быть простыми и понятными.
Машине приходится занимать одну из крайних позиций, предлагая либо все доступные варианты, либо только один вариант. В промежуточных случаях компилятор сталкивается с необходимостью выбора, сделать который он не в силах ввиду недостатка информации или сложности алгоритма. Поэтому в наиболее простых архитектурах используют очень немного режимов адресации, причем на каждый из этих режимов накладываются жесткие ограничения. Обычно практически для любых применений достаточно непосредственной, прямой, регистровой и индексной адресации. Каждый регистр (включая указатель локальных переменных, указатель стека и счетчик команд) должен быть доступен всегда, когда это требуется. В более сложных режимах адресации можно сократить число команд, но при атом придется ввести жесткие последовательности операций, которые трудно будет выполнять параллельно с другими операциями.
Мы рассмотрели возможные компромиссы между кодами операций и адресами, а также между различными режимами адресации. Когда вы сталкиваетесь с новым компьютером, нужно изучить все его команды и режимы адресации, Рассмотренные режимы адресации машин Репс1пш 4, П!ьгаЯРАКС П1 и 8051 ил- люстрирует табл. 5.8. Как мы уже отмечали, в командах может использоваться не каждый режим. Типы команд 419 причем не только для того, чтобы знать об их существовании, но и чтобы понять, почему разработчиками был сделан именно такой выбор и каковы были бы последствия при другом выборе.
Типы команд Команды можно грубо поделить на несколько групп, которые, хотя и могут различаться в деталях, воспроизводятся практически в каждой машине. Кроме того, в каждом компьютере всегда имеется несколько необычных команд, добавленных либо в целях совместимости с предыдущими моделями, либо потому, что у разработчика возникла блестящая идея, либо по требованию правительства, заплатившего производителю, чтобы тот включил в набор команд новую команду.
В этом разделе мы попытаемся описать все наиболее распространенные категории, однако отметим, что мы не претендуем на исчерпывающее изложение. Команды перемещения данных Копирование данных из одного места в другое — одна из самых распространенных операций. Под копированием мы понимаем создание нового объекта с точно таким же набором битов, как у исходного. Такое понимание слова «перемещение» несколько отличается от его обычного значения. Если мы говорим, что какой-то человек переместился из Нью-Йорка в Калифорнию, это не значит, что в Калифорнии была создана идентичная копия этого человека, а оригинал остался в Нью-Йорке. Когда мы говорим, что содержимое ячейки памяти 2000 переместилось в какой-либо регистр, мы всегда подразумеваем, что там была создана идентичная копия, а оригинал все еще находится в ячейке 2000.
Команды перемещения данных лучше было бы назвать командами дублирования данных, но название уже устоялось. Есть две причины, по которым данные могут копироваться из одного места в другое. Одна из них фундаментальна: присваивание переменным значений. Следующая операция присваивания выполняется путем копирования значения, которое находится в ячейке памяти с адресом В, в ячейку А, поскольку программист дал команду это сделать: А=В Вторая причина копирования данных — предоставить возможность быстрого обращения к ним. Как мы уже видели, многие команды могут обращаться к переменным только в том случае, если они находятся в регистре. Поскольку существует два возможных источника данных (память и регистр) и два возможных приемника данных (память и регистр), существует также 4 различных способа копирования. В одних компьютерах для этих четырех случаев поддерживаются 4 команды, в других — единственная команда. Некоторые компьютеры используют команду ЕОЯО для загрузки данных из памяти в регистр, команду 5ТОкЕ для сохранения в памяти данных из регистра, команду МОЧЕ для перемещения данных из одного регистра в другой, но вообще не имеют команд для копирования из одной части памяти в другую.
420 Глава 5. Уровень архитектуры набора команд Команды перемещения данных должны как-то указывать, сколько данных нужно переместить. Существуют команды для перемещения разных объемов данных — от одного бита до всей памяти. В машинах с фиксированной длиной слова обычно перемещается ровно одно слово. Любые перемещения других объемов данных (больше или меньше слова) должны выполняться программно с использованием операций сдвига и слияния. Некоторые архитектуры команд дают возможность копировать фрагменты данных размером меньше слова (они обычно измеряются в байтах), а также сразу нескольких слов. Копирование нескольких слов рискованно, особенно если максимальное количество слов достаточно большое, поскольку такая операция может занять много времени и существует вероятность ее прерывания в середине.
Некоторые машины с переменной длиной слов содержат команды, которые определяют только адреса источника и приемника, но не объем данных — в этом случае перемещение продолжается до тех пор, пока не встретится специальное поле, идентифицирующее окончание данных. Бинарные операции Бинарные операции — это такие операции, которые получают результат на основе значений двух операндов.
Все архитектуры команд содержат команды для сложения и вычитания целых чисел. Кроме того, практически во всех архитектурах имеются команды умножения и деления целых чисел. Вероятно, нет необходимости объяснять, почему компьютеры оснащены арифметическими командами. В следующую группу бинарных операций входят булевы команды. Хотя существует 16 булевых функций от двух переменных, команды для всех 16 поддерживаются в очень немногих машинах.
Обычно поддерживаются только операции И, ИЛИ и НЕ; иногда кроме них еще ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ-ИЛИ и НЕ-И. Важным применением операции И является выделение битов из слов. Рассмотрим машину со словами длиной в 32 бита, в которой на одно слово приходится четыре 8-разрядных символа. Предположим, что нужно отделить второй символ от остальных трех, чтобы его напечатать. Это значит, что нужно создать слово, в котором этот символ займет правые 8 бит, а левые 24 бит должны стать нулевыми (так называемое выравнивание вправо).
Чтобы извлечь нужный нам символ, слово, содержащее этот символ, соединяется операцией И с константой, которая называется маской. В результате этой операции все ненужные биты меняются на нули: А: 10110111 10111100 11011011 10001011 В (маска): 00000000 11111111 00000000 00000000 АИВ: 00000000 10111100 00000000 00000000 Затем результат сдвигается на 16 бит вправо, чтобы нужный символ оказался в правой части слова.