Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Org_EVM_var_dlya_MGOU.doc
Скачиваний:
20
Добавлен:
21.04.2019
Размер:
6.1 Mб
Скачать

11.4. Программное управление мп

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

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

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

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

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

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

МП с управлением на уровне команд имеют в списке обычно 45 - 150 команд. МП с управлением на уровне микропрограмм имеют обычно 256 - 512 микрокоманд. Как правило, МП замкнутого типа (для которых наращивание разрядности осуществляется программным путем) имеют управление на уровне команд, а секционированные МП (наращивание разрядности аппаратным путем) имеют управление на уровне микропрограмм. Примером отечественных однокристальных МП с управлением на уровне команд являются МП серий К580 (аналог Intel 8080), К581, К588, К1801/09, К1806, К1810 (аналог Intel 8086), К1821, К1824, К1831. Примером секционированных МП с управлением на уровне микропрограмм являются МП серий К583, К584, К589, К1802 (К1822), К1804 (аналог Am2900), К1832.

Рассмотрим основные принципы организации работы МП с точки зрения разбиения команд на последовательности микрокоманд. Время, необходимое для считывания команды из памяти и ее выполнения, называется циклом команды. Цикл команды реализуется обычно за 1-5 машинных циклов. Машинный цикл - это промежуток времени, затрачиваемый МП на одно обращение к какому-либо периферийному модулю (ОЗУ, ПЗУ, внешнему устройству ввода-вывода, называемому портом ввода или вывода). В МП используются обычно следующие базовые типы машинных циклов:

  • выборка команды (прием кода операции в регистр команд);

  • считывание из памяти;

  • запись в память;

  • ввод из порта ввода;

  • вывод в порт вывода;

  • прерывание;

  • останов;

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

  1. вывод на шину адреса кода адреса вызываемого порта или ячейки памяти;

  2. анализ управляющих сигналов, выставление на шину данных пересылаемой информации;

  3. осуществление обмена информацией с вызываемым портом или ячейкой памяти;

  4. расшифровка команды и выполнение внутренних операций МП.

Перейдем к рассмотрению формата команд для большинства типов МП. Команда МП представляет собой такое двоичное слово, которое будучи считанное микропроцессором (преимущественно из памяти), заставляет его выполнить определенные действия. Другие, отличные от команд двоичные слова подобных действий в МП не вызывают. Длина команды как двоичного слова совпадает с длиной слова данных. Например, длина слова команды 8-разрядного МП равна 8 бит, 16-разрядного - 16 бит и 32-разрядного - 32 бит. Однако длина команды целиком не обязательно должна ограничиваться одним словом. Есть команды МП, имеющие длину в два или три слова. Таким образом, для 8-разрядного МП команда может иметь длину в 8, 16 или 24 бит, 16-разрядного МП - 16, 32 или 48 бит. Хотя данное утверждение нельзя принимать однозначно. Существуют команды для 16- и 32-разрядных МП длиной в 8 бит. Особенно это характерно для МП, являющихся дальнейшим развитием предшествующих моделей, в которых обеспечивается программная совместимость с моделями более раннего выпуска.

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

Так, если разрядность ячейки памяти равна разрядности шины данных МП, то для многих типов МП с простыми способами адресации команды с длиной более одного слова располагаются в соседних ячейках памяти, причем наименьший адрес (А) имеет первое слово. Второе слово располагается в ячейке памяти с адресом на 1 большим (A+1), третье слово - в ячейке памяти с адресом еще на 1 большим (А+2):

Адрес А

Адрес А+1 (2 или 4)

Адрес А+2 (4 или 8)

1е слово

код операции

2е слово

адрес (данные)

3е слово

адрес (данные)

Если ячейка памяти имеет разрядность 8 бит, то под каждый байт команды отводится свой адрес. В этом случае первое слово будет иметь адрес (А), второе слово - адрес (А+2) или (А+4) в зависимости от разрядности МП, а третье слово - адрес (А+4) или (А+8) соответственно разрядности МП. В командах с длиной более одного слова адрес первого слова команды считается адресом всей команды.

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

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

По функциональному назначению команды МП можно разделить на следующие группы:

  1. команды пересылки кодов между ОЗУ и регистрами МП;

  2. команды для выполнения арифметических действий;

  3. команды для выполнения логических действий;

  4. команды передачи управления и вызова подпрограмм;

  5. команды для сдвига данных в регистрах, инкремента-декремента данных в регистрах;

  6. команды ввода-вывода;

  7. специальные системные команды.

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

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

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

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

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

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

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

Стековая адресация. Применительно к МП под стеком понимается любая область ОЗУ, ячейки которой заполняются последовательно друг за другом. Аналогично - ячейка за ячейкой происходит и вывод информации из стека. При этом данные из стека читаются в последовательности, обратной той, которая была при записи, т.е. реализуется принцип: "вошедший последним - выходит первым". Достоинством команд со стековой адресацией является то, что программист может не заботиться о конкретных адресах ячеек памяти, куда записываются и откуда считываются данные. Достаточно знать код адреса начала стековой области ОЗУ. Этот код (код верхушки стека) предварительно записывается в указатель стека. С помощью команд, использующих стековую адресацию, в стек можно переслать число из регистра или из счетчика команд. Пусть требуется записать в стек содержимое двух регистров (регистровой пары). Сначала содержимое SР указателя стека с помощью схемы инкремента (декремента) уменьшается на единицу, в результате чего на шину адреса выставляется адрес SР-1 (рис. 4.2). По этому адресу производится запись в стек слова данных из первого регистра. Далее содержимое указателя стека вновь уменьшается на единицу и на шину адреса выставляется адрес SP-2, по которому в стек записывается слово данных из второго регистра. Таким образом, по окончании записи содержимое указателя стека становится равным SР-2. Часто вместо выражения "содержимое указателя стека" употребляют выражение "положение указателя стека". Тогда можно сказать, что при занесении в стек содержимого регистра или счетчика команд указатель стека автоматически каждый раз при записи очередного слова "смещается вниз", т.е. в сторону младших адресов памяти.

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

Адреса

ОЗУ

(Максимальный

объем стека)-1

.

.

.

SP

 положение указателя стека до записи

SP-1

Первое слово (байт)

SP-2

Второе слово (байт)

 положение указателя стека после записи

.

.

.

1

0

Рис. 11.4.1. Реализация команды записи в стек

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

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

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

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

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

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

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

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

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

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

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

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

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

Помимо языков низкого уровня существуют также языки высокого уровня. В этих языках команды, представляемые условными обозначениями, определяют действия, ориентированные на эффективное решение задач определенного класса. Например, для программирования на ЭВМ используется язык высокого уровня БЕЙСИК. Этот язык предназначен для решения инженерных задач и позволяет с помощью отдельных команд производить вычисления логарифмов, синусов, квадратных корней и других математических функций. Из других языков высокого уровня отметим ПАСКАЛЬ - для создания системного и прикладного программного обеспечения, СИ - для создания системных и прикладных программ с учетом особенностей аппаратных средств.

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

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

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

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

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

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

Условное обозначение команды помимо мнемоники может также включать названия регистров r и регистровых пар rp. Воспользуемся для примера гипотетическими, т.е. не привязанными к конкретному типу МП названиями регистров - аккумулятором А и регистрами общего назначения В и С. Регистровые пары, если их наличие предусмотрено типом МП, даются как правило первыми буквами их обозначения. Так вместо регистровой пары BC в обозначениях команд будет записан символ В. Например, команда пересылки данных из регистра С в аккумулятор имеет обозначение MOV А, С (от move – переслать). Команда загрузки в стек содержимого регистровой пары ВС имеет обозначение PUSH B (от push – проталкивать).

При описании системы команд операнд может иметь условное обозначение data, адрес порта - условное обозначение port, а адрес ячейки памяти или адрес перехода - условное обозначение addr. Например, команда записи в регистр С операнда, содержащегося во втором слове команды имеет обозначение MVI C, data (от move immediate - передать непосредственно). Команда записи в аккумулятор данных из порта, адрес которого содержится во втором слове команды, имеет обозначение IN port (от input – ввести). Команда безусловного перехода, по которой адрес, содержащийся в команде записывается в счетчик команд, имеет обозначение JMP addr (от jump - перейти). При использовании команд в программе вместо обозначений data, port и addr будут подставлены конкретные числовые операнды и адреса.

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

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

В поле "операция" записывают мнемоническое обозначение выполняемой команды. Например: ADD, МОV, LXI и т.д. При написании программы на языке ассемблера программист не следит за адресами команд, поэтому для того, чтобы выделить команду, к которой необходимо осуществить переход из другого места программы, ей присваивается символический адрес, называемый меткой. В процессе трансляции исходной программы в объектную программа-транслятор определит адреса всех команд и заменит символические адреса (метки) конкретными адресами. Метка проставляется в поле "метка" перед мнемоникой команды. Непосредственно после метки ставится двоеточие. Меткой может служить последовательность из цифр и латинских букв, причем первым символом должна быть буква. На длину метки ограничений не накладывается, но большинство программ-трансляторов с языка ассемблера в процессе трансляции контролирует только восемь первых символов. В качестве меток нельзя использовать мнемонические обозначения команд, названия регистров и регистровых пар. Рассмотрим пример (как мы договорились ранее, при составлении примеров будем использовать гипотетические регистры А, В и С):

Метка

Операция

Операнд

LAB:

MOV

A,B

JMP

LAB

В рассмотренном примере по команде безусловного перехода JMP LAB будет осуществлен переход к команде, имеющей метку LАВ, т.е. к команде MOV А,В, которая содержимое из регистра В пересылает в аккумулятор. В ходе трансляции программы в объектную программа-транслятор определит действительный адрес команды MOV А,В и поставит его в команду JMP LАВ вместо метки LАВ. Как правило, допускается наличие у одной команды нескольких меток, которые должны размещаться в разных строках, например:

Метка

Операция

META:

METB:

RAR

В рассмотренном примере к команде RAR можно перейти, используя любую из меток МЕТА и МЕТB. В зависимости от типа команды поле "операнд" в общем случае может или ничего не содержать или содержать:

  1. Название регистра (регистровой пары).

  2. Адрес.

  3. Операнд.

  4. Названия двух регистров (регистровых пар).

  5. Название регистра (регистровой пары) и операнд.

Операнды и адреса представляются в поле "операнд" символическими именами (метками), числами и выражениями. В рассмотренном выше примере при записи команды безусловного перехода JMP addr в качестве адреса была использована метка LAB, помечающая команду MOV А,В. Метки, присваиваемые операндам, имеют те же правила написания, что и метки команд, например:

Операция

Операнд

ADI

B5C

MVI

C,FOR

Первый из операторов складывает с содержимым аккумулятора число, обозначенное меткой В5C, а второй - заносит в регистр С число, обозначенное меткой FOR. При этом в программе должно быть определено, какие именно числа соответствуют меткам В5С и FOR.

Операнды и адреса могут быть представлены десятичными, двоичными, восьмеричными, шестнадцатеричными числами.

Десятичное число не сопровождается никаким специальным признаком, например:

Операция

Операнд

SUI

120

STA

26805

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

Двоичное число в поле "операнд" в большинстве языков ассемблера дополняется в конце латинской буквой В, например:

Операция

Операнд

ANI

00010000В

Записанный оператор производит операцию поразрядного логического умножения содержимого аккумулятора и числа 000100002 (индекс 2 указывает на то, что число двоичное).

Восьмеричное число в поле "операнд" дополняется буквой О или Q, например:

Операция

Операнд

IN

46Q

LXI

SP,10307O

Первый оператор передает в аккумулятор данные из порта, адрес которого 468, а второй - заносит в указатель стека SP число 103078.

Широкое применение при написании программ получила шестнадцатеричная форма представления чисел. В шестнадцатеричной системе счисления используется 16 символов: десять цифровых (от 0 до 9) и шесть буквенных (от А до F).

Для перевода двоичного числа в шестнадцатеричное оно разбивается на тетрады, т.е. группы по 4 разряда в каждой. При этом, если длина двоичного числа не кратна 4, оно дополняется слева нулями. После этого каждая тетрада заменяется соответствующим символом шестнадцатеричной системы. Например, двоичное число 101100 дополняется слева двумя нулями и разбивается на тетрады 0010 и 1100. После замены каждой тетрады соответствующим символом шестнадцатеричной системы получаем шестнадцатеричное число 2С (2C16). Таким образом, для представления в шестнадцатеричной системе счисления однобайтового операнда достаточно двух разрядов, а двухбайтового операнда или адреса - четырех разрядов. За шестнадцатеричным числом в поле "операнд" должна следовать латинская буква Н. Для того, чтобы шестнадцатеричное число можно было отличить от метки, оно должно начинаться с цифры. В случае, если первым символом является буква, перед числом проставляется незначащий нуль. Рассмотрим примеры:

Операция

Операнд

LDA

6CA2H

LXI

В, 0Е060Н

Первый оператор пересылает в аккумулятор содержимое ячейки памяти с адресом 6СА216, второй оператор - заносит в регистровую пару BC число E06016.

Кратко остановимся на представлении операндов и адресов с помощью выражений.

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

Операция

Операнд

CPI

16+82/2-META

Данный оператор производит сравнение содержимого аккумулятора с числом 55 если, например, метка МЕТА имеет значение 2.

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

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

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

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

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

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

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

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

Если ассемблер или компилятор реализуются на той же ЭВМ, для которой ими вырабатывается объектная программа, то они называются резидентным ассемблером и резидентным компилятором соответственно. Если ассемблер или компилятор реализуются на ЭВМ другого типа, то они называются кросс-ассемблером и кросс-компилятором соответственно. Та ЭВМ, для которой кросс-ассемблер или кросс-компилятор создает объектные программы, называется целевой ЭВМ.

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

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

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

Различают два способа отладки программ: пошаговый режим и трассировка программ.

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

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

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

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

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

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

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

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

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

Рис. 11.4.2. Типовая структурная схема однокристального МП

Внешняя шина адреса

Внешняя шина данных

Линии сигналов управления

ВНУТРЕННЯЯ ШИНА ДАННЫХ

Аккумулятор

Регистр признаков

Регистр команд (очередь команд)

Дешифратор

команд

УСТРОЙСТВО СИНХРОНИЗАЦИИ И УПРАВЛЕНИЯ

Регистры временного хранения

Регистры общего назначения

Адресные регистры

Указатель стека

Счетчик команд

Буферный регистр

адреса

шину данных из памяти, портов ввода или других регистров. К АЛУ подключен регистр признаков. Регистр признаков (регистр флагов) предназначен для хранения признаков результата операции. Регистр признаков может также содержать информацию о состоянии МП на определенном этапе выполнения программы. Обычно минимальная конфигурация регистра признаков содержит следующие разряды (обозначения разрядов введены условно):

  • С - разряд признака переноса. Указанный разряд устанавливается в 1, если в результате сложения двух двоичных чисел длиной в одно слово возникает перенос в старший разряд или в результате вычитания возникает заем из старшего разряда. В противном случае разряд признака переноса устанавливается в 0. Этот признак используется, например, для организации выполнения арифметических операций с повышенной точностью, т.е. с числами длиной более одного слова.

  • Р - разряд признака четности. Разряд этого признака устанавливается в 1, если в полученном результате общее число единиц является четным. В противном случае устанавливается в 0. Этот признак используется при контроле данных на четность.

  • Z - признак нуля. При нулевом значении результата разряд этого признака устанавливается в 1, при ненулевом - в 0. Этот признак используется, например, для получения временных задержек программным путем.

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

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

Указатель стека - регистр, содержащий адрес области памяти ОЗУ, называемой стеком.

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

Эволюция развития наиболее популярных однокристальных МП фирмы Intel (США) и их основные характеристики представлены в табл. 4.1.

Таблица 11.1. Однокристальных МП и их характеристики

Тип МП

Тактовая

частота

Технология

Разрядность шины

данных,

бит

Напрямую адресуемое пространство*

4004

750 кГц

р-МОП

4

4 Кбайт

4040

750 кГц

р-МОП

4

8 Кбайт

8008-1

800 кГц

р-МОП

8

16 Кбайт

8080 (отечественный аналог КР580ВМ80)

2 МГц

n-МОП

8

64 Кбайт

8086 (отечественный аналог КМ1810ВМ86)

6 МГц

n-МОП

16

1 Мбайт

8088-1

10 МГц

n-МОП

8 (для внешней шины)

1 Мбайт

80286

25 МГц

КМОП

16

16 Мбайт

80386

40 МГц

КМОП

32

4 Гбайт

80486

66 МГц

КМОП

32

4 Гбайт

Pentium (Pentium MMX,

Pentium Pro, Pentium II, Pentium III, Pentium IV)

166 МГц и выше для модификаций

КМОП

64

4 Гбайт

*Примечание: При использовании сложных комбинированных способов адресации, например, при сегментной адресации, объем памяти уже для МП 80386 может достигать уровня 64 Гбайт.

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

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

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

  • r - один из регистров А, В или С, или внешний регистр М, организованный в ячейке памяти, адрес которой хранится в регистровой паре ВС или специальном адресном регистре;

  • rp - регистровая пара ВС, указатель стека SP или специальный адресный регистр;

  • data - операнд или данные, обрабатываемые соответствующей командой;

  • addr - адрес ячейки памяти, указываемый в команде;

  • port - адрес порта ввода-вывода, указываемого в команде;

  • SP - указатель стека;

  • PC - счетчик команд;

  • ( ) - содержимое регистра (регистровой пары), указанного внутри скобок;

  • [ ] - содержимое ячейки памяти (порта), адрес которой указан внутри скобок;

  •  - направление передачи;

  • , ,  - логические операции “ИЛИ”, “И”, “ИСКЛЮЧАЮЩЕЕ ИЛИ” соответственно;

  • - CON - обобщенное обозначение, заменяемое на мнемонику условия перехода, вызова

Таблица 11.2. Система команд МП

Группа команд

Условное обозначение

Описание команды

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

кодов

1. MOV r1, r2

(r1)  (r2)

2. MVI r, data

(r)  ОПЕРАНД

3. LXI rp, data

(rp)  ОПЕРАНД

4. STA addr

[АДРЕС]  (A)

5. LDA addr

(A)  [АДРЕС]

6. STAX rp

[rp]  (A)

7. LDAX rp

(A)  [rp]

8. PUSH r

[SP]  (r)

9. POP r

(r)  [SP]

Команды выполнения арифметических операций

1. ADD r

(A)  (A) + (r)

2. SUB r

(A)  (A) - (r)

3. ADI data

(A)  (A) + ОПЕРАНД

4. SUI data

(A)  (A) – ОПЕРАНД

5. ADC r

(A)  (A) + (r) + (С)

6. SBB r

(A)  (A) - (r) - (С)

7. ACI data

(A)  (A) + ОПЕРАНД + (С)

8. SBI data

(A)  (A) – ОПЕРАНД - (С)

9. DAA

Десятичная коррекция

10. INR r

(r)  (r) + 1

11. DCR r

(r)  (r) – 1

12. INX rp

(rp)  (rp) + 1

13. DCX rp

(rp)  (rp) – 1

Команды выполнения логических операций

1. ANA r

(A)  (A)  (r)

2. ANI data

(A)  (A)  ОПЕРАНД

3. ORA r

(A)  (A)  (r)

4. ORI data

(A)  (A)  ОПЕРАНД

5. XRA r

(A)  (A)  (r)

6. XRI data

(A)  (A)  ОПЕРАНД

7. CMA

(A)  ( )

8. CMP r

(A) – (r)

9. CPI data

(A) – ОПЕРАНД

10. RLC

(ai+1)  (ai)

(a0)  (aN)

(C)  (aN)

11. RRC

(ai)  (ai+1)

(aN)  (a0)

(C)  (a0)

12. RAL

(ai+1)  (ai)

(a0)  (C)

(C)  (aN)

13. RAR

(ai)  (ai+1)

(aN)  (C)

(C)  (a0)

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

1. JMP addr

(PC)  АДРЕС

2. J-CON addr

(PC)  АДРЕС

3. CALL addr

[SP]  (PC)

(PC)  АДРЕС

4. C-CON addr

[SP]  (PC)

(PC)  АДРЕС

5. RET

(PC)  [SP]

6. R-CON

(PC)  [SP]

Команды ввода-вывода и специальные

1. IN port

(A)  [АДРЕС]

2. OUT port

[АДРЕС]  (A)

3. EI

Разрешить прерывание

4. DI

Запретить прерывание

5. NOP

(PC)  (PC) + 1

6. HLT

Останов

и возврата из подпрограммы. Договоримся использовать следующие мнемонические обозначения этих условий: NZ - ненулевой результат (разряд регистра признаков Z=0), Z - нулевой результат (разряд регистра признаков Z=1), NC - отсутствие переноса (разряд регистра признаков C=0), C - наличие переноса (разряд регистра признаков С=1), P0 - нечетное число (разряд регистра признаков P=0), PE - четное число (разряд регистра признаков P=1), P - неотрицательный результат (разряд регистра признаков S=0), M - отрицательный результат (разряд регистра признаков S=1).

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

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

1. Команда MOV r1,r2. Это команда с прямой регистровой адресацией данных. По этой команде содержимое регистра r2 переписывается в регистр r1, причем содержимое регистра r2 сохраняется. Например, после выполнения команды MOV C, А данные из регистра А будут переписаны в регистр С. Содержимое регистра А не изменится.

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

2. Команда MVI r, data является командой с непосредственной адресацией данных. Эта команда обеспечивает загрузку любого регистра, в том числе и внешнего регистра М операндом, присутствующим в команде. Например, по команде MVI B, 2BH в регистр В загружается число 2В16.

3. Команда LXI rp, data аналогична предыдущей, но отличается тем, что загружает любую регистровую пару, а также указатель стека SP или адресные регистры указанным в команде операндом. Команда LXI В, data используется, например, для записи в регистровую пару ВС адреса ячейки памяти, которую предполагается рассматривать в качестве внешнего регистра М.

4. Команда STA addr является командой с прямой адресацией данных и предназначена для передачи байта информации из аккумулятора в ячейку памяти, адрес которой указан в команде.

5. Команда LDA addr осуществляет пересылку информации в обратном направлении, т.е. из ячейки памяти, адрес которой указан в команде в аккумулятор.

6. Команда STAX rp - это команда с косвенной регистровой адресацией данных. Она предназначена для передачи данных из аккумулятора в ячейку памяти, адрес которой содержится в регистровой паре или специальном адресном регистре, указанными в команде.

7. Команда LDAX rр осуществляет передачу данных в обратном направлении, т.е. из ячейки памяти, адрес которой указан в регистровой паре или адресном регистре в аккумулятор.

8. Команда PUSH r (или PUSH rp) является командой со стековой адресацией. Она засылает в стек содержимое указанных в команде регистров или регистровых пар.

9. Команда POP r (или POP rp) является также командой со стековой адресацией и осуществляет пересылку данных в обратном направлении, т.е. из стека в регистры или регистровые пары.

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

1. Команда АDD r - команда с прямой регистровой адресацией данных. Данная команда содержимое регистра r складывает с содержимым аккумулятора. Результат выполнения команды помещается в аккумулятор. Команда ADD A удваивает содержимое аккумулятора.

2. Команда SUB r также как и предыдущая является командой с прямой регистровой адресацией данных. Эта команда содержимое регистра r вычитает из содержимого аккумулятора. Результат выполнения команды как и в предыдущем случае помещается в аккумулятор. Команда SUB А производит вычитание из аккумулятора его содержимого, т.е. в результате выполнения команды SUB A во всех разрядах аккумулятора будут нули.

3. Команда АDI data является командой с непосредственной адресацией данных. Команда складывает с содержимым аккумулятора операнд, указанный в команде. Результат помещается в аккумулятор.

4. Команда SUI data в отличии от предыдущей команды из содержимого аккумулятора вычитает операнд, указанный в команде. Результат помещается в аккумулятор.

5. Команда ADС r является командой сложения, аналогичной команде ADD r. Отличие заключается в том, что при сложении содержимого аккумулятора и регистра r учитывается значение признака переноса С.

6. Команда SBB r - команда вычитания из содержимого аккумулятора содержимого регистра r, как и в команде SUB r, но с учетом значения признака переноса C.

7. Команда ACI data складывает операнд, присутствующий в команде с содержимым аккумулятора с учетом значения признака переноса С.

8. Команда SBI data вычитает из содержимого аккумулятора операнд, записанный в команде с учетом значения признака переноса C.

Команды ADС r, SBB r, ACI data, SBI data используются для получения результатов повышенной точности, т.е. при работе с числами, разрядность которых больше одного слова. Например, при сложении двух чисел с длиной в два слова сначала складываются их младшие слова с помощью команды ADD r или ADI data. При этом может образоваться перенос из старшего разряда младшего слова суммы. Затем с помощью команды АDС r или ACI data производится сложение старших слов чисел. Если перенос имел место, то единица, занесенная в разряд признака переноса С регистра признаков будет участвовать в сложении старших слов. Аналогично организуется вычитание многоразрядных чисел. Если, например, при вычитании младших слов двух чисел с длиной в два слова, производимом с помощью команды SUB r или SUI data возникает заем из старшего разряда, то в разряд признака переноса С заносится единица, которая должна учитываться при вычитании старших слов этих чисел. С этой целью для вычитания старших слов используется команда SBB r или SBI data. Следует иметь в виду, что если после выполнения сложения двух чисел признак переноса С будет равен единице, то эту единицу следует приписать к полученному результату слева, т.е. рассматривать ее как значение самого старшего разряда результата. Если после вычитания двух чисел признак переноса С окажется равным единице, то полученный результат является отрицательным и представлен в дополнительном коде, а если С=0, то результат положительный и представлен в прямом коде.

9. Команда DAA - команда десятичной коррекции. Поскольку АЛУ складывает числа по правилам двоичной арифметики, то и двоично-десятичные числа будут складываться по этим правилам. Для того, чтобы в этом случае получить результат в виде двоично-десятичного числа необходимо ввести соответствующие поправки. Такие поправки вводятся с помощью команды DАА. Команда DAA используется непосредственно после команды, осуществляющей сложение двух чисел. Для коррекции результата вычитания команда DАА не может быть использована. Сущность коррекции, выполняемой командой DAA, заключается в следующем. Результат сложения разбивается на тетрады (группы по четыре разряда). Начиная с младшей тетрады и двигаясь в направлении к старшим производятся следующие действия. Если значение тетрады результата больше девяти или, если был перенос 1 в следующую тетраду результата, то к тетраде результата прибавляется число 6.

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

10. Команда INR r изменяет содержимое регистра r на +1.

11. Команда DCR r изменяет содержимое регистра r на -1.

12. Команда INX rp изменяет содержимое регистровой пары rp на +1.

13. Команда DCX rр изменяет содержимое регистровой пары rp на -1.

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

Напомним предварительно правила выполнения основных операций Булевой алгебры-логики. Результатом операции поразрядного логического умножения (операции “И”) является двоичное число, отдельные разряды которого равны 1 только тогда, когда соответствующие разряды обоих операндов равны 1. Результатом операции поразрядного логического сложения (операции “ИЛИ”) является двоичное число, отдельные разряды которого равны 1 в случае, когда в соответствующих разрядах исходных операндов присутствует хотя бы одна единица. Результатом операции поразрядного логического сложения по модулю 2 (операции “ИСКЛЮЧАЮЩЕЕ ИЛИ”) является двоичное число, отдельные разряды которого равны 1 только тогда, когда соответствующие разряды исходных операндов имеют противоположные значения.

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

Таблица 11.3. Выполнение логических операций над двумя восьмиразрядными операндами

Первый операнд

1

0

1

0

0

1

0

1

Второй операнд

1

1

0

0

1

1

0

0

Результаты операций

1

0

0

0

0

1

0

0

1

1

1

0

1

1

0

1

0

1

1

0

1

0

0

1

1. Команда АNА r выполняет операцию поразрядного логического умножения (операцию “И”) содержимого аккумулятора и регистра r.

2. Команда ANI data также выполняет операцию поразрядного логического умножения, но над содержимым аккумулятора и операндом, присутствующим в команде. Если необходимо, например, выделить третий разряд в байте, находящимся в аккумуляторе, а остальные его разряды обнулить, то производят операцию поразрядного логического умножения с маской, в третьем разряде которой записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: ANI 00000100B. Символ “B” в конце операнда-маски информирует о двоичной форме его записи.

3. Команда ОRА r выполняет операцию поразрядного логического сложения (операцию “ИЛИ”) содержимого аккумулятора и регистра r.

4. Команда ORI data также выполняет операцию поразрядного логического сложения, но над содержимым аккумулятора и операндом, присутствующим в команде. Если нужно, например, записать в третий разряд байта, находящегося в аккумуляторе, единицу, не изменяя остальных его разрядов, то необходимо произвести операцию поразрядного логического сложения с маской, в третьем разряде которой записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: ORI 00000100B.

5. Команда XRA r выполняет операцию поразрядного логического сложения по модулю 2 (операцию “ИСКЛЮЧАЮЩЕЕ ИЛИ”) содержимого аккумулятора и регистра r. Команда XRA А, в частности, используется для обнуления аккумулятора.

6. Команда XRI data также выполняет операцию поразрядного логического сложения по модулю 2, но над содержимым аккумулятора и операндом, присутствующим в команде. Для того, чтобы изменить на противоположное значение третьего разряда байта, находящегося в аккумуляторе, не изменяя остальных его разрядов, необходимо выполнить операцию поразрядного логического сложения по модулю 2 с маской, в третьем разряде которой записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: XRI 00000100B.Команды ANA А и ORA А позволяют, не изменяя содержимого аккумулятора, воздействовать на разряды регистра признаков. Эти команды могут быть использованы в том случае, если предыдущая команда после выполнения какой-либо операции над содержимым аккумулятора такого воздействия на регистр признаков не оказала.

7. Команда СМА инвертирует содержимое аккумулятора.

8. Команда СМР r позволяет сравнивать два числа, находящихся в аккумуляторе и в регистре r. Сравнение осуществляется вычитанием из содержимого аккумулятора содержимого регистра r. Вычитание производится без изменения содержимого аккумулятора. Результат вычитания проявляется только в воздействии на признаки регистра признаков. Если операнды равны, признак нуля Z устанавливается в 1. Если значение числа, находящегося в аккумуляторе, меньше значения второго числа, находящегося в регистре r, то устанавливается в единицу признак переноса С. В противном случае признаки Z и C устанавливаются в ноль.

9. Команда CPI data аналогична предыдущей команде. Отличие состоит в том, что второе число располагается не в регистре r, а непосредственно указано в команде в виде операнда.

К командам логических операций относят и команды сдвигов, которые по существу представляют собой специальные команды логических действий. Эти команды имеют свои особенности для разных типов МП. Поэтому, при использовании данных команд в каждом конкретном случае необходимо обратиться к материалам фирмы-изготовителя используемого МП и тщательно разобраться в действиях, осуществляемых при выполнении указанных команд. Команды сдвигов в большинстве случаев предназначены для выполнения операций только над содержимым аккумулятора. На рис. 11.4.3 схематически показано, как производится сдвиг содержимого аккумулятора командами RLC, RRC, RAL и RAR. В операциях сдвига участвует разряд признака переноса С регистра признаков. Каждая из команд сдвигает содержимое аккумулятора на один разряд влево или вправо. При необходимости сдвинуть содержимое аккумулятора на большее число разрядов команду необходимо повторить требуемое число раз.

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

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

1. Команда JMP addr является командой безусловного перехода. Эта команда адрес, содержащийся в ней записывает в счетчик команд PC. После выполнения этой команды программа начнет выполняться с нового адреса, помещенного в счетчик команд.

2. Команда J-CON addr является командой условного перехода. В качестве условий рассматриваются нулевые или единичные значения признаков Z, С, Р и S регистра признаков. В место сокращения -CON подставляется мнемоника конкретного условия, при котором происходит выполнение команды: NZ - ненулевой результат, Z - нулевой результат, NC - отсутствие переноса в результате, C - наличие переноса в результате, P0 - нечетное число единиц в коде результата, PE - четное число единиц в коде результата, P - неотрицательный результат, M - отрицательный результат.

Например, команда условного перехода J-CON addr записывается JNZ addr, если условие перехода заключается в том, что Z=0 (предыдущий результат не был равен нулю). При выполнении этого условия адрес перехода, содержащийся команде запишется в счетчик команд PC и МП перейдет к выполнению программы с этого адреса. Если условие не удовлетворяется, т.е. Z=1 (предыдущий результат был равен нулю), то выполняется команда, непосредственно следующая в программе за командой JNZ addr.

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

3. Команда CALL addr является безусловной командой вызова подпрограмм. Команда записывает в счетчик команд PC адрес первой команды подпрограммы, указанный в команде, а в стек отправляет адрес возврата в основную подпрограмму (адрес команды, следующей за командой CALL addr).

4. Команда C-CON addr является условной командой вызова подпрограмм. Действия команды такие же как и в предыдущем случае, но команда выполняется при истинном значении условия, записанного вместо сокращения -CON. Мнемоника используемых условия такая же, как и в команде J-CON.

5. Команда RET служит для возврата из подпрограммы. Она является последней командой подпрограммы. По этой команде адрес возврата из стека пересылается обратно в счетчик команд PC. После этого продолжается выполнение основной программы с того места, где оно было прервано обращением к подпрограмме.

6. Команда R-CON - это команда условного возврата из подпрограмм. Ее выполнение зависит от значения используемого в команде условия (см. выше).

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

1. По команде IN port данные из порта ввода, адрес которого содержится в команде, передаются в аккумулятор.

2. По команде OUT port данные из аккумулятора передаются в порт вывода, адрес которого содержится в команде.

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

3. Команда EI необходима для разрешения режима ввода-вывода данных по прерываниям. Команда устанавливает выходной управляющий сигнал “Разрешение прерывания” равным 1, что позволяет внешнему устройству инициировать процесс обмена данными с МП и обработку по мере их поступления.

4. Команда DI запрещает вышеописанную операцию путем устанавки выходного управляющего сигнала “Разрешение прерывания” равным 0.

5. Команда NOP означает пустую операцию, во время которой происходит только увеличение на единицу содержимого счетчика команд PC. Использование команды NОР позволяет организовать временную задержку.

  1. Команда HLT переводит МП в состояние ОСТАНОВ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]