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

Информатика

.pdf
Скачиваний:
92
Добавлен:
11.05.2015
Размер:
1.73 Mб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ

Кафедра компьютерных систем в управлении и проектировании (КСУП)

Одиноков В. В., Баталин И. А.

ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ

Учебное методическое пособие

для специальностей:

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

важные операторы ассемблера, а также наиболее интересные системные вызовы.

В приложении приводятся краткие сведения об основных операторах ассемблера.