Главная > Полупроводниковая схемотехника
НАПИШУ ВСЁ ЧТО ЗАДАЛИ
СЕКРЕТНЫЙ БОТ В ТЕЛЕГЕ
<< Предыдущий параграф Следующий параграф >>
Пред.
След.
Макеты страниц

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

Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике

ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO

21.3. НАБОР КОМАНД

В этом разделе приведен набор команд микропроцессора МС 6800. Он может выполнять 72 различные операции, большинство из которых можно использовать с различными операндами. Всего с учетом разнообразных способов адресации получается набор из 197 инструкций.

21.3.1. ОПЕРАЦИИ ЗАПИСИ

В табл. 21.3 перечислены операции, обеспечивающие обмен данными между различными регистрами. Здесь использованы следующие обозначения: А - содержимое аккумулятора В содержимое аккумулятора - содержимое ячейки памяти с адресом - содержимое индексного регистра; старший байт содержимого индексного регистра; младший байт содержимого индексного регистра; С-бит, передаваемый в регистр признаков.

Таблица 3.3 (см. скан) Команды обращения к памяти микропропессора

21.3.2. АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОПЕРАЦИИ

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

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

В качестве примера составим программу сложения двух -разрядных чисел. Первое слагаемое должно быть записано в ячейки памяти 0001 и 0002, причем старший байт в ячейке 0001, а младший в ячейке 0002. Второе слагаемое записывается в ячейки 0003 и 0004. Результат необходимо записать в ячейки 0005 и 0006.

На первом шаге осуществляется сложение младших байтов двоичных чисел, т.е. содержимого ячеек 0002 и 0004. Так как не нужно учитывать перенос, используется команда Результат записывается в ячейку 0006. На втором шаге производится сложение старших байтов с помощью команды В этом случае необходимо учитывать возможный перенос, полученный в результате предыдущей операции сложения. Он считывается из регистра признаков Результат

(см. скан)

(продолжение) (см. скан)


запоминается в ячейке 0005. Составленная программа приведена в табл. 21.5.

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

Таблица 21.5 (см. скан) Программа сложения двух 16-разрядных чисел

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

21.3.3. КОМАНДЫ ПЕРЕХОДА. РЕГИСТР ПРИЗНАКОВ

Важным преимуществом микропроцессора является возможность выполнения разнообразных логических переходов в программе. Для этого проверяется содержимое различных разрядов регистра признаков (Condition Code Register). Регистр признаков имеет 8 разрядов. Два старших разряда (шестой и седьмой) содержат константу, равную 1. Остальные признаки располагаются следующим образом:

ОБОЗНАЧЕНИЯ

(см. скан)

I признак прерывания (Interrupt); - дополнительный перенос из третьего разряда (Half Carry).

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

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

Все команды, при которых не запоминается никакого результата, кроме признака, перечислены в табл. 21.6.

Безусловные переходы

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


Таблица 21.6 (см. скан) Команды микропроцессора воздействующие только на регистр признаков

описаны в разд. 21.2.2. При этом программа имеет следующий вид:

(см. скан)

При относительно адресуемом переходе (Branch) указывается не абсолютный адрес следующей команды, которую необходимо выполнить, а величина смещения, на которую нужно изменить содержимое программного счетчика. Это удобнее, так как при переходе в другую область адресов изменения программы не потребуется. Величина смещения задается с помощью 7-разрядного числа со знаком в дополнительном двоичном коде, который описан в разд. 19.5.6. Следовательно, область перехода ограничена зоной -128 ... +127 шагов программы. В этом случае программа имеет следующий вид:

(см. скан)

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

Условные переходы

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

Поясним использование команд условного перехода на примере. Пусть необходимо загрузить массив

Таблица 21.7 (см. скан) Команды перехода микропроцессора МС 6800


в область памяти с адресами от до При этом старший байт адреса записывается в ячейку 0000, младший байт - в ячейку 0001.

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

Таблица 21.8 (см. скан) Программа загрузки памяти начиная с адреса числовым рядом

Подпрограммы

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

Возможен переход от одной подпрограммы к другой, т.е. вложение подпрограмм; для этого необходимо, пока предыдущий возврат еще не произошел, дополнительно запомнить второй адрес возврата. Первый возврат нужно осуществить по адресу, записанному последним, второй — по адресу, записанному предпоследним, и т. д. Для организации этого процесса служит специальный -разрядный регистр ЦПЭ, который называется указателем стека.

Для запоминания адресов возврата выделяют специальную область ОЗУ, которая для других целей не используется. Она называется стеком (Stack). Объем стека выбирают в зависимости от числа возможных вложений подпрограмм. После подключения микропроцессора верхний адрес этой области загружают в указатель стека ЦПЭ с помощью указанной в табл. 21.9 команды LDS.

Если теперь с помощью команд BSR или JSR осуществить переход к подпрограмме, то код адреса возврата (младший байт) будет автоматически записан в ячейку, адрес которой содержится в указателе стека. Затем содержимое указателя стека уменьшится на единицу и в заданную ячейку будет записан старший байт кода адреса возврата. После этого содержимое указателя стека снова уменьшится на единицу и при этом укажет адрес следующей свободной ячейки области ОЗУ, отведенной под стек.

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

С помощью команды RTS (Return from Subroutine) последний адрес возврата переписывается из стека в программный счетчик, и содержимое указателя стека увеличивается на два. Таким образом, адреса возврата обрабатываются, как это и требуется, в порядке, обратном их поступлению. Стек можно использовать для промежуточного запоминания содержимого аккумулятора. Для этого служат команды В с неявной адресацией, которые осуществляют запоминание содержимого регистров в той ячейке, адрес которой задает указатель стека. После этого содержимое стека уменьшается на единицу, так как длина слова данных

Таблица 21.9 (см. скан) Операции со стеком в микропроцессоре МС 6800


в отличие от длины слова адреса составляет всего 8 бит.

С помощью команд PUL А или PUL В данные извлекаются из стека. Ясно, что данные, которые были подвергнуты промежуточному запоминанию в стеке, должны быть снова возвращены в ту же подпрограмму, так как в противном случае адреса возврата и данные перемешаются.

Прерывания

Прерывающая программа представляет собой особую форму подпрограммы. Она отличается от обычных подпрограмм тем, что выход из текущей программы осуществляется не с помощью команды перехода, которая находится в определенном месте программы, а произвольно по запросу внешнего управляющего сигнала. Этот управляющий сигнал необходимо подать на вход прерываний IRQ (Interrupt Request) ЦПЭ.

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

Так как выход может произойти в любом месте текущей программы, то необходимо позаботиться о том, чтобы эта программа безошибочно могла продолжить свою работу после возврата из прерывающей программы. Для этого нужно восстановить первоначальные данные в рабочих регистрах ЦПЭ. С этой целью при прерывании содержимое регистров аккумуляторов индексного регистра и регистра признаков запоминается в стеке. По команде RTI (Return from Interrupt) эта информация возвращается в ЦПЭ. В качестве

Рис. 21.4. Пример содержимого стека.

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

После окончания прерывающей программы осуществляется возврат во вторую подпрограмму, а из нее в первую подпрограмму. В приведенном примере обе команды необходимо затем дополнить соответствующими командами PUL, которые обеспечат возврат в основную программу. В этом состоянии указатель стека снова задает старший адрес стека (например: 07FF).

Маска прерываний

С помощью признака прерываний I в регистре признаков можно блокировать вход прерываний Переход к прерывающей программе происходит только в том случае, если сигнал подается в ЦПЭ и признак установлен в исходное состояние. Поэтому этот признак называется также маской прерываний. Ее можно установить или сбросить с помощью соответствующих команд и указанных в табл. 21.6. При переходе к прерывающей программе маска устанавливается автоматически, для того чтобы эту программу нельзя было вызвать снова, прежде чем она закончится. Выполнение программы, которое осуществляется при прерывании, иллюстрирует рис. 21.5.

По управляющей шине NMI (Non maskable Interrupt) можно переходить ко второй прерывающей программе, начальный адрес которой записан в ячейках (старший байт) и FFFD (младший байт). При этом способе прерываний маска прерываний не опрашивается, поэтому обе прерывающие программы тоже можно вложить друг в друга.

Третья прерывающая программа может начинаться командой SWI (Software Interrupt). Ее начальный адрес тоже будет записан не в программе, а в ячейках и При этом преимущество (по отношению к обычной команде перехода) состоит в том, что содержимое рабочих регистров без дополнительных команд временно запоминается в стеке. Возврат происходит по команде RTI. Маска прерываний не контролируется.

Повторный пуск

Дополнительную возможность для вмешательства в выполняемую программу с помощью управляющего сигнала

Рис. 21.5. (см. скан) Блок-схема обработки прерывания IRQ и возврата RTI.

предоставляет вход «Reset» на ЦПЭ. Этот вход используется для пуска машины. Если управляющий сигнал «Reset» воспринят ЦПЭ, то он загружает программный счетчик адресом повторного пуска. Этот адрес должен быть постоянно записан в ячейках и Перечень различных начальных адресов приведен на рис. 21.6.

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

Рис. 21.6. Заполнение ячеек памяти начальными адресами прерывающей программы.

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

1
Оглавление
email@scask.ru