Информатика
.pdfФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ
Кафедра компьютерных систем в управлении и проектировании (КСУП)
Одиноков В. В., Баталин И. А.
ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ
Учебное методическое пособие
для специальностей:
220201 Управление и информатика в технических системах
230104 Системы автоматизированного проектирования
Томск — 2007
УДК 681.3.06 О 421
Одиноков В.В., Баталин И.А.
О421 Программирование на ассемблере: Учебное методическое пособие. – Томск:
Изд-во НТЛ, 2007.– 312 с.
ISBN 978–5–89503–366–1
Данное пособие предназначено для обучения программированию на языке ассемблера студентов специальностей 220201 («Управление и информатика в технических системах») и 230104 («Системы автоматизированного проектирования») в рамках учебных курсов «Информатика», «Операционные системы», «Вычислительные машины, системы и сети», но может быть использовано и при обучении студентов других специальностей, предполагающих углубленную подготовку по программированию.
УДК 681.3.06
Р е ц е н з е н т: профессор Томск. гос. ун-та систем управления и радиоэлектроники Н.В. Замятин
Редактор Т. С. Портнова Верстка В. В. Одиноков
К-ОКП ОК-005-93, код продукции 954349
Изд. лиц. ИД № 04000 от 12.02.01 г. Подписано к печати 29.01.08 г. Формат 60 ×84 116 . Бумага офсетная. Печать офсетная. Гарнитура «Times».
Усл.-п. л. 18,3 . Уч.-изд. л. 20,3. Тираж 100 экз.
ООО «Издательство научно-технической литературы»
634050, г. Томск, пр. Ленина, 34а тел. (382-2) 53-33-35
Отпечатано в типографии Томского гос. ун-та систем управления и радиоэлектроники
ISBN 978–5–89503–366–1 |
© В.В.Одиноков, И.А.Баталин, макет 2007 |
|
© Том. гос. ун-т систем упр. и |
|
радиоэлектроники , 2007 |
|
3 |
СОДЕРЖАНИЕ |
|
СОДЕРЖАНИЕ....................................................................................................................................................... |
3 |
ВВЕДЕНИЕ.............................................................................................................................................................. |
8 |
ЧАСТЬ 1. ВЫПОЛНЕНИЕ МАШИННЫХ ПРОГРАММ........................................... |
11 |
1. ДВОИЧНЫЕ И ШЕСТНАДЦАТЕРИЧНЫЕ ЧИСЛА............................................................................... |
11 |
1.1. Двоичные числа.......................................................................................................................................... |
11 |
1.2. Шестнадцатеричные числа........................................................................................................................ |
15 |
1.3. Символьная информация........................................................................................................................... |
17 |
1.4. Лабораторная работа 1............................................................................................................................... |
18 |
2. ВЫПОЛНЕНИЕ ПРОГРАММ ПРОЦЕССОРОМ i8086............................................................................ |
19 |
2.1. Структура аппаратных средств................................................................................................................. |
19 |
2.2. Архитектура процессора i8086.................................................................................................................. |
23 |
2.3. Адресация памяти...................................................................................................................................... |
27 |
2.4. Алгоритм работы процессора ................................................................................................................... |
31 |
3. ПРОГРАММИРОВАНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ............................................................. |
33 |
3.1. Чтение и заполнение регистров................................................................................................................ |
34 |
3.2. Сложение двух чисел................................................................................................................................. |
37 |
3.3. Вычитание двух чисел............................................................................................................................... |
41 |
3.4. Умножение двух чисел.............................................................................................................................. |
42 |
3.5. Деление двух чисел.................................................................................................................................... |
42 |
3.6. Лабораторная работа 2............................................................................................................................... |
43 |
4. ВЫВОД СИМВОЛОВ НА ЭКРАН................................................................................................................ |
44 |
4.1. Вывод одного символа............................................................................................................................... |
44 |
4.2. Команда завершения программы.............................................................................................................. |
46 |
4.3. Пересылка данных между регистрами..................................................................................................... |
48 |
4.4. Вывод на экран строки символов ............................................................................................................. |
51 |
4.5. Лабораторная работа 3............................................................................................................................... |
53 |
5. ВЫВОД НА ЭКРАН ДВОИЧНЫХ ЧИСЕЛ................................................................................................. |
53 |
5.1. Флаг переноса............................................................................................................................................. |
54 |
5.2. Циклический сдвиг.................................................................................................................................... |
55 |
5.3. Организация циклов................................................................................................................................... |
56 |
5.4. Отладка программы ................................................................................................................................... |
59 |
5.5. Лабораторная работа 4............................................................................................................................... |
60 |
6. ВЫВОД НА ЭКРАН ЧИСЕЛ В ШЕСТНАДЦАТЕРИЧНОЙ ФОРМЕ................................................... |
61 |
4
6.1. Флаги состояния......................................................................................................................................... |
61 |
6.2. Команды условного перехода.................................................................................................................. |
63 |
6.3. Вывод на экран одной шестнадцатеричной цифры ................................................................................ |
64 |
6.4. Вывод старшей цифры двузначного шестнадцатеричного числа.......................................................... |
65 |
6.5. Вывод младшей цифры двузначного шестнадцатеричного числа......................................................... |
67 |
6.6. Лабораторная работа 5............................................................................................................................... |
68 |
7. СПИСКИ И ПРОЦЕДУРЫ............................................................................................................................. |
69 |
7.1. Несвязанные списки................................................................................................................................... |
69 |
7.2. Связанные списки ...................................................................................................................................... |
74 |
7.3. Программные стеки.................................................................................................................................... |
76 |
7.4. Процедуры.................................................................................................................................................. |
78 |
8. ВВОД С КЛАВИАТУРЫ ШЕСТНАДЦАТЕРИЧНЫХ ЧИСЕЛ.............................................................. |
85 |
8.1. Ввод одной шестнадцатеричной цифры................................................................................................... |
85 |
8.2. Ввод двухзначного шестнадцатеричного числа...................................................................................... |
86 |
8.3. Более совершенный ввод шестнадцатеричных цифр.............................................................................. |
88 |
8.4. Лабораторная работа 6............................................................................................................................... |
92 |
ЧАСТЬ 2. АССЕМБЛЕРНЫЕ ПРОГРАММЫ В СРЕДЕ DOS |
.................................93 |
9. СИСТЕМНЫЕ ПРОГРАММЫ...................................................................................................................... |
93 |
9.1. Функции системных программ................................................................................................................. |
93 |
9.2. Файлы.......................................................................................................................................................... |
99 |
9.3. Язык управления DOS ............................................................................................................................. |
104 |
9.3.1. Запуск DOS....................................................................................................................................... |
104 |
9.3.2. Общие сведения о командах DOS .................................................................................................. |
105 |
9.3.3. Некоторые системные команды DOS ............................................................................................ |
107 |
9.3.4. Командные файлы ........................................................................................................................... |
109 |
9.4. Утилита DOS Navigator............................................................................................................................ |
110 |
9.4.1. Представление на экране файловой структуры............................................................................ |
110 |
9.4.2. Ввод команд DOS ............................................................................................................................ |
114 |
9.5. Лабораторная работа 7............................................................................................................................. |
116 |
10. ПРОСТЫЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ..................................................................................... |
117 |
10.1. Общая структура простых ассемблерных программ........................................................................... |
117 |
10.2. Пример программы на ассемблере ....................................................................................................... |
119 |
10.3. Подготовка программы к выполнению................................................................................................ |
119 |
10.4. Комментарии .......................................................................................................................................... |
121 |
10.5. Метки....................................................................................................................................................... |
122 |
10.6. Еще один пример программы................................................................................................................ |
124 |
10.7. Вывод на экран двузначного шестнадцатеричного числа.................................................................. |
126 |
10.8. Лабораторная работа 8........................................................................................................................... |
128 |
|
5 |
11. ВЫВОД НА ЭКРАН ДЕСЯТИЧНЫХ И ШЕСТНАДЦАТЕРИЧНЫХ ЧИСЕЛ............................ |
129 |
11.1. Получение алгоритма............................................................................................................................. |
129 |
11.2. Дерево подпрограмм.............................................................................................................................. |
130 |
11.3. Запись на ассемблере............................................................................................................................. |
132 |
11.4. Многофайловая исходная программа................................................................................................... |
134 |
11.5. Лабораторная работа 9........................................................................................................................... |
136 |
12. ДАМПИРОВАНИЕ ПАМЯТИ.................................................................................................................. |
136 |
12.1. Дампирование шестнадцати байтов ..................................................................................................... |
137 |
12.2. Дампирование 256 байтов памяти...................................................................................................... |
139 |
12.3. Очистка экрана....................................................................................................................................... |
143 |
12.4. Лабораторная работа 10......................................................................................................................... |
145 |
13. ПЕРЕПИСКА СЕКТОРА ПАМЯТИ......................................................................................................... |
146 |
13.1. Функции переписки сектора.................................................................................................................. |
147 |
13.2. Копирование сектора............................................................................................................................. |
148 |
13.3. Алгоритмы процедур............................................................................................................................. |
150 |
13.4. Лабораторная работа 11......................................................................................................................... |
151 |
14. ДИСПЕТЧЕР КОМАНД.............................................................................................................................. |
153 |
14.1. Ввод команд............................................................................................................................................ |
153 |
14.2. Алгоритм диспетчера............................................................................................................................. |
155 |
14.3. Выполнение команды............................................................................................................................ |
157 |
14.4. Лабораторная работа 12......................................................................................................................... |
160 |
15. РЕДАКТИРОВАНИЕ ИНФОРМАЦИИ В ОП........................................................................................ |
161 |
15.1. Алгоритм редактирования сектора....................................................................................................... |
161 |
15.2. Установка курсора.................................................................................................................................. |
164 |
15.3. Выполнение команды............................................................................................................................ |
166 |
15.4. Запись шестнадцатеричной цифры....................................................................................................... |
167 |
15.5. Лабораторная работа 13......................................................................................................................... |
169 |
16. ОПЕРАЦИИ С ФАЙЛАМИ........................................................................................................................ |
169 |
16.1. Файловая система FAT .......................................................................................................................... |
169 |
16.2. Создание и открытие файла .................................................................................................................. |
175 |
16.3. Операции чтения и записи..................................................................................................................... |
179 |
16.4. Закрытие и уничтожение файла............................................................................................................ |
182 |
16.5. Пример программы................................................................................................................................ |
183 |
16.6. Другие операции с файлами.................................................................................................................. |
188 |
16.7. Модернизация редактора для работы с файлами................................................................................ |
189 |
16.7.1. Алгоритм диспетчера.................................................................................................................... |
189 |
16.7.2. Алгоритмы процедур..................................................................................................................... |
193 |
16.8. Лабораторная работа 14......................................................................................................................... |
195 |
6
17. РАЗДЕЛЬНАЯ ТРАНСЛЯЦИЯ ПРОГРАММЫ..................................................................................... |
196 |
17.1. Префикс программного сегмента ......................................................................................................... |
196 |
17.2. Получение прикладной программы...................................................................................................... |
202 |
17.3. Программа типа com .............................................................................................................................. |
207 |
17.4. Программа типа exe ............................................................................................................................... |
212 |
17.5. Применение нескольких объектных модулей...................................................................................... |
217 |
17.6. Лабораторная работа 15......................................................................................................................... |
220 |
18. УПРАВЛЕНИЕ ПАМЯТЬЮ И ЗАПУСК ПРОГРАММ........................................................................ |
221 |
18.1. Распределение памяти ........................................................................................................................... |
221 |
18.2. Запуск прикладных программ............................................................................................................... |
226 |
18.3. Многопрограммный редактор............................................................................................................... |
232 |
18.3.1. Структура многопрограммного редактора.................................................................................. |
232 |
18.3.2. Программы..................................................................................................................................... |
234 |
18.4. Лабораторная работа 16......................................................................................................................... |
240 |
19. ПРЕРЫВАНИЯ И РЕЗИДЕНТНЫЕ ПРОГРАММЫ............................................................................ |
241 |
19.1. Прерывания............................................................................................................................................. |
241 |
19.1.1. Внешние аппаратные прерывания................................................................................................ |
241 |
19.1.2. Исключения.................................................................................................................................... |
243 |
19.1.3. Программные прерывания............................................................................................................ |
244 |
19.1.4. Алгоритм выполнения прерывания ............................................................................................. |
246 |
19.2. Резидентные программы........................................................................................................................ |
250 |
19.2.1. Особенности резидентных программ........................................................................................... |
250 |
19.2.2. Использование свободных прерываний ...................................................................................... |
251 |
19.2.3. Перехват прерываний.................................................................................................................... |
254 |
19.3. Резидентный редактор информации..................................................................................................... |
260 |
19.4. Лабораторная работа 17......................................................................................................................... |
265 |
ЗАДАНИЯ ДЛЯ ПРОГРАММИРОВАНИЯ................................................................................................... |
265 |
|
ПРИЛОЖЕНИЕ. ОСНОВНЫЕ ОПЕРАТОРЫ АССЕМБЛЕРА............................................................... |
272 |
|
П1. |
Типы операторов...................................................................................................................................... |
272 |
П2. |
Операторы обработки данных................................................................................................................. |
273 |
П2.1. Арифметические операторы........................................................................................................... |
273 |
|
П2.2. Логические операторы .................................................................................................................... |
276 |
|
П2.3. Операторы передачи данных.......................................................................................................... |
278 |
|
П2.4. Операции над регистром флагов................................................................................................... |
280 |
|
П2.5. Операторы сдвига........................................................................................................................... |
281 |
|
П2.6. Цепочечные (строковые) операторы.............................................................................................. |
285 |
|
П3. |
Адресация данных.................................................................................................................................... |
287 |
П4. |
Определение данных................................................................................................................................ |
290 |
П4.1. Метки................................................................................................................................................ |
290 |
|
|
7 |
П4.2. Определение байтов ....................................................................................................................... |
291 |
|
П4.3. Определение слов........................................................................................................................... |
292 |
|
П4.4. Определение констант..................................................................................................................... |
292 |
|
П4.5. Структуры......................................................................................................................................... |
293 |
|
П5. |
Операторы передачи управления............................................................................................................ |
296 |
П5.1. Операторы условных переходов.................................................................................................... |
296 |
|
П5.2. Операторы безусловных переходов.............................................................................................. |
298 |
|
П5.3. Операторы циклов.......................................................................................................................... |
300 |
|
П5.4. Операторы процедур ...................................................................................................................... |
303 |
|
П5.5. Другие операторы передачи управления....................................................................................... |
304 |
|
П6. |
Псевдооператоры для задания структуры программы.......................................................................... |
305 |
П7. |
Вспомогательные псевдооператоры....................................................................................................... |
307 |
П8. |
Макрооператоры....................................................................................................................................... |
309 |
8
ВВЕДЕНИЕ
Данное пособие предназначено для обучения студентов специальностей 220201 («Управление и информатика в технических системах») и 230104 («Системы автоматизированного проектирования») в рамках учебных курсов «Информатика», «Операционные системы» и «Вычислительные машины, системы и сети», но может быть использовано и при обучении студентов других специальностей, предполагающих углубленную подготовку по программированию.
Как следует из названия пособия, основной целью его изучения является обучение программированию на языке ассемблера. Выбор в качестве объекта изучения этого языка обусловлен следующим. Во-первых, только ассемблер позволяет получить представление об организации и функционировании аппаратуры ЭВМ. Другие языки программирования не предоставляют (или почти не предоставляют) такой возможности. Во-вторых, программное управление многими аппаратными устройствами предполагает использование ассемблера в качестве языка написания таких программ. И, наконец, в-третьих, программирование на ассемблере позволяет получить наиболее эффективные машинные программы, как по времени выполнения, так и по затратам памяти. Данные свойства имеют существенное значение для тех программ, которые выполняются в среде ограниченных аппаратных средств, например, в среде встроенных вычислительных систем, установленных непосредственно на управляемых объектах. Поэтому изучение ассемблера было и остается важным средством подготовки специалистов в области вычислительной техники.
Среди многих языков ассемблера в качестве объекта изучения выбран язык NASM для микропроцессоров фирмы INTEL. Подобный выбор обусловлен, вопервых, широким применением указанных микропроцессоров в качестве центральных процессоров для персональных ЭВМ. Во-вторых, микропроцессоры INTEL обладают сравнительно большим числом машинных команд и других аппаратных ресурсов. Знакомство с языком ассемблера для
9
этих процессоров делает сравнительно несложной задачей последующее изучение ассемблера для какого-то другого процессора. В-третьих, распространяемый на бесплатной основе ассемблер NASM обладает очень полезным свойством: результирующая машинная программа ориентирована или на выполнение в среде требуемой операционной системы – DOS, WINDOWS или UNIX, или может выполняться автономно – без использования операционной системы. Следует заметить, что тексты программ на языке NASM очень похожи на тексты программ, записанные на других известных языках ассемблера – TASM и MASM.
Данное учебно-методическое пособие состоит из введения, двух частей и приложения. Каждая из частей пособия состоит из нескольких разделов, большинство из которых заканчиваются заданиями на выполнение лабораторных работ. В конце второй части приводится список задач для программирования.
В первой части пособия “Выполнение машинных программ” (разделы 1–8) производится знакомство с языком, занимающим промежуточное положение между машинным языком и ассемблером. Обладая ассемблерной формой записи кодов операций и регистров, данный язык не имеет ассемблерных псевдооператоров и использует численные (не символьные) адреса. Знакомство с данным языком осуществляется с помощью отладчика Debug и предназначено, прежде всего, для изучения механизма выполнения процессором машинных программ. Кроме того, при изучении первой части пособия создается основа для последующего написания и отладки ассемблерных программ.
Во второй части пособия “Ассемблерные программы в среде DOS” (разделы 9–19) рассматриваются вопросы разработки программ, выполняемых в среде операционной системы DOS. Рассмотрение данной темы выполняется на примере разработки достаточно большой программы, выполняющей редактирование информации, находящейся или в оперативной памяти, или в файле на магнитном диске. В процессе данной разработки изучаются наиболее
10
важные операторы ассемблера, а также наиболее интересные системные вызовы.
В приложении приводятся краткие сведения об основных операторах ассемблера.