
- •Приемы программирования микропроцессора на языке ассемблер
- •Введение
- •1. Краткие сведения из теории
- •2. Программирование последовательных
- •2.1. Программирование участков алгоритма, не содержащих
- •2.2. Задание для самостоятельной работы
- •3.Программирование разветвлений
- •3.1. Краткие сведения из теории
- •3.2. Разветвляющиеся программы
- •3.3. Задание для самостоятельной работы
- •4. Программирование циклических вычислительных процессов
- •4.1. Программирование участков алгоритма, содержащих циклы
- •4.2. Задание для самостоятельной работы
- •5. Реализация заданных временных интервалов программным способом
- •5.1. Краткие сведения из теории
- •5.2. Программы временных задержек
- •5.3. Задания для самостоятельной работы
- •Рекомендуемая литература
- •Оглавление
МУРМАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра автоматики
и вычислительной техники
Приемы программирования микропроцессора на языке ассемблер
Описание и методические указания к практическим занятиям по курсу
"Микропроцессорные управляющие системы"
Мурманск
2002
Составитель – Алексей Алексеевич Маслов, канд. техн. наук, профессор кафедры автоматики и вычислительной техники Мурманского государственного технического университета.
Методические указания изданы в 1992 г.
Методические указания рассмотрены кафедрой и рекомендованы к переизданию "23" марта 2002, протокол №4.
Введение
Развитие и распространение микропроцессоров и микроЭВМ на их основе стимулируют постоянно возрастающий интерес специалистов технического профиля к их изучению и применению. Общие тенденции автоматизации технических средств судов связаны с построением автоматических систем управления, которые объединяют объекты в единое целое, оптимизируют режим их совместной работы. Указанные задачи в современных условиях решаются на базе микропроцессоров. Исходя из специфики новых судовых технических средств автоматизации возникает необходимость разработки программного обеспечения.
Данные методические указания имеют своей целью изложение приемов программирования микропроцессора (МП) серии К580, имеющего широкое распространение благодаря высоким эксплуатационным характеристикам, низкой стоимости, широкой номенклатуре периферийных БИС.
Усвоение предлагаемого материала позволит самостоятельно разрабатывать программы тестирования микропроцессорных средств и небольшие управляющие программы.
Указания содержат задания для самостоятельной работы, выполнение которых начинающими программистами позволит идти наиболее быстро и эффективно к овладению практическими приемами программирования.
1. Краткие сведения из теории
На своем рабочем уровне МП реагирует на список операций, называемых машинной программой. На рис. 1.1,а приведено содержимое памяти, являющееся программой на машинном языке. Эта программа начинается с адреса 2000Н с содержимым 00111110В и заканчивается адресом 2006H с содержимым 01110110В Человеку практически невозможно понять программу, представленную в такой форме.
Программа на машинном языке на рис. 1.1,а становится несколько проще для восприятия, когда она представлена в шестнадцатеричном коде (Н-коде), как показано на рис. 1.1,б. Однако, хотя двоичные данные приведены в шестнадцатеричном коде, эта часть программы всегда рассматривается как заданная на машинном языке и оказывается трудной для понимания.
В более приемлемой форме рассматриваемая программа могла бы выглядеть так:
1.загрузить двоичное число (10110100) в аккумулятор;
2.инвертировать каждый двоичный бит содержимого аккумулятора;
3.поместить результаты инверсии в ячейку памяти данных 2100Н.
Возникает вопрос: как перейти от этой формы человеческого языка, иногда длинной и сложной, к машинному языку? Ответ состоит в использовании простого языка программирования – Ассемблер, который использует слова и фразы, преобразуя их в машинный код МП.
Обычно фраза или заданная величина на ассемблере будет соответствовать выражению длиной от одного до трех байтов машинного языка. Суть и процедура ассемблирования показаны на рис. 1.2, где вторая команда программы представлена единственной мнемоникой из трех букв СМА (инвертировать содержимое аккумулятора). Сначала три буквы переведены в их эквиваленты в коде АSCII, затем три кода ASCII преобразованы в определенный порядок специальной программой Ассемблера, которая выдает уже код команды инверсии содержимого аккумулятора на машинном языке, т.е. 00101111В в данном случае или 2FH (в Н-коде). Таким образом, мнемоника преобразована в один единственный байт машинного языка.
Программа на языке Ассемблер, записанная человеком, может быть представлена в виде следующей таблицы (в двоичном или в шестнадцатеричном машинном коде):
Адрес Н-код |
Двоичное содержимое |
|
Адрес Н-код |
Шестнадцат. содержимое Н-код |
|
2000 |
00111110 |
- начало программы |
2000 |
3Е |
- начало программы |
2001 |
10110100 |
|
2001 |
ВЧ |
|
2002 |
00101111 |
|
2002 |
2F |
|
2003 |
00110010 |
|
2003 |
32 |
|
2004 |
00000000 |
|
2004 |
00 |
|
2005 |
00100001 |
|
2005 |
21 |
|
2006 |
01110110 |
- конец программы |
2006 |
76 |
- конец программы |
2007 |
|
|
2007 |
|
|
Обычным является деление строк на четыре поля: метка, мнемоника, операнд и комментарий.
Мнемоника Код Транслятор Ассемблера Машинный
команды ASCII в машинный код код
С
М
А
Рис. 1.2. Трансляция мнемоники Ассемблера в машинный код команды
Поле метки используется не всегда и в этой программе остается пустым. Поле мнемоники содержит точную мнемонику согласно системе команд данного МП, которая указывает операцию для выполнения. Поле операнда содержит информацию о регистрах, данных и адресах, объединенных соответствующей операцией. Поле комментария позволяет сделать программу более понятной при ее рассмотрении.
После того как программа на языке Ассемблер составлена (табл. 1.1), производится перевод мнемоник и операндов в машинные коды, и списку команд назначаются соответствующие ячейки памяти.
Таблица 1.1
Метка |
Мнемоника |
Операнд |
Комментарий |
|
MVI |
A, ВЧН |
Загрузить в аккумулятор данные ВЧН |
|
СМА |
|
Инвертировать содержимое аккумулятора |
|
STA |
2100Н |
Переслать содержимое аккумулятора в память по адресу 2100Н |
|
HLT |
|
Остановить МП |
Переход от версии табл.1.1 к ассемблированной версии табл.1.2 может быть выполнен либо вручную, либо на машине при помощи операционной программы Ассемблера.
Таблица 1.2
Адрес Н – код |
Метка |
Мнемоника |
Операнд |
Машинный код |
Комментарий |
2000 2001 |
|
MVI |
А, ВЧН |
3Е ВЧ |
Загрузить в аккумулятор данные ВЧН |
2002 |
|
СМА |
|
2F |
Инвертировать содержимое аккумулятора |
2003 2004 2005 |
|
STA |
2100Н |
32 00 21 |
Переслать содержимое аккумулятора в память по адресу 2100Н |
2006 |
|
HLT |
|
76 |
Остановить МП |
Запись программы удобно проводить в более компактной форме. Для этого в таблице указывается только начальный адрес каждой команды, при этом имеется в виду, что в зависимости от данной команды она будет занимать одну, две или три последовательные ячейки памяти. Записанная таким образом программа представлена в виде табл.1.3.
Таблица 1.3
Адрес Н-код |
Метка |
Мнемоника |
Операнд |
Машинный код |
Комментарий |
2000 |
|
MVI |
А, ВЧН |
3Е ВЧ |
|
2002 |
|
СМА |
|
2F |
|
2003 |
|
STA |
2100H |
32 00 21 |
|
2006 |
|
HLT |
|
76 |
|
Программирование на языке Ассемблер является способом "очеловечивания" действий МП. Языки высокого уровня (Бейсик, Паскаль, Фортран и т.д.) при их использовании делают программирование более удобным.
Например, одна команда (оператор) на Бейсике или Паскале может соответствовать 20 или 30 машинным командам. Цель данных методических указаний состоит в получении навыков программирования МП (в противоположность программированию микро-ЭВМ), потому что мы будем использовать его состав команд. Будем выполнять программирование на языке Ассемблер, помогающее пониманию состава команд МП и его действий.
Для программиста МП-система, построенная на базе МП КР580ВМ80А, представлена составом команд, памятью, регистрами общего назначения, счетчиком команд, портами ввода-вывода, флажками (триггерами регистра признаков), указателем стека и стеком. Все эти элементы, за исключением памяти и портов ввода-вывода, составляют часть МП.
В дальнейшем мы будем использовать состав команд МП КР580ВН80А, приведенный в табл.5.1 и 5.2[1].