Программное управление МП
Рассмотрим уровни программного управления МП. Каждая операция, задаваемая командой, обычно требует для своей реализации выполнения определенной последовательности элементарных, неразложимых на более простые, преобразований, которые называются микрооперациями. К ним относятся пересылки информации между частями системы, логические поразрядные операции, сдвиги информации и другие. Каждая микрооперация выполняется в течение одного периода (такта) сигналов синхронизации. Эти сигналы имеют вид импульсов, последовательность которых вырабатывается специальным генератором синхроимпульсов.
Команды, определяющие выполнение микроопераций, называются микрокомандами. Таким образом, для каждой команды можно составить последовательность микрокоманд, определяющих ее реализацию. Для реализации команды требуется в среднем 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 | Второе слово (байт) | положение указателя стека после записи |
. . . | ||
Рис. 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 и т.д. При написании программы на языке ассемблера программист не следит за адресами команд, поэтому для того, чтобы выделить команду, к которой необходимо осуществить переход из другого места программы, ей присваивается символический адрес, называемый меткой. В процессе трансляции исходной программы в объектную программа-транслятор определит адреса всех команд и заменит символические адреса (метки) конкретными адресами. Метка проставляется в поле "метка" перед мне