Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Языки ассемблера

Язык ассе́мблера (англ. assembly language) — машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд[1]; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ[2]. Автокод — язык программирования, предложения которого по своей структуре в основном подобны командам и обрабатываемым данным конкретного машинного языка.[2]

 

Язык ассемблера — система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации (например, индексную или косвенную). Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться (по именам, а не по адресам) из других частей программы (например, для передачи управления).[3]

 

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

Основные общие особенности языка ассемблера (чаще не совсем точно называемого просто ассемблером; строго ассемблером называется программа, которая является транслятором. Эта программа переводит последовательность команд с языка ассемблера на язык машинных кодов процессора) микропроцессоров совпадают с особенностями всех языков подобного типа. Отметим их основные особенности [1].

 

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

 

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

 

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

 

Ниже рассмотрены основные сведения о языке ассемблера пакета AVSIM85 v2.02 [2] для МП Intel 8080/8085 (КР580/КР1821).

 

Структура программы на языке ассемблера

 

Предложения (строки) ассемблера

 

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

 

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

 

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

 

end -

определяет логический конец программы, все записанное

после нее не будет восприниматься транслятором,

 

seg -

определяет начало новой секции,

 

db -

размещает в памяти константы.

 

 

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

 

MOVE A,B

 

ADD B

 

Команды препроцессора являются фактически разновидностью директив, которые выполнятся на первом шаге трансляции. Пример команды препроцессора:

 

%include f1.asm - помощью данной команды в исходный текст будет вставлен текст из файла f1.asm.

 

Макрокоманды, а также некоторые конкретные директивы будут рассмотрены ниже.

 

Комментарии не влияют на результат трансляции и служат для пояснения и описания программы. Комментарии без изменений переносятся в файл, получаемый после трансляции - листинг трансляции. Вся строка ассемблера может являться комментарием. В этом случае она начинается специальным символом: [*] или [;].

 

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

 

поле метки,

 

поле мнемоники,

 

поле операнда,

 

поле комментария.

 

Таким образом, строка имеет следующий формат:

 

[метка[:]] <мнемоника> [операнд] [; комментарий]

 

Здесь, как и обычно, при описании системы команд и синтаксиса языка, для обозначения необязательного элемента конструкции использованы квадратные скобки [ ]. Таким образом, метка, операнд, комментарий являются необязательными элементами и могут отсутствовать.

 

Поле метки

 

Метка в общем случае является необязательным элементом ассемблерной строки. Для некоторых директив наличие метки обязательно. Метка начинается в первой позиции строки и может содержать (как и любой идентификатор) алфавитно-цифровые знаки (A-Z, a-z, 0-9, _ и S), первым из которых должна являться буква.

 

Если в первой позиции строки стоит пробел или символ (;), то считается, что метка отсутствует. Метка может заканчиваться двоеточием, которое не входит в состав метки.

 

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

 

Поле мнемоники

Поле мнемоники начинается после первого пробела в строке и заканчивается одним или более пробелами. Поле мнемоники содержит одно из следующих утверждений:

мнемоническое обозначение команды процессора, например,

ADD, MOVE,

мнемоническое обозначение макрокоманды (см. ниже),

мнемонику директивы ассемблера,

мнемонику команды препроцессора.

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

 

Поле операнда

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

 

Основные конструкции ассемблера

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

 

Константы

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

Числовые константы могут быть записаны в одной из трех систем счисления - двоичной, десятичной или 16-ричной. Отрицательные константы ассемблером записываются в дополнительном коде (для положительных чисел представление в дополнительном и прямом кодах совпадают). Длина внутреннего представления константы равна 1 байт (8 двоичных разрядов) или 2 байта в зависимости от команды, с которой она используется.

 

Система счисления обозначается спецификатором, который может либо предшествовать константе, либо стоять в ее конце. В качестве спецификаторов используются:

 

H, h, $ - 16-ричная система,

 

@ (отсутствие спецификатора) - десятичная система,

B, b, % - двоичная система.

Если число в 16-ричной системе начинается с буквы, слева от нее должен быть дописан 0 (при спецификаторе H).

 

 

<== предыдущая лекция | следующая лекция ==>
Представление чисел с плавающей точкой | Лекция №7. Сколько бы ни было в компьютере программ, всем им необходима единая ПЛАТФОРМА
Поделиться с друзьями:


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


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



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




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