Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обзор процесса создания программ на языке ассемблера




Основы программирования микропроцессоров

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

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

Рассмотрим небольшой фрагмент программы, который организует в цикле чтение двух байт (слова данных) из порта с номером 5, затем увеличивает на единицу полученное значение и записывает результат в порт вывода 2 (табл. 1). В первом столбце в шестнадцатеричном виде указаны адреса ячеек памяти. Содержимое этих ячеек приведено во втором столбце. Они соответствуют кодам команд микропроцессора 8086 компании Intel. В последнем столбце даны комментарии к каждой команде.

 

 

Табл. 1. Фрагмент программы в машинных кодах.

Адрес памяти Содержимое памяти Комментарий
00100h 1110 0101 Читать слово в регистр AX из порта ввода 5.
00101h 0000 0101
00102h 0100 0000 Увеличить на единицу содержимое AX.
00103h 1110 0111 Передать слово из регистра AX в порт вывода 2.
00104h 0000 0010
00105h 1110 1011 Повторить действия путем перехода по адресу на семь байт назад.
00106h 1111 1001

 

 

По комментариям становится понятно, что первые две комбинации нулей и единиц, хранящихся в ячейках памяти по адресам 100h и 101h (h – символ шестнадцатеричного числа) определяет команду чтения слова данных из порта ввода под номером 5 в регистр микропроцессора AX. Команда по адресу 102h увеличивает значение регистра AX на единицу. Затем выполняется передача содержимого регистра AX в порт вывода 2. Команда, записанная по адресам 105h и 106h, выполняет переход по адресу 100h, и затем весь процесс повторяется заново.

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

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

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

 

 


Рис. 1. Процесс трансляции исходной программы в объектный код.

 

 

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

 

L: IN AX, 5; читать слово данных из порта 5 в регистр AX

INC AX; увеличить на единицу регистр AX

OUT 2, AX; вывести в порт 2 содержимое регистра AX

JMP L; перейти по метке L

 

Воспринимать эти строчки теперь стало значительно проще. На языке ассемблера машинные команды имеют вид мнемонических обозначений или мнемоник (в нашем примере мнемониками являются IN, INC, OUT и JMP), а адреса памяти и константы могут быть представлены не последовательностью битов, а символами. Поэтому для изучения, понимания и использования языка ассемблера требуется намного меньше усилий, чем при создании программ на машинном языке.

Для преобразования аббревиатур английских слов в числовые коды команд должна быть вызвана программа ассемблера. Функцией ассемблера является преобразование исходной программы в объектную, понятную микропроцессору (рис. 2). Отношения между программой на языке ассемблера и результатом трансляции – объектным кодом, всегда однозначные. Язык ассемблера позволяет полностью контролировать процесс получения объектного кода.

 

 
 

 


Рис. 2. Трансляция программы на языке ассемблера в объектный код.

 

 

Существует много разновидностей ассемблеров, разработанных различными фирмами. Для микропроцессоров фирмы Intel традиционно на рынке ассемблеров имеется два основных пакета: макроассемблер MASM компании Microsoft и турбо ассемблер TASM компании Borland. Оба пакета содержат трансляторы, компоновщики, отладчики и другие средства для полноценной разработки программ на ассемблере.

Приведем еще один пример того же самого алгоритма, но уже на языке высокого уровня, например, на Паскале (пакет Borland® Pascal 7.0):

 

1: portw[2]:=portw[5]+1; { получить из порта 5 слово данных, увеличить

его значение на единицу и вывести в порт 2 }

goto 1; { перейти на метку 1 }

 

Здесь для доступа к портам ввода-вывода используются предопределенный массив portw. Индексом массива является адрес порта, к которому необходимо обратиться. Как видно, теперь полностью потерян контроль над процессом получения объектного кода. Каким образом эти две строчки будут преобразованы в объектный код, зависит от выбранной версии компилятора языка Паскаль (рис. 3).

 

 

 


Рис. 3. Трансляция программы на языке высокого уровня в объектный код.

 

 

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

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

Из рассмотренных примеров можно видеть, что в общем случае язык программирования является механизмом абстрагирования. Он дает воз­можность описать вычисления абстрактно и в то же вре­мя позволяет программе (транслятору) перевести это описание в детализированную форму, необходимую для выполнения на вычислительном устройстве. Существует естественное противоречие между стремлением к краткому, ясному и надежному выражению вычисления на высокоабстрактном уровне и стремлением к гибкости подробно­го описания на самом низком уровне.

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

Контрольные вопросы

1. Что такое машинный язык?

2. Какие существуют разновидности трансляторов?

3. Какая область применения языков низкого и высокого уровня?




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 2138; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.