Трехадресные команды
Если необходимо вычислить, к примеру, сумму двух регистров, то можно сформулировать команду в виде 32 разрядного слова, разбитого на 4 группы разрядов:
Код команды сложения |
Адрес регистра, содержащего первое слагаемое |
Адрес регистра, содержащего второе слагаемое |
Адрес регистра для размещения результата |
Это означает, что процессор должен выбрать из регистрового файла первое слагаемое и записать его в один из входных регистров АЛУ. Затем выбрать из регистрового файла второе слагаемое, и поместить его в другой входной регистр. Затем нужно данные с выхода АЛУ записать в регистровый файл. Все три адреса, необходимых для обращения к регистровому файлу, будут содержаться в самой команде. Такой формат команды называется трехадресным, и наиболее удобен для понимания. 32-разрядного слова вполне достаточно, для этого формата.
Двухадресные команды
Если нужно уложиться в более короткое слово, например 16 разрядов, можно договориться, что результат операции будет записан по адресу, содержащему второе слагаемое. Тогда команда будет выглядеть так:
Код команды сложения |
Адрес регистра, содержащего первое слагаемое |
Адрес регистра, содержащего второе слагаемое и результат. |
В этом случае, процессор должен также последовательно выбрать оба аргумента из регистрового файла, а результат поместить по тому же адресу, где находилось второе слагаемое. Такой формат тоже достаточно удобен, но имеет тот недостаток, что после выполнения операции один из аргументов будет потерян. Хотя во многих случаях это не очень важно. Такой формат команды называется двухадресным. При двухадресном формате команды и разрядности 16 можно закодировать 64 команды (код операции длинной 6 разрядов), которые можно выполнять над 32 регистрами (2 поля по 5 разрядов).
Одноадресные команды
В случае, когда с разрядностью совсем плохо, полезно иметь в процессоре регистр со специальными свойствами – аккумулятор. По конструкции, аккумулятор представляет собой самый обычный регистр. От других регистров он отличается не конструкцией, а своим особым предназначением. Особое предназначение аккумулятора определяется соглашением, согласно которому в качестве одного из аргументов команды всегда используется аккумулятор, и в нем же всегда сохраняется результат выполнения команды. Тогда в самой команде нам потребуется указать только один адрес:
Код команды сложения |
Адрес регистра |
Правда, в этом случае могут понадобиться дополнительные команды для помещения другого аргумента в аккумулятор, и для сохранения результата из аккумулятора в каком-либо из регистров. Такой формат команды наименее удобен для восприятия и программирования, но зато позволяет при небольшом объеме регистрового файла уместить многие команды в короткое слово из восьми разрядов и больше всего подходит для восьмиразрядных процессоров. При разрядности 8, такой формат позволяет указывать 16 регистров (4 разряда на адрес регистра) и кодировать 16 различных команд (4 разряда на код операции).
Форматы команд
Существуют 2 различных принципа поисков операндов в памяти: ассоциативный и адресный.
|
Ассоциативный поиск (поиск по содержанию запоминающей ячейки) предполагает просмотр содержимого всех ячеек памяти для выявления кода, содержащего заданный командой ассоциативный признак. |
|
Адресный поиск предполагает, что операнд находится по адресу, указанному в адресном поле команд. |
Исполнительным адресом операнда называется двоичный код номера ячейки памяти, по которому будет записан или считан оператором.
Адресным кодом команды называется двоичный код в адресном поле команды, с помощью которого необходимо сформировать исполнительный адрес операнда. В ЭВМ адресный код и исполнительный адрес не совпадают, поэтому способ адресации можно определить, как способ формирования исполнительного адреса по адресному коду команды.
Способы адресации классифицируют:
|
по наличию адресной информации в команде (явная и неявная адресация). |
|
по кратности обращения в оперативную память. |
|
по способу формирования адресов ячеек памяти. |
При явной адресации операнда в команде есть поле адреса этого операнда.
При неявной v адресное поле в команде отсутствует, а адрес операнда подразумевается кодом операции. Например, из команды может быть исключен адрес приемника адресата, при этом подразумевается, что результат записывается на месте второго операнда.
По кратности обращения в оперативную память различают:
|
непосредственную адресацию (directaddressing) |
|
прямую адресацию (immediateaddressing) |
|
косвенную адресацию (indirectaddressing) |
Непосредственная адресация
При непосредственной адресации операнд располагается непосредственно в адресном поле команды.
Прямая адресация
При прямой адресации обращение за операндом производится по адресному коду в поле команды. При этом исполнительный адрес совпадает с адресом кода команды.
Косвенная адресация
При косвенной адресации код команды указывает адрес ячейки памяти, в которой находится не сам операнд, а его адрес, называемый указателем.
Способы формирования адресов ячеек памяти можно разделить на абсолютные и относительные.
|
Абсолютные способы формирования предполагают, что двоичный код адреса ячейки памяти может быть целиком извлечен либо из адресного поля команды, либо из какой-нибудь другой ячейки в случае косвенной адресации. |
|
Относительные способы формирования предполагают, что двоичный код адресной ячейки памяти образуется из нескольких составляющих: Б v код базы, И v код индекса, С v код смещения. |
Эти составляющие используются в различных сочетаниях.
Относительная адресация
При относительной адресации применяется способ вычисления адреса путем суммирования кодов, составляющих адрес.
А = Б + И + С А = Б + С А = И + С
Индексная адресация
Для работы программ с массивами, требующими однотипных операций над элементами массива, удобно использовать индексную адресацию.
Адрес i-того операнда в массиве определяется как сумма начального адреса массива операнда, задаваемого смещением S, и индекса I , записанного в одном из регистров регистровой памяти, называемым индексным регистром.
Адрес индексного регистра задается в команде полем адреса индекса Аи.
В каждом i-том цикле содержимое индексного регистра изменяется на постоянную величину, как правило, это 1.
В некоторых моделях ЭВМ относительная адресация выполняется без суммирования по следующей схеме:
Автоиндексная адресация
При автоиндексации косвенный адрес, находящийся в регистре РП, автоматически увеличивается (автоинкрементная адресация), или уменьшается (автодекрементная адресация) на постоянную величину до или после выполнения операции.
Стековая адресация
Стековая память широко используется в современных ЭВМ. Хотя адрес обращения в стек отсутствует в команде, он формируется схемой управления:
Для чтения записи доступен только один регистр v вершина стека. Этот способ адресации используется, в частности, системой прерывания программ при вложенных вызовах подпрограмм.
Стековая память реализуется на основе обычной памяти с использованием указателя стека и автоиндексной адресации.
Запись в стек производится с использованием автодекрементной адресации, а чтение - с использованием автоинкрементной адресации.
Стек
Стек представляет собой непрерывную область памяти, адресуемую регистрами ESP (указатель стека) и SS (селектор сегмента стека). Особенность стека заключается в том, что данные в него помещаются и извлекаются по принципу «первым вошел – последним вышел». Данные помещаются в стек с помощью инструкции PUSH (заталкивание), а извлекаются по инструкции POP (вытаскивание). Кроме явного доступа к стеку с помощью инструкций PUSH и POP, стек автоматически используется процессором при выполнении инструкций вызова, возвратов, входа и выхода из процедур, а также при обработке прерываний. Стек используют для разных целей:
организации прерываний, вызовов и возвратов;
временного хранения данных, когда под них нет смысла выделять фиксированные места в памяти;
передачи и возвращения параметров при вызовах процедур.
До использования стека он должен быть инициализирован так, чтобы регистры SS:ESP указывали на область реальной оперативной памяти (стек в ПЗУ, естественно, работать не может). Прикладные программы, как правило, от операционной системы получают готовый к употреблению стек. В защищенном режиме сегмент состояния задачи содержит четыре селектора сегментов стека (для разных уровней привилегий), но в каждый момент используется, естественно, только один стек.
