Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера: Пер. с англ. — 2-е изд., стереотип. - М.: Радио и связь. 1991. - 336 с.: ил. ISBN 5-256-00956-7 В книге автора из США рассмотрен широкий круг вопросов, связанных с программированием на языке ассемблера для персональных ЭВМ IBM PC и XT. Приведены полные системы команд микропроцессоров Intel 8088 и 8087. Рассмотрены вопросы использования ресурсов операционной системы DOS и управления внешними устройствами, работа с клавиатурой и звуковым генератором, программы обработки прерываний системы ввода-вывода. Приведено большое число примеров и задач с решениями. Для программистов. ПРЕДИСЛОВИЕ К РУССКОМУ ИЗДАНИЮ
Принято считать, что знание языка ассемблера необходимо лишь профессиональным программистам. Это подкрепляется тем, что большинство научно-инженерных и экономических задач гораздо легче программировать на языках высокого уровня, таких как Бейсик, Фортран, Паскаль, а наличие огромного числа готовых прикладных программ для персональных ЭВМ IBM PC и XT позволяет во многих случаях вообще обойтись без программирования в обычном смысле этого слова.
Тем не менее интерес к языку ассемблера для персональных ЭВМ IBM PC и XT постоянно растет, и не только среди профессиональных программистов. Объясняется это тем, что для самостоятельного выполнения простых доработок готовых программ и дополнения возможностей, предоставляемых трансляторами языков программирования высокого уровня, существует целый арсенал популярных и недорогих средств, таких как программы анализа и редактирования двоичных файлов, отладчики и ловушки прерываний и т. д. Грамотное применение этих средств сокращает затраты времени на доработку и отладку программ, а также повышает эффективность использования персональных ЭВМ. Однако для этого пользователю необходимо иметь определенный минимум знаний языка ассемблера, а также структуры и функции операционной системы PC DOS.
Предлагаемая читателю книга Л. Скэнлона рассчитана на предоставление подобного минимума знаний, позволяющего уверенно выполнять небольшие ассемблерные вставки в программах на языках Бейсик, Фортран и Паскаль, а также пользоваться пакетами программ типа Norton Utilities и PC Tools для несложного редактирования исполняемых программных файлов (например, для замены или перевода на русский язык выдаваемых ими сообщений). Эту книгу можно рекомендовать широкому кругу пользователей персональных ЭВМ, совместимых с IBM PC и XT. Кроме того, ее можно рассматривать как элементарное введение в операционную систему PC DOS и язык ассемблера для персональных ЭВМ fBM PC и XT, вполне доступное старшеклассникам и студентам вузов.
И. В. Емелин

СОДЕРЖАНИЕ ЭТОЙ КНИГИ
В гл. 1 мы дадим общее представление о микропроцессоре 8088 - "мозге" персональной ЭВМ IBM PC - и обсудим его роль в системе.
В начале гл. 2 обсуждаются общие свойства Ассемблеров, а затем дается описание Макроассемблера фирмы IBM. Все Ассемблеры PC-совместимых ЭВМ выполняют одну и ту же работу: они транслируют понятные Вам команды в числовые коды, которые понятны микропроцессору ЭВМ. Следовательно, большинство из описываемых нами принципов применимы к любому другому Ассемблеру, который может оказаться в Вашем распоряжении. В гл. 2 представлена также простая программа и показано, как ее ввести в ЭВМ, оттранслировать и исполнить (вызвать).
В гл. 3 описана система команд микропроцессора 8088, т. е. команды языка ассемблера, с помощью которых обеспечивается взаимодействие с Вашей ЭВМ IBM PC. Команды в этой книге описаны не в алфавитном порядке, а в зависимости от их принадлежности к функциональным группам. Другими словами, мы группируем сложение с вычитанием, умножение с делением и т. д. При таком подходе Вы не только понимаете, что делают команды, но и получаете представление об их взаимосвязях.
В гл. 4 показано, какие сочетания команд надо использовать для выполнения довольно сложных математических операций, которые в системе команд микропроцессора непосредственно не предусмотрены. В гл. 5 обсуждаются операции над списками и таблицами.
Персональные ЭВМ IBM PC и XT имеют встроенную управляющую программу, называемую BIOS (Basic I / О System - основная система ввода-вывода), которая обеспечивает взаимодействие с оборудованием системы. Другими словами, она обеспечивает все необходимое, что требуется для взаимодействия микропроцессора с клавиатурой, экраном, дисководом, принтером и другими периферийными устройствами. Следовательно, система BIOS выполняет функции "главного администратора" ЭВМ и обладает многими полезными возможностями, знание которых позволит Вам сберечь часы, затрачиваемые на программирование. В гл. 6 показано, как реализовать эти возможности.
В гл. 7, 8 обсуждаются программы, которые изображают на экране простые графические образы и генерируют звуки (даже музыку !) с помощью динамика, встроенного в ЭВМ IBM PC.
В гл. 9 рассмотрены макроопределения. Макроопределение представляет собой мини-программу, которая помещается в текст основной программы просто упоминанием имени. Применение макроопределений может упростить разработку программ на языке ассемблера до уровня программ на языке Бейсик. В этой главе приводится также "библиотека" из более чем 30 полезных макроопределений.
В гл. 10 описано использование объектных библиотек, т. е. дисковых файлов, содержащих уже оттранслированные программы. Фактически объектная библиотека представляет собой набор готовых к употреблению инструментов, которые Ваша программа может выбрать по мере необходимости. Возможность создания объектных библиотек введена фирмой IBM в Макроассемблер версии 2.
В гл. 11 описано еще одно новое свойство Макроассемблера версии 2:он позволяет Вам разрабатывать структурированные программы на языке ассемблера. Под "структурированной" мы понимаем программу, содержащую операторы высокого уровня, подобные операторам IF-THEN и FOR-NEXT в Бейсике. Структурирование ускорит Вашу работу над программой и сделает ее более легкой для понимания.
Наконец в гл. 12 мы обсудим математический сопроцессор 8087,представляю-щий собой дополнительную микросхему, которая может выполнять сложные арифметические операции.
Для удобства читателя в книгу включены пять приложений. В приложении А даны таблицы, которые помогут преобразовывать шестнадцатеричные числа в десятичные и наоборот. В приложении Б показаны символы и образы, которые можно изобразить на экране. В приложениях В и Г в алфавитном порядке перечислен набор команд микропроцессора 8088 и показано, сколько времени занимает выполнение каждой из команд, сколько байтов памяти занимает каждая команда и на какие флаги состояния она воздействует. Приложение Д представляет собой "руководство по пользованию диском", в котором описано, как использовать программы, находящиеся на дополнительно поставляемом диске.
Большинство глав завершается упражнениями. Некоторые из них помогут проверить, насколько Вы поняли материал главы, другие дополнят Ваше знание материала.
ЧТО ТРЕБУЕТСЯ ПРИ ЧТЕНИИ ЭТОЙ КНИГИ
Для работы над книгой Вам нужна персональная ЭВМ IBM PC, имеющая по крайней мере один дисковод, или персональная ЭВМ IBM XT. Вам потребуются также два пакета программ: Ассемблер и дисковая операционная система DOS (Disk Operating System) фирмы IBM.
ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА
Эта книга построена как дополнение к руководству по Макроассемблеру и руководствам, поставляемым вместе с ЭВМ, поэтому, скорее всего, другая литература Вам не понадобится. Однако всякий серьезный пользователь ЭВМ IBM PC должен иметь копию технического руководства (Technical Reference) по персональной ЭВМ IBM, PC (или ХТ),представляющего собой бесценный источник технических деталей. Наряду с прочим материалом это руководство содержит полный и хорошо документированный листинг встроенной в ЭВМ управляющей программы BIOS. ,
Если Ваша ЭВМ снабжена операционной системой DOS версии 2.1 (или более поздней), то полезно приобрести копию технического руководства по операционной системе DOS фирмы IBM (DOS Technical Reference), содержащего детальные сведения об организации хранения данных на диске, о процедурах DOS, к которым можно обращаться из программ на языке ассемблера, и о других возможностях системы.
Наконец, для получения детальных сведений об интегральных микросхемах системы Вам могут понадобиться следующие справочные документы: The iAPX 86, 88 User's Manual; The $086 Family User's Manual; iAPX 88 Book; iAPX 88/10 Data Sheet. Их можно заказать в литературном отделе фирмы Intel Corporation по адресу 3065 Bowers Ave.; Santa Clara, CA 95051.
ИЗМЕНЕНИЯ В ЭТОМ ИЗДАНИЙ
'Обладатели предыдущих изданий этой книги, наверное, обратят внимание на некоторые изменения, сделанные в данном издании. Некоторые из них отражают новые функции, предусмотренные в Макроассемблере версии 2.00; к ним относятся новые главы, посвященные объектным библиотекам и структурному программированию (гл. 10,11). Кроме того, автором добавлена глава, описывающая макроопределения (гл. 9). а также расширены и дополнены многие разделы с учетом личного опыта и предложений читателей. Короче говоря, автор попытался сделать эту книгу более полезной как для чтения, так и для справок. Язык ассемблера представляет собой очаровательное и эффективное средство программирования, и автор надеется, "что читатель получит столько же удовлетворения от его использования, сколько получил автор от написания этой книги.
Лео Д. Скэнлон, июнь 1985г.

ОГЛАВЛЕНИЕ
Предисловие к русскому изданию. ...
5 Предисловие. Зачем нужен язык
ассемблера?.................... 6
Введение. Интенсивный курс систем
счисления для ЭВМ.............. 1C
8.1. Двоичная система счисления .... 10
Восемь битов образуют байт..... 11
Сложение двоичных чисел...... 12
Числа со знаком............. 13
8.2. Шестнадцатеричная система
счисления.................. 14
Применение шестнадцатеричных
чисел..................... 15
Упражнения................ 15
Глава 1. Введение в программирование на языке ассемблера........... 16
1.1. Что такое язык ассемблера?..... 16
1.2. Происхождение микропроцессора 8088.......................... 16
1.3. Общие сведения о
микропроцессоре 8088 . . . .'..... 18
Адресация.................. 18
Возможности программирования . 19
Область портов ввода-вывода ... 20
Распределение памяти......... 20
Прерывания................ 20
Адресная шина и шина данных . . 21
1.4. Внутренние регистры.......... 21
Регистры данных............. 21
Регистры сегментов .•.......... 22
Регистры указателей и индексов . 23
Указатель команд............ 23
Флаги..................... 24
Упражнения................ 26
Глава 2. Пользование Ассемблером 26
2.1. Что такое Ассемблер?.......... 26
2.2. Разработка программы на языке
ассемблера.................. 27
Редактор................... 27
Ассемблер.................. 28
Загрузчик LINK.............. 28
Отладчик DEBUG............. 28
Разработка программы методом
"сверху вниз"............... 29
2.3. Операторы исходной программы. . 30
334
Константы в операторах исходной
программы................. 30
2.4. Команды языка ассемблера..... 30
Поле метки................. 31
Поле мнемокода............. 31
Поле операнда............... 32
Поле комментариев........... 32
2.5. Псевдооператоры............. 32
Псевдооператоры данных...... 33
Псевдооператоры управления
листингом.................. 41
2.6. Операции................... 42
Арифметические операции...... 42
Логические операции........ 45
Операции отношения......... 46
Операции, возвращающие
значения.................. 47
Операции присваивания
атрибутов................. 48
2.7. Ввод, трансляция и исполнение
программы................ 49
Создание рабочего диска
Ассемблера.......'......... 50
Пример программы.......... 50
Ввод программы............ 52
Трансляция программы....... 53
Листинг исходной программы . . 54
Создание исполняемого файла. . 56
Исполнение программы....... 56
Другие виды листинга........ 60
2.8. Модели структуры программы . . 61
2.9. Дополнительные псевдооператоры 63
Псевдооператоры данных..... 63
Условные псевдооператоры.... 65
Листинговые псевдооператоры. . 68
2.10. Обзор ключевых моментов. ... 69 Упражнения............... 71
Глава 3. Система команд микропроцессора 8088................... 72
3.1. Об этой главе............... 72
3.2. Режимы адресации........... 72
Регистровая и непосредственная
адресация................. 74
Режимы адресации па*мяти .... 75
3.3. Типы команд............... 78
3.4. Команды пересылки данных ... 82 Команды общего назначения... 83
Команды ввода-вывода....... 87
Команды пересылки адреса.... 87
Команды пересылки флагов ... 88
3.5. Арифметические команды ..'...
89 Форматы арифметических данных 90
Команды сложения.......... 91
Команды вычитания......... 95
Команды умножения........ 99
Команды деления........... 101
Команды расширения знака ... 102
3.6. Команды манипулирования
битами................... 102
Логические команды......... 102
Команды сдвига и циклического
сдвига................... 106
3.7. Команды передачи управления. .
108 Команды безусловной передачи
управления................ 110
Команды условной передачи
управления................ 114
Команды управления циклами . 118
3.8. Команды обработки строк..... 119
Префиксы повторения........ 121
Команды пересылки стррк..... 122
Команды сравнения строк..... 124
Команды сканирования строк . . 126
Команды загрузки и сохранения
строки................... 127
3.9. Команды прерывания........ 128
3.10. Команды управления
микропроцессором.......... 131
Команды управления флагами 131
Команды внешней
синхронизации ............. 132
Команда холостого хода...... 133
3.11. Обзор ключевых моментов
главы.................... 133
Упражнения............... 136
Глава 4. Операции вал числами
повышенной точности........... 137
4.1. Умножение................ 137
Умножение двух 32-битовых
чисел без знака............. 138
Умножение двух 32-битовых
чисел со знаком............ 140
4.2. Деление................... 142
4.3. Извлечение квадратного корня. . 145
Упражнения............... 147
Глава 5. Манипулирование
структурами данных............ 147
5.1. Неупорядоченные списки...... 148
Добавление элемента
к неупорядоченному списку ... 148
Удаление элемента
из неупорядоченного списка . . . 149
Поиск максимума и минимума
в неупорядоченном списке .... 151
5.2. Сортировка неупорядоченных
данных................... 152
Пузырьковая сортировка...... 152
5.3. Упорядоченные списки....... 157
Поиск в упорядоченном списке 157
Вставка элемента в упорядоченный список................ 161
Удаление элемента из
упорядоченного списка....... 162
5.4. Табличные функции......... 163
Табличные функции в качестве
замены формул............. 164
Табличные функции
и преобразование кодов...... 168
Таблицы переходов.......... 169
5.5. Текстовые файлы............ 170
Упражнения............... 172
Глава 6. Пользование системными
ресурсами.................... 172
6.1. Память вычислительной системы 172
6.2. Прерывания системы BIOS..... 174
Векторы прерываний
микропроцессора 8088........ 176
Векторы прерывания
микроконтроллера 8259....... 178
Входные точки системы BIOS. . . 179
Вызовы процедур пользователя 187
Указатели системных таблиц . . . 188
6.3. Прерывания операционной
системы DOS ..............-188
Тип 21 (вызовы функций)..... 194
Программа выдачи сообщений
об ошибках операционной системы
DOS версии 2.............. 202
6.4. Работа с клавиатурой......... 205
Система ASCII.............. 205
Принцип действия клавиатуры
ЗВМ IBM PC............... 206
Коды символов и scan-коды . . . 208
Прерывания для работы
с клавиатурой.............. 212
6.5. Преобразование чисел из ASCII-кодов в двоичную систему...... 214
Преобразование строки ASCII-кодов
в двоичное число........... 215
Преобразование двоичного числа
в строку ASCII-кодов........ 220
Упражнения............... 221
Глава 7. Простые способы получения
графических изображений........ 221
7.1. Режимы изображения......... 221
7.2. Изображаемые символы....... 222
Набор символов...........'. 222
Команды дисплея........... 225
Простые приемы построения
изображений............... 225
7.3. Основы оживления изображений. 228
Старый трюк с движением "рожицы"................. 229
7.4. Создание сложных изображений
с помощью таблицы образа .... 230
Универсальная процедура
изображения............... 231
Упражнения............... 234
Глава 8. Да будет звук!........ 235
8.1. Лринцип работы динамика..... 235
8.2. Программирование динамика. . . 236
Процедура ВЕЕР системы BIOS. . 236
Более универсальный генератор звуков................... 236
8.3. Музыка, музыка, музыка..... 238
Процедура исполнения мелодии 240
Музыка с клавиатуры........ 242
Глава 9. Макроопределения..... 244
9.1. Введение в макроопределения.. 244
Сравнение макроопределений
и процедур................ 245
Макроопределения ускоряют
программирование.......... 245
Состав макроопределений..... 246
9.2. Псевдооператоры Макроассемблера ................ 247
Псевдооператоры общего
назначения................ 247
Псевдооператоры повторения . . 250
Условные псевдооператоры.... 251
Псевдооператоры управления
листингом................ . 253
9.3. Операции в макроопределениях 253
9.4. Задание макроопределений
в исходных программах.......... 254
9.5. Библиотека макроопределений 255
Создание библиотеки
макроопределений .......... 256
Указание для задания
макроопределений .......... 256
Считывание библиотеки
макроопределений в программу 256
Описание макроопределений. . . 257
Текст макроопределений...... 265
Глава 10. Библиотеки объектных
модулей..................... 277
10.1. Составление библиотеки объектных модулей......... 278
10.2. Выполнение операций над библиотекой объектных модулей . . 278
Как получить каталог библиотеки................ 279
10.3. Пользование библиотеками объектных модулей......... 279
Глава 11. Структурное
программирование.............. 279
11.1. Структурные операторы и струк»
туры логики управления...... 280
Условия в структурах логики
управления................ 281
11.2. Структура^ ............... 281
Структура IF с частицей ELSE .. 283
Функционирование структуры IF 283
Варианты операнда.......... 284
11.3. Структура DO.............. 285
Структура DO UNTIL......... 286
Структура DO WHILE......... 286
Струк-ypaDO COMPLEX...... 287
Дополнительные операнды .... 288
11.4. Структура SEARCH.......... 289
Структура SEARCH UNTIL..... 290
Структура SEARCH WHILE..... 290
Структура SEARCH COMPLEX . . 292
Дополнительные операнды .... 292
11.5. Ограничения на использование условий NCXZ и CXZ........ 293
11. 6. Составление структурированных
программ................. 293
Процедура................ 293
Использование программы SALUT 295
Переформатирование исходных
текстов программой SALUT .... 296
Глава 12. Математический
сопроцессор 8087............... 297
12.1. Внутренние регистры........ 297
Стек сопроцессора 8087....... 298
Формат чисел с плавающей
точкой.................... 298
12.2. Типы данных.............. 298
12.3. Система команд............ 299
12.4. Программирование сопроцессора 8087 на макроассемблере......... 302
Константы................. 302
Псевдооператоры определения
данных................... 302
12.5. Заключение............... 303
Ответы к упражнениям.......... 304
Приложение А. Преобразование шестнадцатеричных чисел в десятичные
и обратно..................... 311
Приложение Б. Набор ASCII-символов
персональной ЭВМ IBM PC ........ 312
Приложение В. Времена исполнения
команд микропроцессором 8088 .... 312 Приложение Г. Система команд
микропроцессора 8088........... 319
Приложение Д. Руководство по
пользованию диском . !.......... 322
Указатель терминов............. 327
Указатель команд и псевдооператоров 333
Hosted by uCoz