Алгоритм, написанный пользователем программы, в конечном счете реализуется в виде машинных команд. Под командой понимают совокупность сведений, представленных в виде двоичных кодов, необходимых процессору для выполнения очередного шага. В ходе команды для сведений о типе операции, адресной информации о нахождении обрабатываемых данных, а также для информации о месте хранения результатов выделяются определенные разряды (поля).
0
КОП
А1
А3
15
0
КОП
А1
А2
А3
23
Форматом команды называется заранее обговоренная структура полей в её кодах, позволяющая ЭВМ распознавать составные части кода.
Главным элементом кода команды является код операции (КОП), что определяет, какие действия будут выполнены по данной команде. Под него выделяется N старших разрядов формата. В остальных разрядах размещаются А1 и А2 v адреса операндов. А3 — адрес результата.
Распределение полей в формате команды может изменяться при смене способа адресации. Длина команды зависит от числа адресных полей. По числу адресов команды делятся на:
безадресные
одно-, двух-, трехадресные
Длина кода команды измеряется в машинных словах. Чтобы получить возможность работать с минимальным числом адресных полей, результат, к примеру, можно размещать по месту хранения одного из операндов. Либо предварительно размещают один или несколько операндов в специально выделенных регистрах процессора.
Множество реализуемых машинных действий образует её систему команд. Система команд часто определяет области и эффективность применения ЭВМ. Состав и число команд должны быть ориентированы на стандартный набор операций, используемых пользователем для решения своих задач.
По функциональному назначению в системе команд ЭВМ различают следующие группы:
команды передачи данных (обмен входами между регистрами процессора, процессора и оперативной памятью, процессора и периферийными установками).
Команды обработки данных (команды сложения, умножения, сдвига, сравнения-).
Команды передачи управления (команды безусловного и условного перехода).
Команды дополнительные (типа RESET, TEST,-).
Группа команд передачи управления обеспечивает принудительное изменение порядка выполнения команд в программе.
Оттранслированные команды записываются в соседние ячейки памяти в порядке их следования в программе. При естественном порядке выполнения команд в программе, адрес каждой следующей команды определяется по содержимому специального счетчика команд, который входит в состав процессора. Содержимое этого счетчика автоматически наращивается на 1 при выполнении очередной команды. При организации ветвления цикла или для перехода на подпрограмму в счетчик в счетчик команд принудительно записывается адрес перехода, указанный в ходе команды.
Большинство алгоритмов может быть реализовано небольшим базовым набором команд. Вместе с тем система команд должна быть полной, т.е. содержать все команды, которые необходимы для интерпретации алгоритма в машинных кодах. ЭВМ общего назначения имеет универсальный набор команд и применяется в основном для решения тривиальных (стандартных) задач.
Существуют 2 различных принципа поисков операндов в памяти: ассоциативный и адресный.
Ассоциативный поиск (поиск по содержанию запоминающей ячейки) предполагает просмотр содержимого всех ячеек памяти для выявления кода, содержащего заданный командой ассоциативный признак.
Адресный поиск предполагает, что операнд находится по адресу, указанному в адресном поле команд.
Исполнительным адресом операнда называется двоичный код номера ячейки памяти, по которому будет записан или считан оператором.
Адресным кодом команды называется двоичный код в адресном поле команды, с помощью которого необходимо сформировать исполнительный адрес операнда. В ЭВМ адресный код и исполнительный адрес не совпадают, поэтому способ адресации можно определить, как способ формирования исполнительного адреса по адресному коду команды.
Способы адресации классифицируют:
по наличию адресной информации в команде (явная и неявная адресация).
по кратности обращения в оперативную память.
по способу формирования адресов ячеек памяти.
При явной адресации операнда в команде есть поле адреса этого операнда.
При неявной v адресное поле в команде отсутствует, а адрес операнда подразумевается кодом операции. Например, из команды может быть исключен адрес приемника адресата, при этом подразумевается, что результат записывается на месте второго операнда.
По кратности обращения в оперативную память различают:
непосредственную адресацию (direct addressing)
прямую адресацию (immediate addressing)
косвенную адресацию (indirect addressing)
Непосредственная адресация
При непосредственной адресации операнд располагается непосредственно в адресном поле команды.
Прямая адресация
При прямой адресации обращение за операндом производится по адресному коду в поле команды. При этом исполнительный адрес совпадает с адресом кода команды.
Косвенная адресация
При косвенной адресации код команды указывает адрес ячейки памяти, в которой находится не сам операнд, а его адрес, называемый указателем.
Способы формирования адресов ячеек памяти можно разделить на абсолютные и относительные.
Абсолютные способы формирования предполагают, что двоичный код адреса ячейки памяти может быть целиком извлечен либо из адресного поля команды, либо из какой-нибудь другой ячейки в случае косвенной адресации.
Относительные способы формирования предполагают, что двоичный код адресной ячейки памяти образуется из нескольких составляющих:
Б v код базы, И v код индекса, С v код смещения.
Эти составляющие используются в различных сочетаниях.
Относительная адресация
При относительной адресации применяется способ вычисления адреса путем суммирования кодов, составляющих адрес.
Для работы программ с массивами, требующими однотипных операций над элементами массива, удобно использовать индексную адресацию.
Адрес i-того операнда в массиве определяется как сумма начального адреса массива операнда, задаваемого смещением S, и индекса I , записанного в одном из регистров регистровой памяти, называемым индексным регистром.
Адрес индексного регистра задается в команде полем адреса индекса Аи.
В каждом i-том цикле содержимое индексного регистра изменяется на постоянную величину, как правило, это 1.
В некоторых моделях ЭВМ относительная адресация выполняется без суммирования по следующей схеме:
При автоиндексации косвенный адрес, находящийся в регистре РП, автоматически увеличивается (автоинкрементная адресация), или уменьшается (автодекрементная адресация) на постоянную величину до или после выполнения операции.
Стековая память широко используется в современных ЭВМ. Хотя адрес обращения в стек отсутствует в команде, он формируется схемой управления:
Для чтения записи доступен только один регистр v вершина стека. Этот способ адресации используется, в частности, системой прерывания программ при вложенных вызовах подпрограмм.
Стековая память реализуется на основе обычной памяти с использованием указателя стека и автоиндексной адресации.
Запись в стек производится с использованием автодекрементной адресации, а чтение — с использованием автоинкрементной адресации.
Источник
Система команд процессора и способы адресации
Разнообразие типов данных, форм их представления и действий, которые необходимы для обработки информации и управления ходом вычислений, порождает необходимость использования различных команд – набора команд. Каждый процессор имеет собственный вполне определенный набор команд, называемый системой команд процессора. Система команд должна обладать двумя свойствами – функциональной полнотой и эффективностью /6/.
Функциональная полнота – это достаточность системы команд для описания любого алгоритма. Требование функциональной полноты не является слишком жестким. Доказано, что свойством функциональной полноты обладает система, включающая всего три команды (система Поста): присвоение 0, присвоение 1, проверка на 0. Однако составление программ в такой системе команд крайне неэффективно.
Эффективность системы команд – степень соответствия системы команд назначению ВМ, т. е. классу алгоритмов, для выполнения которых предназначается ВМ, а также требованиям к производительности ВМ. Очевидно, что реализация развитой системы команд связана с большими затратами оборудования и, следовательно, с высокой стоимостью процессора. В то же время ограниченный набор команд приводит к снижению производительности и повышенным требованиям к памяти для размещения программы. Даже простые и дешевые современные микропроцессоры поддерживают систему команд, содержащую несколько десятков (а с модификациями – сотен) команд.
Система команд процессора характеризуется тремя аспектами: форматами, способами адресации и типом выполняемых операций.
Под форматом команды следует понимать длину команды, количество, размер, положение, назначение и способ кодировки ее полей.
Команды, как и любая информация в ВМ, кодируются двоичными словами, которые должны содержать в себе следующие виды информации:
· тип операции, которую следует реализовать в данной команде (КОП);
· место в памяти, откуда следует взять первый операнд (А 1);
· место в памяти, откуда следует взять второй операнд (А2);
· место в памяти, куда следует поместить результат (АЗ).
Каждому из этих видов информации соответствует своя часть двоичного слова – поле, а совокупность полей (их длины, расположение в командном слове, способ кодирования информации) называется форматом команды. В свою очередь, некоторые поля команды могут делиться на подполя. Формат команды, поля которого перечислены выше, называется трехадресным (рис.2.7-а).
Команды трехадресного формата занимают много места в памяти, в то же время далеко не всегда поля адресов используются в командах эффективно. Действительно, наряду с двухместными операциями (сложение, деление, конъюнкция и др.) встречаются и одноместные (инверсия, сдвиг, инкремент и др.), для которых третий адрес не нужен. При выполнении цепочки вычислений часто результат предыдущей операции используется в качестве операнда для следующей. Более того, нередко встречаются команды, для которых операнды не определены (СТОП) или подразумеваются самим кодом операций (DАА, десятичная коррекция аккумулятора).
Поэтому в системах команд реальных ВМ трехадресные команды встречаются редко. Чаще используются двухадресные команды (рис.2.7-б), в этом случае в бинарных операциях результат помещается на место одного из операндов.
Для реализации одноадресных форматов (рис.2.7-в)в процессоре предусматривают специальную ячейку — аккумулятор. Первый операнд и результат всегда размещаются в аккумуляторе, а второй операнд адресуется полем А.
Реальная система команд обычно имеет команды нескольких форматов, причем тип формата определяется в поле КОП (рис.2.7-г).
Способ адресации определяет, каким образом следует использовать информацию, размещенную в поле адреса команды.
Существует пять основных способов адресации операндов в командах.
· Прямая – в этом случае в адресном поле располагается адрес операнда. Разновидность – прямая регистровая адресация, адресующая не ячейку памяти, а РОН. Поле адреса регистра имеет в команде значительно меньшую длину, чем поле адреса памяти.
· Непосредственная – в поле адреса команды располагается не адрес операнда, а сам операнд. Такой способ удобно использовать в командах с константами.
· Косвенная – в поле адреса команды располагается адрес ячейки памяти, в которой хранится адрес операнда («адрес адреса»). Такой способ позволяет оперировать адресами как данными, что облегчает организацию циклов, обработку массивов данных и др. Его основной недостаток – потеря времени на двойное обращение к памяти – сначала за адресом, потом – за операндом. Разновидность – косвенно-регистровая адресация, при которой в поле команды размещается адрес РОН, хранящего адрес операнда. Этот способ, помимо преимущества обычной косвенной адресации, позволяет обращаться к большой памяти с помощью коротких команд и не требует двойного обращения к памяти (обращение к регистру занимает гораздо меньше времени, чем к памяти).
· Относительная – адрес формируется как сумма двух слагаемых: базы, хранящейся в специальном регистре или в одном из РОН, и смещения, извлекаемого из поля адреса команды. Этот способ позволяет сократить длину команды (смещение может быть укороченным, правда в этом случае не вся память доступна в команде) и/или перемещать адресуемые массивы информации по памяти (изменяя базу). Разновидности – индексная и базово-индексная адресации. Индексная адресация предполагает наличие индексного регистра вместо базового. При каждом обращении содержимое индексного регистра автоматически модифицируется (обычно увеличивается или уменьшается на 1). Базово-индексная адресация формирует адрес операнда как сумму трех слагаемых: базы, индекса и смещения.
· Безадресная – поле адреса в команде отсутствует, а адрес операнда или не имеет смысла для данной команды, или подразумевается по умолчанию (рис.2.7-г). Часто безадресные команды подразумевают действия над содержимым аккумулятора. Характерно, что безадресные команды нельзя применить к другим регистрам или ячейкам памяти.
Одной из разновидностей безадресного обращения является использование т. н. магазинной памяти или стека. Имеется фиксированная ячейка, называемая верхушкой стека. При чтении слово извлекается из верхушки, а все остальное содержимое «поднимается вверх» так, что в верхушке оказывается следующее по порядку слово. Одно слово нельзя прочитать из стека дважды. При записи новое слово помещается в верхушку стека, а все остальное содержимое «опускается вниз» на одну позицию. Таким образом, слово, помещенное в стек первым, будет прочитано последним. Говорят, что стек поддерживает дисциплину LIFO – Last In First Out (последний пришел – первый ушел). Реже используется безадресная память типа очередь с дисциплиной FIFO – First In First Out (первый пришел – первый ушел).
По типам выполняемых операций команды принято делить на основных пять классов.
· Арифметико-логические и специальные – команды, в которых выполняется собственно преобразование информации. К ним относятся арифметические операции сложение, вычитание, умножение и деление (с фиксированной и плавающей занятой), команды десятичной арифметики, логические операции конъюнкции, дизъюнкции, инверсии и др., сдвиги, преобразование чисел из одной системы счисления в другую и такие экзотические, как извлечение корня, решение системы уравнений и др.
· Пересылки и загрузки – обеспечивают передачу информации между процессором и памятью или между различными уровнями памяти (Кэш память ОЗУ). Разновидность – загрузка регистров и ячеек константами.
· Ввода/вывода – обеспечивают передачу информации между процессором и внешними устройствами. По структуре они очень похожи на команды предыдущего класса. В некоторых ЭВМ принципиально отсутствует различие между ячейками памяти и регистрами внешних устройств (единое адресное пространство) и класс команд ввода/вывода не выделяется, все обмены осуществляются в рамках команд пересылки и загрузки.
· Передачи управления – команды, которые изменяют естественный порядок выполнения команд программы. Эти команды меняют содержимое программного счетчика, обеспечивая переходы по программе. Существуют команды безусловной и условной передачи управления. В последнем случае передача управления происходит, если выполняется заданное в коде команды условие, иначе выполняется следующая по порядку команда. В качестве условий обычно используются признаки результата предыдущей операции, которые хранятся в специальном регистре признаков (флажков). Различают три разновидности команд передачи управления: переходы, вызовы и возвраты из подпрограмм.
Команды переходов помещают в программный счетчик содержимое своего адресного поля – адрес перехода. При этом старое значение программного счетчика теряется. В микропроцессорных системах часто для экономии длины адресного поля команд условных переходов адрес перехода формируется как сумма текущего значения программного счетчика и относительно короткого знакового смещения, размещаемого в команде. В крайнем случае, в командах условных переходов можно и вовсе обойтись без адресной части – при выполнении условия команда «перепрыгивает» через следующую команду, которой обычно является безусловный переход.
Команда вызова подпрограммы работает подобно команде безусловного перехода, но старое значение программного счетчика предварительно сохраняется в специальном регистре или в стеке. Команда возврата передает содержимое верхушки стека или специального регистра в программный счетчик. Команды вызова и возврата работают «в паре». Подпрограмма, вызываемая командой вызова, должна заканчиваться командой возврата, что обеспечивает по окончании работы подпрограммы передачу управления в точку вызова. Хранение адресов возврата в стеке обеспечивает возможность реализации вложенных подпрограмм.
· Системные – команды, управляющие процессом обработки информации и внутренними ресурсами процессора. К таким командам относятся команды управления подсистемой прерывания, команды установки и изменения параметров защиты памяти, команда останова программы и некоторые другие. В простых процессорах класс системных команд немногочисленный, а в сложных мультипрограммных системах предусматривается большое число системных команд.
Контрольные вопросы и задания
1.Из каких основных устройств состоит процессор?
2.Какие функции выполняет устройство управления процессора?
3.Проведите сравнительный анализ устройств управления с аппаратной и программируемой логикой.
4.Какие из устройств управления обеспечивают большее быстродействие процессоров?
5.Какие из устройств управления обеспечивают реализацию большего набора команд процессора?
6.Какие функции выполняет арифметико-логическое устройство процессора?
7.Какие функции выполняет операционное устройство? Какие типы операционных устройств используются в микропроцессорах?
8.Проведите сравнительный анализ операционных устройств с жесткой и магистральной структурой.
9.Какие форматы команд применяется в микропроцессорах?
10.Назовите основные способы адресации.
11.Для каких целей используются системные команды микропроцессора?
12.Назовите достоинства и недостатки CISC и RISC процессоров.