Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
64
Добавлен:
09.06.2015
Размер:
829.32 Кб
Скачать

Министерство образования и науки Российской Федерации Сибирский федеральный университет

СХЕМОТЕХНИКА

МИКРОПРОЦЕССОРНЫЕ УСТРОЙСТВА В РАДИОЭЛЕКТРОННОМ ОБОРУДОВАНИИ

Учебно-методическое пособие для лабораторных работ

Электронное издание

Красноярск

СФУ

2012

1

УДК 621.396(07) ББК 32.844.15я73

С921

Составитель: Мичурина Маргарита Михайловна

С921 Схемотехника. Микропроцессорные устройства в радиоэлектронном оборудовании: учебно-методическое пособие для лабораторных работ [Электронный ресурс] / сост. М.М. Мичурина. – Электрон. дан. – Красноярск: Сиб. федер. ун-т, 2012. – Систем. требования: PC не ниже класса Pentium I; 128 Mb RAM; Windows 98/XP/7; Adobe Reader V8.0 и

выше. – Загл. с экрана.

Рассматривается система команд и основы разработки программного обеспечения на языке АССЕМБЛЕР.

Предназначено для студентов укрупнённой группы 160000 «Авиационная и ракетно-космическая техника» специальности 160905.65 «Техническая эксплуа- тация транспортного радиооборудования».

УДК 621.396(07) ББК 32.844.15я73

© Сибирский федеральный университет, 2012

Учебное издание

Подготовлено к публикации редакционно-издательским отделом БИК СФУ

Подписано в свет 18.10.2012 г. Заказ 9951. Тиражируется на машиночитаемых носителях.

Редакционно-издательский отдел Библиотечно-издательского комплекса Сибирского федерального университета 660041, г. Красноярск, пр. Свободный, 79

Тел/факс (391)206-21-49. E-mail rio@sfu-kras.ru http://rio.sfu-kras.ru

2

СОДЕРЖАНИЕ

 

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

4

1. ЛАБОРАТОРНАЯ РАБОТА 1Знакомство с работой отладчика программ

на ассемблере TURBO DEBUGGER.....................................................................

4

1.1. Что такое ассемблер? .............................................................................

4

1.2. Алгоритм разработки программы на языке ассемблера ....................

5

1.3. Основные составляющие программ .....................................................

9

1.4. Ассемблирование (трансляция) и компоновка программы .............

15

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

17

1.6. Пример выполнения программы .......................................................

18

2. ЛАБОРАТОРНАЯ РАБОТА 2. Команды пересылок, логические команды,

команды передачи управления.............................................................................

20

3. ЛАБОРАТОРНАЯ РАБОТА 3. Изучение арифметических команд для

 

выполнения операций двоичной арифметики ....................................................

27

4. ЛАБОРАТОРНАЯ РАБОТА 4. Разработка и отладка программ,

 

использующих арифметические операции над двоично-десятичными

 

цифрами ..................................................................................................................

31

5. ЛАБОРАТОРНАЯ РАБОТА 5. Разработка программ с использованием

 

подпрограмм...........................................................................................................

34

6. ЛАБОРАТОРНАЯ РАБОТА 6. Изучение цепочечных команды (команд

 

обработки строк данных), команд организации циклов, команд сдвигов......

36

ЛИТЕРАТУРА И ИНФОРМАЦИОННЫЕ ИСТОЧНИКИ ...............................

43

Основная литература...................................................................................

43

Дополнительная литература.......................................................................

43

Методическая литература...........................................................................

43

ПРИЛОЖЕНИЯ .....................................................................................................

44

Приложение 1 ..............................................................................................

44

Приложение 2 ..............................................................................................

46

Приложение 3 ..............................................................................................

46

Приложение 4.............................................................................................

478

3

ВВЕДЕНИЕ

Для решения поставленной задачи программист может использовать любые высокоуровневые средства; кажется, что компьютер «понимает» языки высокого уровня, на самом деле программы исполняются на машинном языке, который и управляет процессором. Следовательно, программы должны предварительно переводиться в машинный код (компилироваться), при этом каждый оператор языков высокого уровня обычно преобразуется в целый набор машинных кодов. Только ассемблер может общаться с компьютером на его собственном языке и непосредственно управлять аппаратными средствами. По-настоящему решить проблемы, связанные с аппаратурой, невозможно без знания ассемблера. У каждого языка есть свои достоинства, но только на языке ассемблера обеспечивается максимальный доступ к процессору, что позволяет достичь высоких скоростей при выполнении программ, на нём можно писать более гибкие программы. И не случайно практически все компиляторы языков высокого уровня содержат средства связи своих модулей с модулями на ассемблере либо поддерживают выход на ассемблерный уровень программирования.

Фундаментом успешного освоения языка является знание принципов работы микропроцессора, организации микропроцессорных систем и принципов работы соответствующих контроллеров.

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

1. ЛАБОРАТОРНАЯ РАБОТА 1

Знакомство с работой отладчика программ на ассемблере

TURBO DEBUGGER

При выполнении лабораторной работы 1 необходимо изучить ниже приведённый материал, а также рекомендуется использовать следующую литературу из приведённого списка: [1], [4], [Л] и методические указания [1 4].

1.1. Что такое ассемблер?

Термин «ассемблер» имеет двоякий смысл. С одной стороны, его надо понимать как «Язык ассемблера», т. е. это специфический язык программиро- вания со взаимно однозначным соответствием между его операторами и ко- мандами процессора. Язык ассемблера существует для каждого типа процес-

4

соров или целого семейства процессоров. Это связано с тем, что команды на языке ассемблера должны иметь взаимно однозначное соответствие с систе- мой машинных команд и должны быть согласованы с архитектурой компью- тера. Язык ассемблера для процессоров Intel имеет систему команд, понимае- мую различными процессорами производства Intel, такими как 8086, 8088, 80186, 80286, 80386, 80486, Celeron и Pentium. С другой стороны , «Ассемб-

лер» – это программа, преобразовывающая исходные коды языка ассемблера в машинные команды. Ассемблер может создавать листинг программы с но- мерами строк, адресами памяти, исходными операторами и таблицей пере- крёстных ссылок символов и переменных, используемых в программе. Со- вместно используемая с ассемблером программа загрузчик собирает от- дельные файлы, созданные ассемблером, в единую выполняемую программу. В блок базовых программ входит также отладчик, позволяющий программи- сту проверить и трассировать исполняемую программу и контролировать со- держимое памяти. Программы на языке ассемблера можно запускать либо в операционной системе MS-DOS, либо непосредственно в Windows. Наиболее популярные для семейства процессоров Intel ассемблеры MASM (Microsoft Assembler) и TASM (Borland Turbo Assembler). Язык ассемблера называется языком низкого уровня потому, что он очень близок к машинному языку по своей структуре и выполняемым функциям. Каждая команда ассемблера име- ет взаимно однозначное соответствие с машинными командами, что отличает его от языков высокого уровня, для которых характерно то, что один опера- тор транслируется во множество машинных команд. Микропроцессор пони- мает только машинные команды, которые он преобразовывает непосредст- венно в управляющие сигналы. Машинный язык для семейства Intel в своей основе имеет систему команд процессора 8086/88, которые могут выполнять- ся процессорами всех последующих модификаций. Такая концепция называ-

ется совместимостью сверху вниз.

1.2. Алгоритм разработки программы на языке ассемблера

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

поставить задачу и составить проект программы, на этом этапе полезно составить блок-схему;

ввести команды программы в компьютер с помощью редактора;

5

оттранслировать программу с помощью ассемблера. Если ассемблер обнаружит ошибки, исправить их в редакторе и оттранслировать про- грамму заново;

преобразовать результат работы ассемблера в исполняемый модуль с помощью компоновщика;

выполнить программу;

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

Для формирования исходного модуля применяют стандартные редакто- ры, работающие в ASCII кодах. Затем с помощью программы ассемблерного транслятора исходный текст транслируется в машинный код, т. е. в объект- ную программу. Таким образом, функцией программы-ассемблера является преобразование исходной программы, доступной восприятию человеком, в объектную программу, понятную человеку.

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

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

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

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

6

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

Всю информацию и данные Turbo Debugger отображает в меню (локальных и глобальных), блоках запроса (в которые информацию вводит пользователь) и в окнах. Используются различные виды окон в зависимости от того, какого типа информация в них отображается. Все окна открываются и закрываются с помощью команд меню (или активных клавиш, соответствующих этим командам). Большая часть окон отладчика Turbo Debugger вызывается из спускающегося меню View (просмотр). Из этого меню вызывается 14 видов окон. Имеется и окно другого типа, которое называется окном проверки (Inspect) и открывается выбором пункта Data|Inspect или пункта Inspect из большинства локальных меню.

Окна, вызываемые из меню: View

Breakpoints Stack

Log Watches Variables Module . . .

File . . .

CPU

Dump Registers

Numeric processor Execution history Hierarchy Another

Работа с отладчиком Turbo Debugger предполагает использование ак- тивных клавиш. Активная клавиша это клавиша, нажатие которой заставля- ет отладчик выполнять определенное действие независимо от текущего со- стояния среды отладчика Turbo Debugger. На рис. 1 перечислены все актив- ные клавиши.

7

Клавиша

Назначение

F1

Получение контекстно-зависимой интерактивной подсказки

F2

Устанавливает точку останова в позиции курсора

F3

Список взятых модулей

F4

Выполнение до позиции курсора

F5

Наезд / отъезд для текущего окна

F6

Переход к следующему окну

F7

Выполнение одной исходной строки или команды

F8

Выполнение одной исходной строки или команды с про-

 

пуском вызовов

F9

Запуск программы

F10

Вызов линейки меню, выход из меню

Alt-F1

Возврат к прошлому экрану подсказки

Alt-F2

Устанавливает точку останова по адресу

Alt-F3

Закрывает текущее окно

Alt-F4

Реверсирует выполнение программы

Alt-F5

Показывает экран вывода программы

Alt-F6

Открывает последнее закрытое окно

Alt-F7

Выполняет одну команду программы Trace

Alt-F8

Выполняет программу до возврата из функции

Alt-F9

Выполняет программу до заданного адреса

Alt-F10

Вызывает локальное меню окна

Alt-1-9

Делает активным окно с заданным номером

Alt-пробел

Вызывает меню System

Alt-B

Вызывает меню Breakpoints

Alt-D

Вызывает меню Data

Alt-F

Вызывает меню File

Alt-H

Вызывает меню Help

Alt-O

Вызывает меню Options

Alt-R

Вызывает меню Run

Alt-V

Вызывает меню View

Alt-W

Вызывает меню Window

Alt-X

Осуществляет выход из отладчика и возврат в DOS

Ctrl-F2

Завершает сеанс отладки и устанавливает программу в ис-

 

ходное состояние

Ctrl-F4

Вычисляет значение выражения

Ctrl-F5

Инициирует перемещение или изменение размера окна

Ctrl-F7

Заносит переменную в окно слежения

Ctrl-F8

Переключает точку останова в текущей позиции курсора

Ctrl-F9

Запускает программу

Ctrl-F10

Вызывает локальное меню окна

 

8

Ctrl-Стрелка вправо

Смещает начальный адрес в подокне кода,

данных

 

или стека окна процессора на 1 байт вверх

 

Ctrl-Стрелка влево

Смещает начальный адрес в подокне кода,

данных

 

или стека окна процессора на 1 байт вниз

 

Ctrl-A

Перемещение к предыдущему слову

 

Ctrl-G

Осуществляется ввод ячейки памяти, данные которой необ-

 

ходимо посмотреть, например Ctrl-G DS:SI

 

Ctrl-C

Скроллинг на один экран вниз

 

Ctrl-D

В окне данных позволяет преобразовать данные в любой из

форматов, например,

DOUBLE восьми байтовый вещественный формат

Рис.1. Активные клавиши Turbo Debugger

1.3. Основные составляющие программ

Любая программа должна обязательно состоять из сегментов. Обычно в программе задаются три сегмента: команд, данных и стека, а при необходимости организуют дополнительный сегмент. Сегменты могут быть самостоятельными блоками памяти или объединяться. В табл. 1 приведены наиболее используемые модели памяти.

Большинство программ на языке ассемблера можно разделить на пять основных частей со следующими условными названиями: заголовок,

макроопределения, данные, тело программы и заключение.

Заголовок. Любая программа начинается с заголовка. В нём содержатся команды и директивы, которые не приводят к созданию машинного кода при трансляции, но помогают при генерации исполняемого файла.

На рис. 2 представлен один из вариантов типичного заголовка ассемблерной программы.

TITLE «Программа инвертирования строки»

MODEL small STASK 256

Рис. 2. Типичный заголовок ассемблерной программы

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

9

 

 

 

Таблица 1

Название

Код

Данные

Описание

 

 

 

 

Tiny

Near

Near

Код, данные и стек содержатся в одном сегменте

 

 

 

64 Кбайт. Используется только для COM-

 

 

 

программ

 

 

 

 

Small

Near

Near

Код и данные содержатся в различных сегментах

 

 

 

размером до 64 Кбайт. Используется для не-

 

 

 

больших и средних EXE-программ. Подходит

 

 

 

для большинства чисто ассемблерных программ

 

 

 

 

Medium

Far

Near

Неограниченный размер кода. Под данные отво-

 

 

 

дится один сегмент 64 Кбайт. Используется для

 

 

 

написания больших программ с небольшим объ-

 

 

 

ёмом данных

Large

Far

 

Размер кода и данных неограничен. Использует-

 

 

 

ся в больших программах. Размер переменной не

 

 

 

может превышать 64 Кбайт

 

 

 

 

Huge

Far

Far

Размер кода и данных неограничен. Аналогична

 

 

 

большой модели памяти. (Введена для совмести-

 

 

 

мости с языками высокого уровня)

Tchuge

Far

Far

Совпадает с большой моделью памяти, но по-

 

 

 

другому определяет регистры. В основном ис-

 

 

 

пользуется при программировании на языках

 

 

 

TURBO C и BORLAND C ++

 

 

 

 

Tpascal

Near

Far

Обеспечивает поддержку ранних версий TURBO

 

 

 

PASCAL. B BORLAND PASCAL не применяется

 

 

 

 

Fiat

Near

Far

Используется в среде OS/2, в остальном анало-

 

 

 

гична малой модели памяти

 

 

 

 

Чаще всего при программировании на языке ассемблера пользуются мо- делью памяти типа small (малая). Несмотря на такое название, малая модель выделяет 64 Кбайт под исполняемый код и 64 Кбайт под данные, что практи- чески удовлетворяет потребности самых больших ассемблерных программ.

Директива STASK резервирует пространство для стека программы, в при- ведённом примере (рис.1) зарезервировано 256 байт. В основном программы используют небольшой стек, даже самые большие редко требуют более 8 Кбайт.

Макроопределения. После заголовка следуют различные описания пе- ременных и констант. Для описания пользуются некоторыми директивами (псевдооператорами). Директивы управляют работой программы-ассемблера, а не микропроцессора. (В приложении 1 приведены наиболее часто исполь- зуемые директивы). С помощью директив можно определять сегменты и под- программы (процедуры), давать имена командам и данным, резервировать области памяти и выполнять другие важные задачи. В отличие от команд языка ассемблера большинство директив не генерирует объектный код. В ас- семблере константы часто называют макроопределениями, использующими директиву EQU, которая связывает значение с определённым именем (иден- тификатором), вместо которого Turbo Assembler подставит указанное значе-

10

Соседние файлы в папке Радиоавтоматика и МП