Лекция. Команды микропроцессора




Скачать 390,52 Kb.
НазваниеЛекция. Команды микропроцессора
страница1/3
Дата публикации05.05.2013
Размер390,52 Kb.
ТипЛекция
pochit.ru > Информатика > Лекция
  1   2   3


Лекция. Команды микропроцессора
Понятие набора команд

Команда МП – это такое двоичное слово, которое, будучи «прочитано» МП, заставляет последний выполнять определенные действия. Другие, отличные от команд, слова подобных действий в МП вызывать не могут. Команды осуществляют пересылку или обработку данных, расположенных в памяти или одном из регистров МП. Некоторые команды предназначены для управления некоторыми вспомогательными функциями МП, поддерживающими необходимый режим его работы. Когда говорят о наборе команд МП, подразумевают все его команды.

Длина команды как двоичного слова совпадает с длиной слова данных. Однако команды могут иметь длину, равную не только одному, но также двум или трем словам.

Для выполнения команда посылается в регистре команд, дешифратор и схемы управления, где она идентифицируется, в результате чего формируются сигналы, направляемые в другие части МП. С помощью этих сигналов выполняются операции, предписываемые командой.

МП загружает команду в регистр команд в течение цикла выборки. В течение следующего за ним цикла выполнения МП декодирует команду и создает сигналы управления процессом выполнения операций этой команды.

Детальное рассмотрение команды МП показывает, что она должна содержать информацию двух видов. Во-первых, команда должна сообщать МП, что делать (выполнять сложение, очистку, пересылку, сдвиг и т.п.); во-вторых, указывать адрес, т.е. местоположение обрабатываемых данных. Таким образом МП получает от команды информацию не только о том, что делать, но и о том, где находятся данные – объекты манипулирования.

Команда состоит из двух частей: кода операции (КОП) и адреса. КОП сообщает МП, что делать; адрес указывает местоположение данных, участвующих в операции. Если длина команды составляет два или три слова, то первое из них – это КОП, а второе и третье – адрес. Из этого следует сделать вывод, что все команды длиной в одно слово являются безадресными (подробнее об том при описании способов адресации).



Мы рассмотрим 8 основных типов команд. На практике подавляющее большинство МП располагает значительно большим числом различных команд.

Любая машинная команда - это машинный код, который определяет:

  • Операцию.

  • Указывает на данные.

В адресной части команды хранится адресный код. В большинстве случаев фактическое обращение к данным происходит по физическому (исполнительному) адресу. Обычно физический адрес не совпадает с адресным полем команды, но зависит от него. В общем случае происходит преобразование из адресного кода в физический код - режим (способ) адресации. Способы адресации являются одним из основных архитектурных признаков. В настоящее время известно более двух десятков различных способ адресации и их модификации.

^ Метод адресации

Область применения

Регистровая

Требуемое значение в регистре

Непосредственная или литеральная

Для задания констант

Базовая со смещением

Для обращения к локальным переменным

Косвенная регистровая

Для обращения по указателю или вычисленному адресу

Индексная

Полезна при работе с массивами

Прямая или абсолютная

Полезна для обращения к статическим данным

Косвенная

Выбирается значение по указателю

Автоинкрементная

Полезна для прохода в цикле по массиву с шагом: В каждом цикле получает приращение

Автодекрементная

Аналогична предыдущей. Обе могут использоваться для реализации стека

Базовая индексная со смещением и масштабированием

Для индексации массивов

Все известные способы адресации данных разделены на две большие группы.

  • Прямые.

  • Непрямые.

При прямых способах адресации либо накопительный адрес операнда, либо сам операнд, находятся непосредственно по адресному коду без всякого преобразования. Непрямые способы требуют выполнения процедур формирования физического адреса по адресному коду, для этого в ЭВМ встраивается специальный адресный механизм.
Число команд значительно больше, чем число различных кодов операции, поскольку при формировании команды один и тот же КОП может использоваться при различных способах адресации. Например, большинство МП используют КОП CLEAR . Естественно задать вопрос: очистка чего? Ответ зависит от конкретного набора команд МП. Некоторые МП располагают единственной подобной командой – командой очистки аккумулятора, другие – несколькими командами очистки, такими, как очистка аккумулятора А или В, очистка регистра А, В, С или D, очистка области памяти с адресом N. Как видно из последнего примера, сочетание одного КОП с различными адресами может привести к созданию семи разных команд.

^ Мнемоническая форма записи команд

Команда МП – это двоичное число. Но даже однобайтовое двоичное число трудно запомнить. Еще труднее «держать в голове» двоичные коды команд длиной 2-3 байта. Т.е. основная проблема: команды трудно запоминать и отождествлять с их фактическим назначением. Данная проблема решается путем применения мнемонического обозначения – сокращенной записи названия команды. Для этой цели обычно используются три буквы названия операции, выполняемой командой. Например, мнемоническое обозначение команды очистки имеет следующий вид: CLA. Если МП содержит два аккумулятора (А и В), то команды их очистки могут записываться как CLA А и CLA В, где CLA – КОП, а А и В – адрес местоположения обрабатываемых данных. Если же команда оперирует числовыми данными или адресами областей памяти, то целесообразно использование чисел в адресной части команды. Например, код операции с мнемоническим обозначением JMP (JMP - ПЕРЕХОД) требует указания адреса перехода. Подобная команда может иметь вид JMP 1777568, где адрес выражен шестиразрядным восьмеричным числом, двоичный эквивалент которого 11111111111011102 есть адрес области памяти. Мнемоническое обозначение JMP легче запомнить, чем его восьмеричный эквивалент 3038. Сочетание сокращенного буквенного обозначения кода операции с числовой формой записи адреса являются одной из наиболее удобных форм записи команды.

Руководства по эксплуатации МП, выпускаемых промышленностью, содержат описания соответствующих наборов команд с указанием кодов операций как в виде мнемонической записи, так и в числовой форме. Потребность в такой документации возникает только тогда, когда составляют программу для работы МП, которым располагает разработчик.

Методы адресации МП
Большая часть команд процессора работает с кодами данных (операндами). Одни команды требуют входных операндов (одного или двух), другие выдают выходные операнды (чаще один операнд). Входные операнды называются еще операндами-источниками, а выходные называются операндами-приемниками. Все эти коды операндов (входные и выходные) должны где-то располагаться. Они могут находиться во внутренних регистрах процессора (наиболее удобный и быстрый вариант). Они могут располагаться в системной памяти (самый распространенный вариант). Наконец, они могут находиться в устройствах ввода/вывода (наиболее редкий случай). Определение места положения операндов производится кодом команды. Причем существуют разные методы, с помощью которых код команды может определить, откуда брать входной операнд и куда помещать выходной операнд. Эти методы называются методами адресации. Эффективность выбранных методов адресации во многом определяет эффективность работы всего процессора в целом.

Итак, команда МП состоит из КОП и адреса. Однако имеются команды без адреса. Например, команде, приказывающей МП остановить работу, адрес не нужен. Но безадресных команд мало. Пусть в распоряжении имеется 8-разрядный МП с памятью объемом 65К. У программиста должна иметься возможность доступа к содержимому любой из 65536 областей памяти. Для адресации к этим областям длина адресной части команды должна быть достаточной для размещения 16 бит. Конечно, двоичный код команды длиной 8 бит не может включать в себя код операции и 16-битовую адресную часть.

Большинство МП имеет команды различной длины. Как правило, необходимы команды длиной в одно, два или три слова. Число битов, образующих двоичный код команды, не может быть произвольным, например, 7,12 или 14. Оно должно быть кратно длине байта (машинного слова). Следовательно, 8-разрядный МП может иметь команды длиной 8, 16 или 24 бит.

Длина команды зависит от длины используемого в ней адреса. Хотя различные МП и располагают наборами команд, принципы адресации в них, как правило, одни и те же. Тип обращения (адресации) к данным принято называть способом адресации.
^ Неявная (регистровая) адресация
Однобайтовая команда 8-разрядного МП – это одна из 256 различных комбинаций 8 бит, образующих машинное слово (байт). Такого количества различных команд достаточно для рассматриваемого нами МП. Однако он располагает 65536 областями памяти, для адресации которых адресная часть команды должна быть больше той, которую может предоставить однобайтовая команда. Неприемлемым в данном случае является и такое решение, когда на месте адресной части размещаются сами данные. Однобайтовые данные нельзя разместить в однобайтовой команде, часть битов которой должна всегда быть предоставлена коду операции.



Каким же образом можно использовать однобайтовую команду для адресации к данным? Ответ таков: 1-байтовые команды не адресуются к данным, расположенным в памяти; они оперируют данными, загруженными в регистр, регистровую пару или данными, хранимыми в области памяти, адрес которой находится в регистровой паре. Например, 1-байтовая команда пересылки данных из регистра А в регистр В состоит из кода операции, адреса источника данных (регистра А) и адреса приемника данных (регистра В). Адреса источника и приемника указаны в команде неявно; иногда говорят, что они «встроены» в команду. Вот почему такая адресация называется неявной.



^ Регистровая адресация предполагает, что операнд (входной или выходной) находится во внутреннем регистре процессора. Например, команда может состоять в том, чтобы переслать число из нулевого регистра в первый. Номера обоих регистров (0 и 1) будут определяться кодом команды пересылки.

Однобайтовые команды выполняются быстрее любых других команд. Известно, что для выполнения какой-либо команды МП необходимо осуществить две последовательности операций, называемые циклом выборки и выполнения. В дальнейшем вы сможете убедиться, что для команд с другими способами адресации требуется большее количество микроциклов. Иначе говоря, команды с неявной адресацией отличаются наибольшей величиной быстродействия.

^ Непосредственная адресация
Код операции команд с непосредственной адресацией размещается в первом байте. Сразу же за кодом операции следуют данные, занимающие 1 или 2 байта. Эти данные берутся не из памяти, их предоставляет машине программист при записи команды. Следовательно, при использовании данного способа адресации не требуется указание адреса памяти, необходим только КОП, после которого записываются данные.



Чтобы ответить на вопрос о том, в каких случаях целесообразно использование непосредственной адресации, рассмотрим пример программы загрузки аккумулятора 8-разрядным двоичным числом. Такая загрузка осуществляется при каждом выполнении программы. Указанную программу можно реализовать посредством команды, КОП которой «приказывает» МП загрузить в аккумулятор данные длиной в 1 байт, следующие непосредственно за КОП. Подобную команду называют «Загрузка регистра непосредственная».

Н

Загрузка регистра непосредственная

1-й байт

Данные

2-й байт



епосредственная адресация осуществляется МП за 2 микроцикла: в течении первого микроцикла производится выборка команды, в течении второго – ее выполнение. Операции, задаваемые первым байтом команды (КОП), МП выполняет над данными, представленными ее вторым байтом. При использовании непосредственной адресации в команде предполагается размещение данных там же, где находится сама команда. Однако иногда возникает необходимость размещать данные в каком-либо другом месте памяти и иметь возможность адресоваться к ним. В таких случаях используется прямая адресация.
^ Прямая адресация.
Команды с прямой адресацией могут иметь длину, равную два или три байта. Первый байт предназначен для КОП, второй и, если имеется, третий – для адреса. Адрес указывает область памяти, в которой находятся подлежащие обработке данные.



Совместное использование второго и третьего байтов команды позволяет адресоваться к любой из 65536 областей памяти.

Загрузка аккумулятора в память прямая

1-й байт

0016

2-й байт

16

3-й байт

Прямая адресация, как правило, представляется наиболее естественной и простой для понимания. При неявной адресации адрес местоположения данных «встроен» в команду, и программист имеет возможности самостоятельно обращаться к данным по их адресу. При непосредственной адресации данные указываются в самой команде, следуя сразу за КОП. В этом случае программист тоже не может адресоваться к данным. И только при прямой адресации у него есть такая возможность, явным образом задавая адрес необходимых данных. Примером использования такой адресации может служить команда записи содержимого аккумулятора в память по адресу 000Е16. Этот адрес, заданный в шестнадцатеричной форме, занимает второй и третий байт трехбайтовой команды. (Адреса задаются в шестнадцатеричной форме, а содержимое адресуемых областей памяти – в двоичной). Рисунок ниже иллюстрирует, что происходит при выполнении этой команды. Перед выполнением команды (рис.а) содержимое аккумулятора равно 10101010. В области памяти 0003 находится КОП команды записи содержимого аккумулятора в память, а область с адресами 0004 и 0005 содержит информацию о местоположении необходимых данных, т.е. адрес 000Е. После выполнения команды (рис. б) копия содержимого аккумулятора оказывается размещенной в области памяти с адресом 000Е.



Рассмотрим еще один пример, поясняемый блок-схемой алгоритма и описанием состояния памяти и аккумулятора по мере выполнения каждой операции. Перед началом выполнения рассматриваемой программы аккумулятор загружен результатом выполнения предыдущей операции.







Первая команда данной программы – очистка аккумулятора – расположена в области памяти 0000. Занимающая три следующих байта памяти вторая команда – это команда загрузки в аккумулятор содержимого области памяти с адресом 000Е, т.е. двоичного числа 01010101. Последняя команда – останов – занимает 1 байт памяти. Содержимому аккумулятора можно было бы присвоить значение 01010101 также и посредством команды загрузки с непосредственной адресацией, но в этом случае загруженные данные должны находится в областях памяти смежных с кодом операции этой команды. И если в дальнейшем эти же данные потребовались бы для другой команды, к ним трудно было бы получить доступ. При прямой адресации таких проблем не возникает, т.к. МП имеет возможность производить обращение к любой области памяти. В последнем примере, благодаря использованию команды с прямой адресацией любое количество команд программы может обращаться к области памяти с адресом 000Е. Проиллюстрируем это, расширив рассмотренную программу добавлением одной команды.



Программа по-прежнему размещается в памяти, начиная с адреса 0000.

Но после очистки аккумулятора и его загрузки содержимым области памяти с адресом 000Е программа не завершается, а имеет место загрузка регистра В содержимым той же области памяти. содержимое памяти, аккумулятора и регистра В до и после выполнения команд программы показано на рисунке ниже. Начальное содержимое аккумулятора и регистра В определяется предшествующими операциями и может быть произвольным. При выполнении данной программы две различные команды с прямой адресацией пользуются одними и теми же данными, хранимыми в области памяти 000Е.




На содержимое регистра В не оказывает влияние не очистка аккумулятора, ни его загрузка двоичным числом 01010101. Команда загрузки регистра В помещает в последний копию тех же данных, которые загружены в аккумулятор.

Применение прямой адресации связано с использованием дополнительного (по сравнению с ранее рассмотренными типами адресации) числа микроциклов. Во-первых, МП необходимо произвести выборку КОП команды. После его декодирования следует извлечь из памяти еще 2 байт, являющихся значением адреса местоположения обрабатываемых данных. При каждом дополнительном обращении к памяти требуется еще один микроцикл. После извлечения КОП и байтов адреса следует этап выполнения команды, на который затрачивается четвертый микроцикл. Следовательно, время выполнения команды с прямой адресацией в два раза больше, чем команд с непосредственной адресацией. Прямую адресацию целесообразно использовать, если необходимо иметь возможность размещать данные в любой области памяти. Поэтому при написании программы рекомендуется использовать как можно меньше команд с прямой адресацией, т.к. для их выполнения требуется больше времени.

В некоторых МП используется прямая адресация, реализуемая за три микроцикла. В таких случаях команда имеет длину 2 байт: один – для КОП, другой – для адреса. Но однобайтовый адрес не позволяет адресоваться ко всем областям памяти объемом 65 К. Например, в 8-разрядном МП 8-битовое слово – 2-й байт команды с прямой адресацией – позволяет обращаться только к одной из 256 областей. Специальный КОП информирует, что такая команда имеет однобайтовый адрес. Обычно отсчет этих адресов в памяти начинается в области, адрес которой равен 0.



Диапазон значений, охватываемый такими 1-байтовыми адресами, принято называть нулевой страницей памяти. Так, адреса первых 256 областей памяти 8-разрядного МП принадлежит диапазону десятичных значений от 0 до 255 (двоичных – от 00000000 до 11111111, шестнадцатеричных – от 00 до FF). При адресации 2-байтовым словом диапазон подобных десятичных значений простирается от 0 до 65535 (00000000000000002 – 11111111111111112, 000016-FFFF16). На рис. схематически изображены два описываемых диапазона адресов –1- и 2-байтовый.

Преимущество команд с 1-байтовыми адресами по сравнению с 2-байтовыми заключается в меньших затратах времени на их выполнение, поскольку при этом экономится один микроцикл. Команды с 1-байтовыми адресами целесообразно применять в тех случаях, когда требуется многократно обращаться к сравнительно небольшому количеству байтов данных, размещающихся в первых 256 областях памяти.

В 16-разрядном МП с памятью объемом 65К прямая адресация предполагает использование только одного 16-битового слова, т.к. оно позволяет адресоваться к любой области указанной памяти. Набор команд 16-разрядного МП состоит из команд длиной в одно или два слова.

Поскольку в 8-разрядном МП применяются команды с прямой адресацией, имеющей длину в два или три слова памяти, возникает проблема их идентификации. Обычно такие команды различной длины имеют разные мнемонические имена, т.е. разные мнемонические обозначения КОП. Так 2-байтовые команды с прямой адресацией называют иногда командами прямой адресации или командами адресации нулевой страницы, а 3-байтовые – командами расширенной прямой адресации.
^ Косвенная адресация
Большинство МП располагает еще одним способом адресации к памяти, реализуемой командами длиной только в одно слово. Такая адресация называется косвенной или иногда косвенно-регистровой. Помимо КОП в такой команде указывается номер регистра, содержимое которого – адрес местоположения данных в памяти. Этим подобные команды отличаются от команд непосредственной адресации, содержащие данные в самих себе, или от команд прямой адресации, которые включают адреса этих данных. Так, при использовании косвенной адресации, в 8-разрядном МП соответствующая команда указывает, в какой регистровой паре размещается адрес местоположения данных в памяти.



Косвенно-регистровая (косвенная) адресация предполагает, что во внутреннем регистре процессора находится не сам операнд, а его адрес в памяти. Например, команда может состоять в том, чтобы очистить ячейку памяти с адресом, находящимся в нулевом регистре. Адрес указателя, задаваемый программой, остается неизменным, а косвенный адрес может изменяться в процессе выполнения программы. Косвенная адресация, таким образом, обеспечивает переадресацию данных, т.е. упрощает обработку массивов и списковых структур данных, упрощает передачу параметров подпрограммам, но не обеспечивает перемещаемость программ в памяти.



Косвенная адресация удобна при обращении к часто используемым областям памяти, и особенно в тех случаях, когда данные организованы в виде некоторого списка или файла (набора). Иначе говоря, использование косвенной адресации дает наибольший эффект при записи и чтении следующих друг за другом областей памяти. Примером может служить задача организации файла данных в памяти согласно следующей блок-схеме алгоритма. В основу организации этого файла положен принцип косвенной регистровой адресации. Из порта ввода-вывода данные загружаются в аккумулятор, а затем записываются в следующие друг за другом области памяти. Используемые для этого команды мы рассмотрим позже. Каждому пронумерованному блоку блок-схемы алгоритма соответствует одна команда. Процедура, описываемая блок-схемой алгоритма, состоит из:

  1. Задание начального адреса формируемого файла данных. Осуществляется посредством команды загрузки регистра, использующей непосредственную адресацию.



  1. Загрузка аккумулятора данными из порта ввода-вывода с номером 01. Выполняется соответствующей командой ввода данных.

  2. Запись копии содержимого аккумулятора в область памяти, адресуемую регистровой парой ВС. Осуществляется командой записи в память, использующей косвенную адресацию. Обратите внимание, что в регистре, указываемом этой командой, находятся не загруженные в память данные, а только их адрес. После выполнения загрузки необходимо принять новый байт и записать его в следующую, смежную область памяти.

  3. Увеличение содержимого регистровой пары ВС на 1. Выполнение этой операции необходимо для того, чтобы в регистровой паре оказался адрес области памяти, заполняемой следующей.

  4. переход к повторению загрузки аккумулятора очередными данными из порта ввода-вывода (возврат к блоку 2). Осуществляется после того, как регистр указывает адрес области памяти, «ожидающей» очередные данные. Содержимое регистра увеличивается каждый раз на 1. Если бы регистр перезагружался, механизм единичных приращений был бы нарушен и новые данные записывались бы в одну и ту же область.


^ Индексная адресация
На рисунке представлена видоизменённая структурная схема 8-разрядного МП. На этой схеме вместо регистровой пары ВС используется 16-разрядный индексный регистр. Очевидно, что схема стала немного проще.



Для работы программ с массивами, требующими однотипных операций над элементами массива, удобно использовать индексную адресацию.


Адрес i-того операнда в массиве определяется как сумма начального адреса массива операнда, задаваемого смещением S, и индекса I, записанного в одном из регистров регистровой памяти, называемым индексным регистром.

Адрес индексного регистра задается в команде полем адреса индекса Аи.

В каждом i-том цикле содержимое индексного регистра изменяется на постоянную величину, как правило, это 1.

При выполнении команды сравнения используется 16-ти разрядное содержимое индексного регистра. Из содержимого индексного регистра вычитается 2-байтовый непосредственный операнд, содержащийся в команде сравнения. Как и во всех других командах сравнения, результат вычитания не записывается в память. В зависимости от результата вычитания в регистре состояния устанавливается соответствующее значение одного из следующих разрядов: нулевого результата, отрицательного результата или переноса. Операция сравнения производится только над словами данных, т.е. она не может выполняться над отдельными байтами индексного регистра.

Индексный регистр применяется для реализации адресации с индексированием. Такой способ адресации осуществляется посредством сложения 2-го байта команды с содержимым индексного регистра. Полученная при этом сумма используется в качестве адреса области памяти. По существу, это- команда, при выполнении которой используется адресация по регистру и последующее вычисление адреса области памяти. Фактически путем сложения определяется новой 16-разрядный номер области.

Прибавляемая к содержимому индексного регистра 8-разрядная величина может принимать значения в диапазоне от 00 до FF. Эту величину называют смещением. Смещение может иметь любое значение в диапазоне 010-25510. Следовательно, при некотором содержимом индексного регистра, выбирая значение смещения, можно адресовать 256 областей памяти.



Этот способ адресации может использоваться в каждой команде. Если, например, в МП вместо косвенной адресации по регистру используется адресация с индексированием, то команда ADI (Сложение Аккумулятора с Областью Памяти При Косвенной Адресации По Регистру) заменяется командой ADD A, X (Сложение с Индексированием). Команда ADD A, X занимает в памяти 2 байт и выполняется за 5 циклов. Обычно, для выполнения команд при использовании адресации с индексированием требуется большое число микроциклов, чем для выполнения аналогичных команд с использованием косвенной адресации по регистру.

Сравнение адресации с индексированием и косвенной адресации по регистру показывает, что каждый из этих способов адресации обладает как достоинствами, так и недостатками. Например, команды, в которых используется адресация с индексированием, занимают в памяти 2 байт, а при использовании косвенной адресации по регистру для каждой команды требуется только 1 байт. В то же время, применяя две команды с индексированием, легко адресовать 2 файла памяти, начальные адреса которых отличаются не более чем на 256. В случае косвенной адресации по регистру следует использовать 2 различных указателя памяти, роль которых могут играть либо другие регистры, либо специально для этого выделенные области памяти. С учетом команд, необходимых для определения значения указателя, при использовании косвенной адресации требуется больше команд, чем при использовании адресации с индексированием.

В некоторых МП используется как косвенная адресация, так и адресация с индексированием. Оказывается, что для некоторых задач программы, написанные с использованием отмеченных нами способов адресации, имеют почти одинаковую длину. Однако, иногда, небольшие программы можно написать более компактно с помощью какого-либо одного, из указанных, способов адресации.

Приемы программирования при использовании адресации с индексированием отличаются от приемов программирования в случае косвенной адресации по регистру. Алгоритмы решения задач, ориентированные на реализацию рассматриваемых способов адресации, также имеют некоторые отличия.
^ Относительная адресация
В каждой команде некоторых МП, главным образом 16-разрядных (и выше) может быть использована относительная адресация. В других МП данный способ адресации может быть применен только в нескольких командах.

^ Относительные способы формирования Аи предполагают, что двоичный код адреса ячейки памяти образуется из нескольких составляющих: Б - код базы, И - код индекса, С - код смещения, используемых в сочетаниях (Б и С), (И и С), (Б, И и С). При относительной адресации применяются два способа вычисления адреса Аи:

  • суммирование кодов составляющих адреса

и = Б + С; Аи - И + С; Аи = Б + И + С);

  • совмещение (конкатенация) кодов составляющих адреса

(например Аи = Б/С).
^ Базирование способом суммирования. В команде адресный код Ак разделяется на две составляющие: Аб - адрес регистра в регистровой памяти, в котором хранится база Б (базовый адрес); С - код смещения относительно базового адреса.



С помощью метода относительной адресации удается получить так называемый перемещаемый программный модуль, который одинаково выполняется процессором независимо от адресов, в которых он расположен. Начальный адрес программного модуля (база) загружается, при входе в модуль, в базовый регистр. Все остальные адреса программного модуля формируются через смещение относительно начального адреса (базы) модуля. Таким образом, одна и та же программа может работать с данными, расположенными в любой области памяти, без перемещения данных и без изменения текста программы только за счет изменения содержания всего одного базового регистра. Однако время выполнения каждой операции при этом возрастает.

^ Базирование способом совмещения составляющих. Для увеличения емкости адресной ОП без увеличения длины адресного поля команды можно использовать для формирования исполнительного адреса совмещение (конкатенацию) кодов базы и смещения.

СМ – сумматор,

РАОП – регистр адреса ОП,

Б – база (базовый адрес),

С – смещение,

Аб – адрес регистра базы



Однако в данном случае начальные адреса массивов не могут быть реализованы произвольно, а должны иметь в младших разрядах n нулей, где n – длина поля смещения.

Относительная адресация имеет много общего с адресацией с индексированием. Однако эти способы имеют различия. Во-первых, при использовании рассматриваемых способов адресации смещение складывается с содержимым разных регистров; при относительной адресации смещение прибавляется к текущему содержимому счетчика команд. Во-вторых, в режиме относительной адресации применяется специальная форма арифметических операций над числами, представленными в дополнительном коде. Применение такой “специальной арифметики” позволяет выполнить переходы в перед в тех случаях, когда в старшем разряде смещения содержится значение, равное логическому 0. Кроме того, оказывается возможным производить переходы назад, когда значение старшего разряда смещения равно 1. Смещение при этом рассматривается как число в дополнительном коде.

Почему же иногда вместо адресации с индексированием используют относительную адресацию? В наборе команд некоторых МП имеются команды, в которых предусматривается использование только относительной адресации. Примером такой команды может служить команда условного перехода. Кроме того, относительная адресация позволяет разработать перемещаемые программы. Такие программы называют также относительными программами или позиционно-независимыми программами, т.е. программами не зависимыми от местоположения. При относительной адресации в команде записывается величина разности между адресом требуемой области и содержимым счетчика команды. Следовательно, одна и та же команда может быть размещена в различных областях памяти.

При использовании отрицательной адресации программист не должен беспокоиться относительно того, где в памяти машины будет размещена его программа. Однако он должен хорошо знать шестнадцатеричную арифметику, используемую при вычислении относительного адресата.
^ Команды работы со стеком
Стековая память (стек) является эффективным элементом современных ЭВМ, реализует неявное задание адреса операнда. Хотя адрес обращения в стек отсутствует в команде, он формируется схемой управления автоматически по специальному правилу.

Нам известно, что стек МП применяется либо при выполнении команд вызова подпрограмм, либо при обработке прерываний. Операции со стеком при этом выполняются автоматически, т.е. они не задаются явно программистом. Теперь мы познакомимся с командами, предназначенными для выполнения операций со стеком, не имеющим отношения к выполнению подпрограмм и обработке прерываний. При использовании стека, нужно быть очень внимательным. Загрузка данных в стек и извлечение их из стека должен четко контролироваться. Если загрузить данные в стек и не извлечь их оттуда перед реализацией другой команды МП, выполнение которой связано с некоторыми действиями со стеком, то возможны катастрофические последствия для работы программы.

Следует помнить, что стек представляет собой устройство памяти, действующее по принципу LIFO ­ last in, first out (поступивший последним, обслуживается первым). Это означает, что данные загруженные в стек последними, будут извлекаться из стека первыми. Извлечение данных из стека происходит в порядке, обратном загрузке в стек.


^ Адрес
области
памяти


Программа

Стек

0F21

Следующий доступный элемент стека




0F22

Старший байт СК для первой подпрограммы

02

0F23

МБ СК для первой подпрограммы

01

0F24

СБ СК для главной подпрограммы

00

0F25

МБ СК для главной подпрограммы


Предположим, что программируется обращение к двум подпрограммам, одна из которых вызывает другую. Вызываемую подпрограмму будем называть подпрограммой второго уровня. На рисунке показано содержимое стека во время выполнения подпрограммы второго уровня. Байт стека со старшим адресом занимает область памяти с адресом 0F25. В качестве начальной области стека была выбрана произвольная область памяти, которая не должна использоваться в других частях программы. Содержимое областей с адресами 0F25 и 0F24 равно адресу области главной программы. Этот адрес является адресом команды, следующей в главной программе за командой вызова подпрограммы. Области памяти с адресами 0F25 и 0F24 содержат соответственно МБ и СБ счетчика команд. Когда завершится выполнение подпрограммы, работа главной программы будет продолжена, начиная с команды, расположенной в области памяти с адресом 000С. При выборке данных из стека сначала будет извлечён старший, а затем младший байт счётчика команд.

Из рисунка также видно, что за командой вызова подпрограммы второго уровня в подпрограмме первого уровня следует команда с адресом 0201.

Допустим, что в рассматриваемом примере подпрограмма второго уровня обеспечивает умножение чисел с двойной точностью. Во время выполнения этой подпрограммы необходимо выделить временную область памяти, используемую при выполнении команды сдвига влево содержимого 3-байтового поля. На рисунке показано размещение каждого байта множимого, занимающего 3 байт памяти в стеке. На рисунке а) изображено состояние стека после пересылки в него младшего байта множимого. Указатель стека (> на рисунке) определяет следующую свободную область стека. Состояние стека после загрузки в него второго байта множимого изображено на рисунке б, а после загрузки последнего (старшего) байта  на рисунке в.


Адрес обл.

памяти

0F1E

















































0F1F







0D










0F20




C5

C5

C5







0F21

72

72

72

72

72




0F22

02

02

02

02

02

02

0F23

01

01

01

01

01

01

0F24

00

00

00

00

00

00

0F25

0C

0C

0C

0C

0C

0C




а)

б)

в)

г)

д)

е)


На рисунках г-е показано состояние стека после выборки данных из стека. Стек на рисунке е уже не содержит множимого. Оставшаяся в стеке информация  это два значения счётчика команд, которые были на предыдущем рисунке. Следует отметить, что множимое не содержится в стеке, поскольку изменилось значение указателя стека; содержимое же областей с адресами 0F1E-0F21 в действительности будет сохраняться прежним до тех пор, пока при загрузке новых данных в стек будет осуществлена запись по указанным адресам.

Рассмотренный пример позволяет сделать вывод о важности соблюдения как порядка, так и количества выполнений операций загрузки данных в стек и операций извлечения данных из стека. Предположим, что СБ множимого по ошибке не был извлечён из стека. Это могло произойти, если вызов подпрограммы умножения был произведён, когда стек имел состояние, подобное изображённому на рисунке а, а её завершение по каким-то причинам произошло, когда состояние стека было подобно состоянию, представленному на рисунке д. Тогда по завершению подпрограммы умножения из стека извлекаются 2 байт и помещаются в счётчик команд. Затем МП будет выполнять подпрограмму первого уровня. В нашем примере извлекаются 2 байт, значение которых даёт адрес области памяти, равный 7202. Однако, начальный адрес подпрограммы первого уровня равен 0201. Таким образом, при вызове подпрограммы будет использован неправильный адрес, что проведёт к нарушению функционирования МП системы.

Команда загрузки непосредственного операнда в указателе стека занимает используется для установки исходного состояния стека, что обеспечивается загрузкой в указателе стека адреса начальной области стека. Вспомним, что очередная доступная для использования область стека имеет меньший адрес по отношению к адресам других, занятых областей стека. Следовательно, команда загрузки непосредственного операнда в указатель стека будет использоваться для задания области стека с наибольшим адресом. 2-й байт команды определяет СБ указателя стека. МБ указателя стека задаётся 3-м байтом команды. При выполнении этой команды в регистре состояния будет устанавливаться в 1 разряд нулевого результата, если 16-разрядное загружаемое слово имеет значение 0, а разряд отрицательного результата, если старший разряд загружаемого в указатель стека слова имеет значение 1. Команда загрузки в указатель стека непосредственного операнда выполняется один раз перед началом работы со стеком.

Стек никогда не устанавливается сам в исходное состояние! Следовательно, каждый раз перед вызовом подпрограммы или обработкой прерывания в программе программист должен использовать команду для задания указателя стека.

  1   2   3

Похожие:

Лекция. Команды микропроцессора icon«Классификация микропроцессоров»
В зависимости от области применения микропроцессора меняются требования к нему. Это накладывает отпечаток на внутреннюю структуру...
Лекция. Команды микропроцессора iconКонкурсная программа «А ну-ка, девочки!» Проводится между2 командами...
Визитка. Название команды, выбрать капитана команды, придумать отличительные особенности команды (эмблемы, детали одежды и т п),...
Лекция. Команды микропроцессора iconЛекция. Память микропроцессора
Имс собственно памяти и элементов, включенных в состав других имс, не выполняющих непосредственно функцию хранения программ и данных...
Лекция. Команды микропроцессора iconКвн «начала информатики»
Класс делится на две команды, которые получают домашнее задание: придумать название команды, ее девиз, выбрать капитана, подготовить...
Лекция. Команды микропроцессора iconИнформационная викторина
Команды представляют название команды, капитана и обыгрывают название своей команды. (5 баллов)
Лекция. Команды микропроцессора iconТурнир Молодого Избирателя
Каждый участник команды выбирает себе фигуру. Затем участники команд пересаживаются за столы с табличками, где указана выбранная...
Лекция. Команды микропроцессора iconКонкурс «А ну-ка, девочки!» Проводится между командами девочек одной...
Визитка. Название команды, выбрать капитана команды, придумать отличительные особенности команды (эмблемы, детали одежды и т п),...
Лекция. Команды микропроцессора iconГенеральный спонсор команды
Основной партнер, название Вашей фирмы присоединяется к названию гоночной команды
Лекция. Команды микропроцессора iconПутешествие по древней греции
Капитан команды следит за активностью игроков, делает выбор кому отвечать от имени команды
Лекция. Команды микропроцессора iconЛекция I и проблема языка и сознания лекция II 31 слово и его семантическое...
Монография представляет собой изложение курса лекций, про* читанных автором на факультете психологии Московского государственного...
Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2019
контакты
pochit.ru
Главная страница