ВВЕДЕНИЕ. Рецензент: доктор технических наук, профессор, заслуженный деятель науки и техники РФ Ю.Г

С.Г. АДИКОВ, О.В. КРЕТИНИН

ОСНОВЫ ПРОГРАММИРОВАНИЯ МИКРОПРОЦЕССОРНЫХ СИСТЕМ УПРАВЛЕНИЯ ТЕХНОЛОГИЧЕСКИМИ ПРОЦЕССАМИ

НА ЯЗЫКЕ АССЕМБЛЕРА

Нижний Новгород 2012

УДК 681.3.06

ББК 32.973.26-018.1

А30

Рецензент: доктор технических наук, профессор, заслуженный деятель науки и техники РФ Ю.Г. Кабалдин.

Учебное пособие рассмотрено и рекомендовано к изданию кафедрой «Автоматизация машиностроения» Нижегородского государственного технического университета им. Р.Е. Алексеева (протокол №1 от 07 сентября 2011 года).

Адиков С.Г., Кретинин О.В.

А30 Основы программирования микропроцессорных систем управления технологическими процессами на языке ассемблера/ С.Г.Адиков, О.В.Кретинин. – Нижний Новгород: Дятловы горы, 2012. – 120 с.: ил.

ISBN 978-5-905226-29-8

В учебном пособии рассматриваются основы программирования на языке ассемблера микропроцессорных систем управления технологическими процессами на базе процессоров компании Intel или подобной архитектурой.

Рассмотрены особенности архитектуры таких систем. Представлены основные команды и конструкции языка. Изложение сопровождается многочисленными примерами. Каждая глава снабжена вопросами для самопроверки.

Пособие предназначено для студентов специальностей 220301, 220402 и 220306 всех форм обучения. Может быть рекомендовано при изучении дисциплин «Вычислительные машины, системы и сети», «Прикладное программирование и основы алгоритмизации», «Микропроцессорные устройства управления технологическим оборудованием и их программное обеспечение».

Рис. 58. Табл. 19. Библиогр.: 6 назв.

УДК 681.3.06

ББК 32.973.26-018.1

ISBN 978-5-905226-29-8© Адиков С.Г., Кретинин О.В., 2012

СОДЕРЖАНИЕ

ВВЕДЕНИЕ... 6

1. СИСТЕМЫ СЧИСЛЕНИЯ... 8

1.1. Двоичная система счисления. 8

1.2. Десятичная система счисления. 9

1.3. Шестнадцатеричная система счисления. 9

1.4. Сложение и вычитание чисел в позиционных системах счисления. 10

1.5. Перевод чисел из одной системы счисления в другую.. 11

1.6. Представление чисел со знаком. 13

1.7. Вопросы для самопроверки. 14

2. АРХИТЕКТУРА МИКРОПРОЦЕССОРНЫХ СИСТЕМ НА БАЗЕ ПРОЦЕССОРОВ INTEL... 16

2.1. Вопросы для самопроверки. 27

3. ПРОЦЕСС РАЗРАБОТКИ ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА 29

3.1. Ввод исходного текста программы.. 31

3.2. Трансляция программы.. 31

3.3. Компоновка программы.. 34

3.4. Отладка программы.. 35

3.5. Вопросы для самопроверки. 35

4. СИНТАКСИС АССЕМБЛЕРА... 36

4.1. Вопросы для самопроверки. 44

5. ДИРЕКТИВЫ АССЕМБЛЕРА... 45

5.1. Директивы сегментации. 45

5.2. Директивы описания процедур. 48

5.3. Директива завершения программы.. 49

5.4. Директивы определения данных. 50

5.5. Директивы задания констант. 53

5.6. Вопросы для самопроверки. 54

6. СТРУКТУРА ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕРА... 56

6.1. Структура EXE-программ. 56

6.2. Структура COM-программ. 59

6.3. Вопросы для самопроверки. 63

7. КОМАНДЫ ОБМЕНА ДАННЫМИ... 64

7.1. Команды пересылки данных. 64

7.2. Команды работы с адресами. 66

7.3. Команды работы со стеком. 66

7.4. Вопросы для самопроверки. 70

8. ЛОГИЧЕСКИЕ КОМАНДЫ И КОМАНДЫ СДВИГА... 71

8.1. Логические команды.. 71

8.2. Команды сдвига. 73

8.3. Вопросы для самопроверки. 79

9. КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ... 80

9.1. Команды безусловной передачи управления. 81

9.2. Команды условной передачи управления. 84

9.3. Команды организации циклов. 87

9.4. Вопросы для самопроверки. 89

10. АРИФМЕТИЧЕСКИЕ КОМАНДЫ.... 91

10.1. Команды сложения и вычитания. 91

10.2. Команды увеличения и уменьшения. 94

10.3. Команды умножения. 95

10.4. Команды деления. 96

10.5. Команда изменения знака операнда. 97

10.6. Команды преобразования типов данных. 98

10.7. Вопросы для самопроверки. 99

11. ЦЕПОЧЕЧНЫЕ КОМАНДЫ.... 100

11.1. Команды пересылки цепочек. 101

11.2. Команды сравнения цепочек. 102

11.3. Команды сканирования цепочек. 104

11.4. Команды загрузки цепочек. 104

11.5. Команды сохранения цепочек. 104

11.6. Вопросы для самопроверки. 104

12. ПРЕРЫВАНИЯ... 106

12.1. Вывод на экран средствами BIOS. 108

12.2. Работа с клавиатурой средствами BIOS. 111

12.3. Функции прерывания MS-DOS (прерывание INT 21H) 112

12.4. Вопросы для самопроверки. 116

СПИСОК ЛИТЕРАТУРЫ.... 118

ВВЕДЕНИЕ

Микропроцессорная система – информационная (вычислительная) или управляющая функционально и конструктивно законченная система, построенная на основе микропроцессорных средств и включающая в себя как минимум один микропроцессор, оперативную память и устройства ввода-вывода, связанные между собой шинами.

Данная книга представляет собой учебное пособие по языку ассемблера для микропроцессорных систем на базе процессоров фирмы Intel (или процессоров с подобной архитектурой), предназначенных для целей управления технологическими процессами.

Для того чтобы микропроцессорная система выполняла какие-то необходимые нам действия ее (а если говорить правильнее, то ее микропроцессор) необходимо запрограммировать на эти действия. Микропроцессор понимает только один язык – машинный код, представляющий собой совокупность машинных команд (машинных инструкций). А каждая машинная команда представляет собой набор двоичных чисел, которые заставляют микропроцессор выполнять определенные операции.

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

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

Достоинства языка ассемблера:

– код, написанный на языке ассемблера, является наиболее быстрым и компактным (эффективно для критичных по размеру и времени выполнения программ);

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

Недостатки языка ассемблера:

– отсутствует переносимость программ на микропроцессорные системы с другой архитектурой и системой команд;

– программа состоит из слишком «мелких» элементов – машинных команд, соответственно, усложняются программирование и отладка, растет трудоемкость, велика вероятность внесения ошибок.

Для всех микропроцессоров системы Intel базовым является микропроцессор Intel 8086, система команд которого и рассматривается в пособии.

Для трансляции и компоновки программ, представленных в пособии, может использоваться пакет TASM (Turbo Assembler) компании Borland версии 4.0 или выше.

Наши рекомендации