Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
flor_apparato-orientirovnnoe_prog.doc
Скачиваний:
103
Добавлен:
15.06.2014
Размер:
926.72 Кб
Скачать

1. Основы программирования на ассемблере

1.1. Принципы построения ассемблерных программ

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

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

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

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

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

2. Каждое действие процессора, задаваемое ассемблером на от­дельной строке, называется командой (в некоторых ас­семблерах - ин­струкцией).

3. Собственно действие команды задается мнемокодом (сокращенным удобным для запоминания наименованием) на англий­ском языке (последнее сложилось исторически из-за лидерства англоя­зычных стран с конца 60-х в области ком­пьютерной техники).

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

5. В одной команде ассемблера задается лишь одна опер­ация преоб­разования (одно сложение, умножение, сдвиг дво­ичного кода и т.п.).

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

7. Для удобства введения комментариев, в том числе и в начале строки, используется символ «точка с запятой». (Напомним, что в со­временных языках высокого уровня он применяется как разделитель операндов или признак конца операнда. Так как в ассемблере каждая команда занимает точно одну строку, то с этой целью в ассемблере по­добный разделитель совершенно не нужен.)

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

9. В общем случае команда ассемблера имеет вид

метка мнемокод операнды комментарии

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

Соседние файлы в предмете Системное программное обеспечение