что такое система команд микропроцессора

Система команд процессора

3.3. Система команд процессора

В общем случае система команд процессора включает в себя следующие четыре основные группы команд:

Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника (Source) в приемник ( Destination ). Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода/вывода. АЛУ в данном случае не используется.

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

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

Рассмотрим теперь особенности четырех выделенных групп команд процессора более подробно.

3.3.1. Команды пересылки данных

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

В некоторых процессорах (например, Т-11) все эти функции выполняются одной единственной командой MOV (для байтовых пересылок — MOVB ) но с различными методами адресации операндов.

В других процессорах помимо команды MOV имеется еще несколько команд для выполнения перечисленных функций. Например, для загрузки регистров могут использоваться команды загрузки, причем для разных регистров — разные команды (их обозначения обычно строятся с использованием слова LOAD — загрузка). Часто выделяются специальные команды для сохранения в стеке и для извлечения из стека ( PUSH — сохранить в стеке, POP — извлечь из стека). Эти команды выполняют пересылку с автоинкрементной и с автодекрементной адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде).

Иногда в систему команд вводится специальная команда MOVS для строчной (или цепочечной) пересылки данных (например, в процессоре 8086). Эта команда пересылает не одно слово или байт, а заданное количество слов или байтов ( MOVSB ), то есть инициирует не один цикл обмена по магистрали, а несколько. При этом адрес памяти, с которым происходит взаимодействие, увеличивается на 1 или на 2 после каждого обращения или же уменьшается на 1 или на 2 после каждого обращения. То есть в неявном виде применяется автоинкрементная или автодекрементная адресация.

В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода/вывода. Команда IN используется для ввода (чтения) информации из устройства ввода/вывода, а команда OUT используется для вывода (записи) в устройство ввода/вывода. Обмен информацией в этом случае производится между регистром-аккумулятором и устройством ввода/вывода. В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлены команды строчного (цепочечного) ввода (команда INS ) и строчного вывода (команда OUTS ). Эти команды позволяют пересылать целый массив (строку) данных из памяти в устройство ввода/вывода ( OUTS ) или из устройства ввода/вывода в память ( INS ). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS ).

Также к командам пересылки данных относятся команды обмена информацией (их обозначение строится на основе слова Exchange ). Может быть предусмотрен обмен информацией между внутренними регистрами, между двумя половинами одного регистра ( SWAP ) или между регистром и ячейкой памяти.

3.3.2. Арифметические команды

Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп:

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

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

Команды инкремента (увеличения на единицу, INC ) и декремента (уменьшения на единицу, DEC ) также бывают очень удобны. Их можно в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммирование и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом.

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

Источник

Система команд для микропроцессора

Общие сведения о системе команд.

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

которая обеспечивает функцию пересылки данных из источника

Таких команд в системе может быть очень много. Система команд представляется в виде таблицы. Таблица может иметь различную структуру, однако обычно содержит следующие сведения о команде:

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

шестнадцатеричные коды команд;

влияние выполненной команды на флаги регистра слова состояния программы;

число байтов в команде и число машинных циклов и такте, затрачиваемых на выполнение команды;

словесное и (или) символьное описание выполняемой командой операции. Часто для удобства систему команд разбивают на отдельные группы по функ­циональному признаку. Например систему команд микропроцессора:

● КР580ВМ80, содержащую 78 базовых команд, разбивают на пять групп: пере­сылки, логической обработки, арифметической обработки, передачи управ­ления и управления процессором,

М86, содержащую 113 базовых команд, разбивают на шесть групп: пересылки, логической обработки, арифметической обработки, обработки строк, передачи управления и управления процессором. Ниже на примере процессоров КР580ВМ80 приведено краткое описание функ­циональных особенностей команд каждой группы.

Рассмотрим систему команд 8–разрядного процессора 8080, в которую входит 78 базовых команд, содержа­щих 111 кодов операций.

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

При описаний–команд используются следующие обозначения:

— 8–разрядные источник и приемник. Источником или приемником мо­жет быть один из 8–разрядных регистров А, В, С,

Н или ячейка памяти М, доступ к которой обеспечивает регистровая пара

, содержащая адрес пересылаемого байта. В коде операции источник

указаны в виде трехразрядного кода

— двухразрядный код регистровых пар ВС,

А + РП (регистр призна­ков) или указателя стека

— 8– и 16–разрядный операнд;

— 16–разрядный адрес памяти и 8–разрядный адрес порта;

) — содержимое ячейки памяти по указанным адресам;

) — операции постинкремента и предекремента со стеком, описа­ние которых приведено в параграфе 2.6.

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

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

указывает на перемещение (

Для операций с байтами используется мнемоника

для операций со словами —

Прямая адресация при загруз­ке и сохранении содержимого аккумулятора отражается мнемоникой

ВР — двухразрядный код регистровых пар ВС,

, А + РП (регистр при­знаков) или указателя стека

Р.

Команды этой группы сведены в табл. 2.8.1 и позволяют осуществить:

операцию пересылки данных между источником (

), ко­торая записывается в виде

Набор команд (табл. 2.8.2) позволяет выполнить:

сложение и вычитание 8–разрядных операндов с учетом и без учета переноса (команды 1–8), при этом один из операндов всегда находится в аккумулято­ре, а второй — в одном из регистров общего назначения (ячейке памяти М) или является вторым байтом команды. Команды, учитывающие значение сиг­нала переноса С регистра прививков, используются при сложении и вычита­нии многобайтных чисел. Для этой же цели можно использовать команду 9 сложения содержимого пары регистров Н

Читайте также:  что такое титрация дозы лекарства

с 16–разрядным адресуемым ре­гистром;

арифметическое сравнение содержимого аккумулятора А с содержимым од­ного из регистров общего назначения

(ячейкой памяти М) или вторым байтом В2 (команды 10–11). При этом выполняется вычитание А –

или А – В2. Результат сравнения определяется по сигналам триггеров регистра признаков: если

или А > В2. Содержимое аккумулятора не изменяется;

и уменьшение на 1 (инкремент и декремент) содержимого реги­стров и регистровых пар. При программировании часто возникает необходи­мость увеличения или уменьшения на единицу значения операнда. Для этого можно использовать операции сложения А + В2 или вычитания А – В2, запи­сав в программе В2 = 1. Однако в системе команд предусмотрены специаль­ные команды (12–15) инкремента и декремента 8– и 16–разрядных операндов;

содержимого аккумулятора после выполнения ариф­метических операций в двоично–десятичном коде 8421 (команда 16). При этом содержимое аккумулятора представляется в виде двух полубайтов, каж­дый из которых соответствует десятичной цифре. Коррекция производится блоком десятичной коррекции по правилам.

Команды логических операций (табл. 2.8.3). Команды этой группы позволяют реализовать:

двуместные логические операции умножения (И), сложения (ИЛИ) и исключа­ющее ИЛИ над 8–разрядными операндами (команды 1–6). Логические опера­ции являются поразрядными и выполняются независимо для каждого из восьми бит операндов. Неадресуемый операнд находится в аккумуляторе, туда же поступает результат операции. Вторым операндом является содер­жимое одного из регистров общего назначения (ячейки памяти М) или второй байт команды;

содержимого аккумулятора А (команда 7);

флаговые команды (8, 9) инвертирования и установки бита С триггера пере­носа регистра признаков;

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

Команды передачи управления.

При передаче управления наруша­ется последовательный ход выборки содержимого ячеек памяти и процессор ад­ресуется в другую область памяти. Следует выделить три вида команд передачи управления: команды перехода по заданному адресу (

) и возврата из подпрограммы

К ним относятся безусловные и ус­ловные команды. Условные команды осуществляют переход, вызов подпрограм­мы и возврат из подпрограммы в зависимости от состояния флага, задаваемого значением сигнала одного из четырех триггеров

Р регистра признаков (или состояния).

В процессоре 8080 используются оба состояния (1 и 0) четырех флагов

позволяющих получить 8 вариантов каждой команды (табл. 2.8.4). Обозна­чение признака (условия) указывается в мнемонике условных команд

вместо звездочек (**). Например, признаку

для которого условия перехода считаются выполненными при С = 0, соответствует команда

В операциях как условного, так и безусловного перехода и вызова подпро­грамм используется полный прямой 16–разрядный адрес, обеспечивающий пере­дачу управления в любую точку 64К–байтовой области пространства памяти.

Рассмотрим особенности команд, представленных в табл. 2.8.5.

С помощью трехбайтной команды

реализуется безусловная передача уп­равления. При этом второй и третий байты команды (адрес

продолжения программы) заносятся в счетчик команд РС (содержимое ВЗ в старшие разряды, В2 — в младшие).

Команды условной передачи управления

** реализуют разветвление вычисли­тельного процесса в зависимости от условия. При выполнении условия (ДА) в счетчик РС заносится второй и третий байты команды, в противном случае (НЕТ) содержимое счетчика увеличивается на 3 единицы. Продолжение програм­мы осуществляется по адресу, находящемуся в счетчике команд, т. е. со следу­ющей команды.

Команды безусловного (СА

) и условного (С**) вызовов используются для об­ращения к подпрограммам, хранящимся в другой части основной памяти. Эти ко­манды всегда предусматривают возможность возврата в прерванную основную программу путем сохранения в стеке содержимого программного счетчика РС, для чего используется предекрементный способ адресации. После этой операции:

● при безусловном вызове или выполнении условия второй и третий байты ко­манды заносятся в программный счетчик РС;

● при невыполнении условия содержимое программного счетчика увеличивает­ся на 3 единицы.

Продолжение программы осуществляется по адресу, находящемуся в счетчи­ке команд РС.

В наборе имеются команды, позволяющие реализовать безусловную (

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

Команды возврата являются однобайтными, так как в указателе стека

Р хра­нится адрес ячейки стека с адресом возврата в прерванную программу.

, загружает в программный счетчик РС адрес, хранящийся в ре­гистровой паре

Команды общего управления.

Команды этой группы (табл. 2.8.6) ис­пользуются для задания режима работы микропроцессора. Команда

используется для повторного пуска микропроцессора и при обслуживании прерываний. При ее выполнении:

● содержимое программного счетчика переносится в стек по адресам

Р – 2, формируемым в указателе стека, что обеспечивает возврат к основ­ной программе;

● в программный счетчик засылается 16–разрядный адрес начала одной из 8 программ обслуживания прерывания.

Команда разрешения прерывания

разрешения прерываний в единичное состояние, при этом микропроцессор реагирует на за­просы прерываний. Команда запрещения прерываний

в нулевое состояние. Пустая команда

используется в циклах програм­мируемой задержки. Команда останова

Источник

Что такое система команд микропроцессора

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

1. Понятие набора команд

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

3. Методы адресации МП

3.1. Неявная (регистровая) адресация

3.2. Непосредственная адресация

3.3. Прямая адресация

3.4. Косвенная адресация

3.5. Индексная адресация

3.6. Относительная адресация

3.7. Команды работы со стеком

4. Система команд процессора

4.1. Команды пересылки данных

4.2. Арифметические команды

4.3. Логические команды

4.4. Команды переходов

1. Понятие набора команд

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

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

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

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

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

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

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

2) Указывает на данные.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. Методы адресации МП

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

Читайте также:  что делать при сильной кровопотери при месячных

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

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

3.1. Неявная (регистровая) адресация

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

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

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

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

3.2. Непосредственная адресация

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

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

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

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

3.3. Прямая адресация

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

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

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

Прямая адресация, как правило, представляется наиболее естественной и простой для понимания. При неявной адресации адрес местоположения данных «встроен» в команду, и программист имеет возможности самостоятельно обращаться к данным по их адресу. При непосредственной адресации данные указываются в самой команде, следуя сразу за КОП. В этом случае программист тоже не может адресоваться к данным. И только при прямой адресации у него есть такая возможность, явным образом задавая адрес необходимых данных. Примером использования такой адресации может служить команда записи содержимого аккумулятора в память по адресу 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-байтовые – командами расширенной прямой адресации.

3.4. Косвенная адресация

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

Процедура, описываемая блок-схемой алгоритма, состоит из:

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

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

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

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

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

3.5. Индексная адресация

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

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

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

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

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

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

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

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

3.6. Относительная адресация

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

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

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

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

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

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

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

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

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

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

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

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

3.7. Команды работы со стеком

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

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

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

Источник

Сайт для любознательных читателей