Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
21.3. НАБОР КОМАНДВ этом разделе приведен набор команд микропроцессора МС 6800. Он может выполнять 72 различные операции, большинство из которых можно использовать с различными операндами. Всего с учетом разнообразных способов адресации получается набор из 197 инструкций. 21.3.1. ОПЕРАЦИИ ЗАПИСИВ табл. 21.3 перечислены операции, обеспечивающие обмен данными между различными регистрами. Здесь использованы следующие обозначения: А - содержимое аккумулятора Таблица 3.3 (см. скан) Команды обращения к памяти микропропессора 21.3.2. АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОПЕРАЦИИВ табл. 21.4 приведены команды, реализующие арифметические и логические (булевы) операции. Логические операции выполняются независимо над каждым битом слова данных и выдаются в соответствующий разряд результата. Рассмотрим, например, операцию
Набор команд для выполнения арифметических операций в обычных микропроцессорах очень ограничен. Он включает команды сложения, вычитания и перевода в дополнительный код. Сложение можно выполнять как в двоично-десятичном коде, так и с использованием команды десятичной коррекции В качестве примера составим программу сложения двух На первом шаге осуществляется сложение младших байтов двоичных чисел, т.е. содержимого ячеек 0002 и 0004. Так как не нужно учитывать перенос, используется команда (см. скан) (продолжение) (см. скан) запоминается в ячейке 0005. Составленная программа приведена в табл. 21.5. Эта программа способна также производить сложение двух 4-разрядных двоично-десятичных чисел. Таблица 21.5 (см. скан) Программа сложения двух 16-разрядных чисел Для этой цели обе команды отсутствия операций 21.3.3. КОМАНДЫ ПЕРЕХОДА. РЕГИСТР ПРИЗНАКОВВажным преимуществом микропроцессора является возможность выполнения разнообразных логических переходов в программе. Для этого проверяется содержимое различных разрядов регистра признаков (Condition Code Register). Регистр признаков имеет 8 разрядов. Два старших разряда (шестой и седьмой) содержат константу, равную 1. Остальные признаки располагаются следующим образом:
ОБОЗНАЧЕНИЯ(см. скан) I признак прерывания (Interrupt); При выполнении операций обращения к памяти или при вычислениях отдельные признаки устанавливаются либо в единичное, либо в нулевое состояние. Если, например, число загружается в аккумулятор, причем седьмой разряд числа равен единице, то признак N устанавливается в 1, так как число в дополнительном коде интерпретируется как отрицательное. Если при сложении или вычитании известно условие переполнения для дополнительного двоичного кода, описанного в разд. 19.5.6, то появляется признак переполнения В ряде операций результат выдается в виде признаков состояния. Если, например, необходимо определить, что число в регистре А больше, чем число в регистре В, то с помощью командц вычитания Все команды, при которых не запоминается никакого результата, кроме признака, перечислены в табл. 21.6. Безусловные переходыБезусловный переход выполняется без считывания содержимого регистра признаков. При этом различают абсолютную и относительную адресации. При выполнении операции абсолютно адресованного перехода (Jump) указывается адрес, на который должен перейти программный счетчик. Для этого можно использовать два рассмотренных выше способа: прямую адресацию и адресацию с индексированием. Адрес следующей команды указывается теми же способами, которые были Таблица 21.6 (см. скан) Команды микропроцессора описаны в разд. 21.2.2. При этом программа имеет следующий вид: (см. скан) При относительно адресуемом переходе (Branch) указывается не абсолютный адрес следующей команды, которую необходимо выполнить, а величина смещения, на которую нужно изменить содержимое программного счетчика. Это удобнее, так как при переходе в другую область адресов изменения программы не потребуется. Величина смещения задается с помощью 7-разрядного числа со знаком в дополнительном двоичном коде, который описан в разд. 19.5.6. Следовательно, область перехода ограничена зоной -128 ... +127 шагов программы. В этом случае программа имеет следующий вид: (см. скан) Отсчет смещения ведется от адреса, следующего за командой и являющегося относительным адресом перехода. Если смещение равно 00, то программа выполняется последовательно без реализации перехода. Условные переходыУсловные переходы выполняются только тогда, когда установлен соответствующий признак регистра признаков. При этом применяется только относительный способ адресации. Если условие не выполняется, то перехода не происходит и программа выполняет команду, следующую за командой условного перехода с относительным способом адресации. В табл. 21.7 перечислены важнейшие команды условного перехода. В командах, которые относятся к арифметике в дополнительном двоичном коде, знак при переполнении интерпретируется верно, так как производится оценка признака переполнения. Мерой всегда служит операция, указанная в графе «Комментарии». В этой графе приведены тесты по проверке определенных двоичных комбинаций. Поясним использование команд условного перехода на примере. Пусть необходимо загрузить массив Таблица 21.7 (см. скан) Команды перехода микропроцессора МС 6800 в область памяти с адресами от Приведенная в табл. 21.8 программа начинается с загрузки Таблица 21.8 (см. скан) Программа загрузки памяти начиная с адреса ПодпрограммыПереход к подпрограмме Возможен переход от одной подпрограммы к другой, т.е. вложение подпрограмм; для этого необходимо, пока предыдущий возврат еще не произошел, дополнительно запомнить второй адрес возврата. Первый возврат нужно осуществить по адресу, записанному последним, второй — по адресу, записанному предпоследним, и т. д. Для организации этого процесса служит специальный Для запоминания адресов возврата выделяют специальную область ОЗУ, которая для других целей не используется. Она называется стеком (Stack). Объем стека выбирают в зависимости от числа возможных вложений подпрограмм. После подключения микропроцессора верхний адрес этой области загружают в указатель стека ЦПЭ с помощью указанной в табл. 21.9 команды LDS. Если теперь с помощью команд BSR или JSR осуществить переход к подпрограмме, то код адреса возврата (младший байт) будет автоматически записан в ячейку, адрес которой содержится в указателе стека. Затем содержимое указателя стека уменьшится на единицу и в заданную ячейку будет записан старший байт кода адреса возврата. После этого содержимое указателя стека снова уменьшится на единицу и при этом укажет адрес следующей свободной ячейки области ОЗУ, отведенной под стек. Если при этом внутри подпрограммы осуществляется переход к следующей подпрограмме, то второй код адреса возврата таким же образом записывается в следующие две более младшие ячейки стека. Следовательно, стек всегда заполняется в направлении убывания адресов ячеек, и тем дальше, чем больше подпрограмм вложено друг в друга. С помощью команды RTS (Return from Subroutine) последний адрес возврата переписывается из стека в программный счетчик, и содержимое указателя стека увеличивается на два. Таким образом, адреса возврата обрабатываются, как это и требуется, в порядке, обратном их поступлению. Стек можно использовать для промежуточного запоминания содержимого аккумулятора. Для этого служат команды Таблица 21.9 (см. скан) Операции со стеком в микропроцессоре МС 6800 в отличие от длины слова адреса составляет всего 8 бит. С помощью команд PUL А или PUL В данные извлекаются из стека. Ясно, что данные, которые были подвергнуты промежуточному запоминанию в стеке, должны быть снова возвращены в ту же подпрограмму, так как в противном случае адреса возврата и данные перемешаются. ПрерыванияПрерывающая программа представляет собой особую форму подпрограммы. Она отличается от обычных подпрограмм тем, что выход из текущей программы осуществляется не с помощью команды перехода, которая находится в определенном месте программы, а произвольно по запросу внешнего управляющего сигнала. Этот управляющий сигнал необходимо подать на вход прерываний IRQ (Interrupt Request) ЦПЭ. Начальный адрес прерывающей программы запоминается в специальных ячейках, находящихся за пределами программы. Для этой цели в микропроцессоре Так как выход может произойти в любом месте текущей программы, то необходимо позаботиться о том, чтобы эта программа безошибочно могла продолжить свою работу после возврата из прерывающей программы. Для этого нужно восстановить первоначальные данные в рабочих регистрах ЦПЭ. С этой целью при прерывании содержимое регистров аккумуляторов
Рис. 21.4. Пример содержимого стека. примера рассмотрим содержимое стека после прерывания, которое иллюстрирует рис. 21.4. При этом будем исходить из того, что к моменту прерывания выполнялась вторая подпрограмма, а в течение первой подпрограммы еще не законченной, содержимое аккумуляторов После окончания прерывающей программы осуществляется возврат во вторую подпрограмму, а из нее в первую подпрограмму. В приведенном примере обе команды Маска прерыванийС помощью признака прерываний I в регистре признаков можно блокировать вход прерываний По управляющей шине NMI (Non maskable Interrupt) можно переходить ко второй прерывающей программе, начальный адрес которой записан в ячейках Третья прерывающая программа может начинаться командой SWI (Software Interrupt). Ее начальный адрес тоже будет записан не в программе, а в ячейках Повторный пускДополнительную возможность для вмешательства в выполняемую программу с помощью управляющего сигнала Рис. 21.5. (см. скан) Блок-схема обработки прерывания IRQ и возврата RTI. предоставляет вход «Reset» на ЦПЭ. Этот вход используется для пуска машины. Если управляющий сигнал «Reset» воспринят ЦПЭ, то он загружает программный счетчик адресом повторного пуска. Этот адрес должен быть постоянно записан в ячейках После повторного пуска в указателе стека может быть записано случайное число. Поэтому в начале программы с помощью команды
Рис. 21.6. Заполнение ячеек памяти начальными адресами прерывающей программы. загрузить определенный адрес в указатель стека, если предусматривается какая-либо операция со стеком.
|
1 |
Оглавление
|