О Г Л А В Л Е Н И Е
           ВВЕДЕНИЕ.................................................. 26
           1. АРХИТЕКТУРА ЦЕНТРАЛЬНОГО ПРОЦЕССОРА ПЭВМ............... 27
           2. СИСТЕМА КОМАНД ЦЕНТРАЛЬНОГО ПРОЦЕССОРА................. 39
              2.1 Команды пересылки данных........................... 42
                  2.1.1   IN    Ввод байта или слова................. 42
                  2.1.2   LAHF  Загрузка AH из регистра флагов....... 42
                  2.1.3   LDS   Загрузка указателя с использо-
                                ванием DS............................ 43
                  2.1.4   LEA   Загрузка исполнительного адреса...... 44
                  2.1.5   LES   Загрузка указателя с использо-
                                ванием ES............................ 45
                  2.1.6   MOV   Пересылка (байта или слова).......... 45
                  2.1.7   OUT   Загрузка в порт...................... 46
                  2.1.8   POP   Выборка слова из стека............... 47
                  2.1.9   POPF  Пересылка слова из стека
                                в регистр FLAGS...................... 47
                  2.1.10  PUSH  Загрузка слова в стек................ 48
                  2.1.11  PUSHF Загрузка содержимого регистра
                                FLAGS в стек......................... 49
                  2.1.12  SAHF  Загрузка регистра AH в регистр
                                флагов............................... 49
                  2.1.13  XCHG  Обмен значениями..................... 50
                  2.1.14  XLAT  Кодирование AL по таблице............ 50
              2.2 Арифметические операции............................ 51
                  2.2.1   AAA   ASCII-коррекция при сложении......... 51
                  2.2.2   AAD   ASCII-коррекция при делении.......... 52
                  2.2.3   AAM   ASCII-коррекция при умножении........ 53
                  2.2.4   AAS   ASCII-коррекция при вычитании........ 54
                  2.2.5   ADC   Сложение с переносом................. 55
                  2.2.6   ADD   Сложение............................. 56
                  2.2.7   CBW   Преобразование байта в слово......... 56
                  2.2.8   CMP   Сравнение............................ 57
                  2.2.9   CWD   Преобразование слова в двойное
                                слово................................ 58
                  2.2.10  DAA   Десятичная коррекция при сложении.... 59
                  2.2.11  DAS   десятичная коррекция при вычитании... 59
                  2.2.12  DEC   Декремент............................ 60
                  2.2.13  DIV   Деление без учета знака.............. 61


                                     - 4 -
                  2.2.14  IDIV  Деление с учетом знака............... 62
                  2.2.15  IMUL  Умножение с учетом знака............. 63
                  2.2.16  INC   Инкремент............................ 64
                  2.2.17  MUL   Умножение без учета знака............ 65
                  2.2.18  NEG   Получение дополнительного кода....... 65
                  2.2.19  SBB   Вычитание с заемом................... 66
                  2.2.20  SUB   Вычитание............................ 67
              2.3 Логические операции................................ 68
                  2.3.1   AND   Логическое умножение................. 68
                  2.3.2   NOT   Логическое отрицание................. 69
                  2.3.3   OR    Логическое сложение.................. 70
                  2.3.4   RCL   Циклический сдвиг влево через CF..... 71
                  2.3.5   RCR   Циклический сдвиг вправо через CF.... 72
                  2.3.6   ROL   Циклический сдвиг влево.............. 73
                  2.3.7   ROR   Циклический сдвиг вправо............. 74
                  2.3.8   SAL   Арифметический сдвиг влево........... 75
                  2.3.9   SAR   Арифметический сдвиг вправо.......... 77
                  2.3.10  SHL   Логический сдвиг влево............... 78
                  2.3.11  SHR   Логический сдвиг вправо.............. 79
                  2.3.12  TEST  Тест................................. 80
                  2.3.13  XOR   Исключающее ИЛИ...................... 81
              2.4 Обработка блоков данных............................ 82
                  2.4.1   CMPS  Сравнение строк...................... 82
                  2.4.2   CMPSB Сравнение строк из байтов............ 84
                  2.4.3   CMPSW Сравнение строк из слов.............. 85
                  2.4.4   LODS  Загрузка строки...................... 87
                  2.4.5   LODSB Загрузка строки из байтов............ 88
                  2.4.6   LODSW Загрузка строки из слов.............. 89
                  2.4.7   MOVS  Пересылка строки..................... 90
                  2.4.8   MOVSB Пересылка строки из байтов........... 92
                  2.4.9   MOVSW Пересылка строки из слов............. 93
                  2.4.10  REP   Повтор............................... 94
                  2.4.11  REPE  Повторять пока равно................. 95
                  2.4.12  REPNE Повторять пока не равно.............. 96
                  2.4.13  REPNZ Повторять пока не ноль............... 97
                  2.4.14  SCAS  Просмотр строки...................... 98
                  2.4.15  SCASB Просмотр строки из байтов............ 99


                                     - 5 -
                  2.4.16  SCASW Просмотр строки из слов..............101
                  2.4.17  STOS  Запись в строку......................102
                  2.4.18  STOSB Запись в строку из байтов............104
                  2.4.19  STOSW Запись в строку из слов..............104
              2.5 Команды передачи управления........................105
                  2.5.1   CALL  Вызов подпрограммы...................105
                  2.5.2   JMP   Безусловный переход..................107
                  2.5.3   RET   Возврат из подпрограммы..............108
              2.6 Команды условного перехода.........................109
                  2.6.1   JA     Переход если выше...................109
                  2.6.2   JAE    Переход если выше или равно.........109
                  2.6.3   JB     Переход если ниже...................110
                  2.6.4   JBE    Переход если ниже или равно.........111
                  2.6.5   JC     Переход если перенос................111
                  2.6.6   JCXZ   Переход если CX = 0.................112
                  2.6.7   JE     Переход если равно..................113
                  2.6.8   JG     Переход если больше.................113
                  2.6.9   JGE    Переход если больше или равно.......114
                  2.6.10  JL     Переход если меньше.................115
                  2.6.11  JLE    Переход если меньше или равно.......115
                  2.6.12  JNA    Переход если не выше................116
                  2.6.13  JNAE   Переход если не выше и не равно.....116
                  2.6.14  JNB    Переход если не ниже................116
                  2.6.15  JNBE   Переход если не ниже и не равно.....117
                  2.6.16  JNC    Переход если нет переноса...........117
                  2.6.17  JNE    Переход если не равно...............117
                  2.6.18  JNG    Переход если не больше..............118
                  2.6.19  JNGE   Переход если не больше и не равно...118
                  2.6.20  JNL    Переход если не меньше..............118
                  2.6.21  JNLE   Переход если не меньше и не равно...119
                  2.6.22  JNO    Переход если нет переполнения.......119
                  2.6.23  JNP    Переход если нечетно................119
                  2.6.24  JNS    Переход если положительный
                                 результат...........................120
                  2.6.25  JNZ    Переход если не ноль................120
                  2.6.26  JO     Переход если есть переполнение......121
                  2.6.27  JP     Переход если четно..................121


                                     - 6 -
                  2.6.28  JPE    Переход если четно..................122
                  2.6.29  JPO    Переход если нечетно................122
                  2.6.30  JS     Переход если отрицательный
                                 результат...........................122
                  2.6.31  JZ     Переход если ноль...................123
                  2.6.32  LOOP   Переход по счетчику.................123
                  2.6.33  LOOPE  Переход пока равно..................124
                  2.6.34  LOOPNE Переход пока не равно...............124
                  2.6.35  LOOPNZ Переход пока не ноль................125
                  2.6.36  LOOPZ  Переход пока ноль...................125
              2.7 Команды прерывания.................................125
                  2.7.1   INT    Прерывание..........................125
                  2.7.2   INTO   Прерывание по переполнению..........126
                  2.7.3   IRET   Возврат после обработки
                                 прерывания..........................127
              2.8 Управление состоянием процессора...................128
                  2.7.1   CLC    Сброс признака переноса.............128
                  2.7.2   CLD    Сброс признака направления..........128
                  2.7.3   CLI    Сброс признака разрешения
                                 прерывания..........................129
                  2.7.4   CMC    Инвертирование признака переноса....129
                  2.7.5   ESC    Выборка кода операции и операнда....130
                  2.7.6   HLT    Останов.............................131
                  2.7.7   LOCK   Блокирование шины BUS...............131
                  2.7.8   NOP    Нет операции........................132
                  2.7.9   STC    Установка признака переноса.........132
                  2.7.10  STD    Установка признака направления......133
                  2.7.11  STI    Установка признака разрешения
                                 прерывания..........................133
                  2.7.12  WAIT   Ожидание............................134
           3. ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ.........................135
              3.1 Общие сведения.....................................135
              3.2 Арифметические операторы...........................139
                  3.2.1   +      Сложение или унарный плюс...........139
                  3.2.2   -      Вычитание или унарный минус.........139
                  3.2.3   *      Умножение...........................140
                  3.2.4   /      Деление.............................140


                                     - 7 -
                  3.2.5   MOD    Деление по модулю...................140
              3.3    .     Оператор доступа к полю структуры.........141
              3.4    []    Оператор индексации.......................141
              3.5 Операторы сдвига...................................142
                  3.5.1   SHL    Сдвиг влево.........................142
                  3.5.2   SHR    Сдвиг вправо........................142
              3.6 Побитовые логические операции......................142
                  3.6.1   NOT    Побитовое отрицание.................142
                  3.6.2   AND    Побитное логическое   "И"...........143
                  3.6.3   OR     Побитовая логическая операция
                                 "ИЛИ"...............................143
                  3.6.4   XOR    Побитовое логическое
                                 "исключающее ИЛИ"...................143
              3.7 Операторы отношений................................144
                  3.7.1   EQ     Оператор отношения "равно"..........144
                  3.7.2   NE     Операция отношения "не равно".......144
                  3.7.3   LT     Операция отношения "меньше чем".....145
                  3.7.4   GT     Оператор отношения "больше".........145
                  3.7.5   LE     Оператор отношения
                                 "меньше или равно"..................145
                  3.7.6   GE     Оператор отношения
                                 "больше или равно"..................146
              3.8 Оператор явного задания сегмента...................146
              3.9 Операторы типа.....................................147
                  3.9.1   PTR    Изменение типа переменной...........147
                  3.9.2   SHORT  Метка...............................148
                  3.9.3   THIS   Создание операнда по текущей
                                 позиции.............................148
                  3.9.4.  HIGH   Возврат старших 8 бит...............149
                  3.9.5   LOW    Получение восьми младших битов......149
                  3.9.6   SEG    Выдача значения сегмента............149
                  3.9.7   OFFSET Смещение выражения..................150
                  3.9.8   .TYPE  Выдача режима и контекста
                                 для выражения.......................150
                  3.9.9   TYPE   Получение размера типа..............151
                  3.9.10  LENGTH Возврат длины переменной............151


                                     - 8 -
                  3.9.11  SIZE   Выдача количества байт,
                                 используемых под переменную.........152
              3.10 Использование специальных операторов
                                 макрокоманд.........................152
                  3.10.1   &     Оператор подстановки................152
                  3.10.2   <>    Оператор буквального прочтения
                                 текста..............................153
                  3.10.3   !     Оператор буквальной интерпретации
                                 символа.............................153
                  3.10.4    %    Оператор преобразования в
                                 выражение...........................154
                  3.10.5   ;;    Макрокомментарий....................154
              3.11 Размещение сегментов,  имеющих одинаковые имена в
                   области памяти.Комбинирование сегментов...........155
                  3.11.1  PUBLIC Соединение одноименных сегментов....155
                  3.11.2  STACK  Определение стекового сегмента......155
                  3.11.3  COMMON Определение совмещаемых сегментов...156
                  3.11.4  MEMORY Размещает сегмент как
                                 последний возможный.................156
                  3.11.5  AT     Определение абсолютного сегмента....157
              3.12  Управление размещением сегментов в области
                    памяти. Типы размещения..........................157
                  3.12.1  BYTE   Располагает сегмент по адресу
                                 некоторого байта....................157
                  3.12.2  WORD   Выравнивание на 2-байтовую
                                 границу.............................158
                  3.12.3  PARA   Выравнивание на 16-байтовую
                                 границу.............................158
                  3.12.4  PAGE   Выравнивание на 256-байтовую
                                 границу.............................158
              3.13 Привязка сегментов к сегментным регистрам.........159
              3.14 Определение меток и переменных....................159
                  3.14.1 Спецификация типов данных...................159
                         3.14.1.1   BYTE   Тип данных для 1 байта....159
                         3.14.1.2   WORD   Тип данных в 2 байта......160
                         3.14.1.3   DWORD  Тип данных для 4 байтов...160
                         3.14.1.4   QWORD  Тип данных в 8 байт.......161


                                     - 9 -
                         3.14.1.5   TBYTE  Тип данных в 10 байтов....161
                  3.14.2 Спецификация типов меток....................162
                         3.14.2.1   FAR    Тип данных для метки из
                                           другого сегмента..........162
                         3.14.2.2   NEAR   Тип данных в том же
                                           сегменте..................162
                  3.14.3  $  Операнд счетчика размещения.............163
                  3.14.4     Массивы и буферы. Оператор  DUP.........163
              3.15 Специальные операторы для работы с записями.......164
                  3.15.1     MASK  Получение битовой маски...........164
                  3.15.2     WIDTH  Получение ширины в битах.........164
           4. ДИРЕКТИВЫ АССЕМБЛЕРА...................................165
              4.1   .186     Разрешает команды процессора 80186......165
              4.2   .286c    Разрешает команды реального режима
                             процессора 80286........................165
              4.3   .286p    Разрешает команды защищенного режима
                             процессора 80286........................167
              4.4   .287     Разрешает команды  процессора 80287.....167
              4.5   .8086    Разрешает команды  процессора 8086......167
              4.6   .8087    Разрешает команды  процессора 8087......168
              4.7   =        Создание абсолютного символа............169
              4.8   COMMENT  Ввод комментария в несколько строк......169
              4.9   .CREF    Разрешает листинг перекрестных ссылок...170
              4.10  DB       Описание байта..........................170
              4.11  DD       Описание двойного слова.................171
              4.12  DQ       Описание учетверенного слова............172
              4.13  DT       Описание 10-байтной единицы.............172
              4.14  DW       Описание слова..........................173
              4.15  ELSE     Ассемблирование, если условие
                             не выполнено............................174
              4.16  END      Конец модуля............................175
              4.17  ENDIF    Конец условного блока...................175
              4.18  ENDIF    Конец условного блока...................175
              4.19  ENDM     Конец макроопределения или
                             повторного блока........................176
              4.20  ENDP     Конец описания процедуры................176
              4.21  ENDS     Конец описания сегмента или


                                     - 10 -
                             структуры...............................177
              4.22  EQU      Создание символа........................177
              4.23  .ERR     Симуляция ошибки........................178
              4.24  .ERR1    Симуляция ошибки при первом
                             проходе.................................178
              4.25  .ERR2    Симуляция ошибки при втором
                             проходе.................................179
              4.26  .ERRB    Ошибка, если строка пустая..............179
              4.27  .ERRDEF  Ошибка, если имя определено.............180
              4.28  .ERRDIF  Ошибка, если строки различаются.........180
              4.29  .ERRE    Ошибка, если ложь.......................181
              4.30  .ERRIDN  Ошибка, если строки идентичны...........181
              4.31  .ERRNB   Ошибка, если строка не пустая...........182
              4.32  .ERRNDEF Ошибка, если имя не определено..........182
              4.33  .ERRNZ   Ошибка, если истина.....................182
              4.34  EVEN     Располагает на границе слова............183
              4.35  EXITM    Немедленный выход из макро..............183
              4.36  EXTRN    Описание внешнего имени.................184
              4.37  GROUP    Описание группы сегментов...............184
              4.38  IF       Начало условного блока..................185
              4.39  IF1      Ассемблирование, если первый проход.....186
              4.40  IF2      Ассемблирование, если второй проход.....186
              4.41  IFB      Ассемблирование, если аргумент пустой...187
              4.42  IFDEF    Ассемблирование, если имя определено....187
              4.43  IFDIF    Ассемблирование, если аргументы
                             различны................................188
              4.44  IFE      Ассемблирование, если ложь..............188
              4.45  IFIDN    Ассемблирование, если аргументы
                             совпадают...............................189
              4.46  IFNB     Ассемблирование, если аргумент не пуст..189
              4.47  IFNDEF   Ассемблирование, если имя
                             не определено...........................190
              4.48  INCLUDE  Включение кодов из внешнего файла.......190
              4.49  IRP      Ассемблирование по 1 разу
                             для каждого параметра...................191
              4.50  IRPC     Ассемблирование по 1 разу
                             для каждого символа.....................192


                                     - 11 -
              4.51  LABEL    Создание переменной или метки...........192
              4.52  .LALL    Распечатка всех макрорасширений.........193
              4.53  .LFCOND  Выдача блоков с отрицательными
                             условиями...............................193
              4.54  .LIST    Разрешение выдачи исходных кодов........193
              4.55  LOCAL    Объявление символа для использования
                             в макросе...............................194
              4.56  MACRO    Начало описания макрокоманды............195
              4.57  NAME     Задание имени модуля....................195
              4.58  ORG      Задание счетчика размещения в памяти....196
              4.59  %OUT     Выдача текста при ассемблировании.......196
              4.60  PAGE     Постраничное управление листингом.......196
              4.61  PROC     Начало описания процедуры...............197
              4.62  PUBLIC   Объявление символа доступным для
                             всех модулей............................198
              4.63  PURGE    Удаление описания макроса...............198
              4.64  .RADIX   Установка системы счисления для ввода...199
              4.65  RECORD   Описание типа записи....................200
              4.66  REPT     Начало повторяемого блока...............201
              4.67  .SALL    Подавление листинга всех
                             макрорасширений.........................201
              4.68  SEGMENT  Начало описания сегмента................202
              4.69  .SFCOND  Подавление листинга ложных условий......202
              4.70  STRUC    Определение структурного типа...........203
              4.71  SUBTTL   Описание подзаголовка для листинга......204
              4.72  .XALL    Список макрорасширений,
                             генерирующих коды.......................204
              4.73  .XCREF   Подавление формирования списка
                             перекрестных ссылок.....................204
              4.74  .XLIST   Подавление списка исходных кодов........205
           5. РАБОТА С АССЕМБЛЕРОМ В СРЕДЕ MS DOS....................206
              5.1 Общие сведения.....................................206
                  5.1.1 Карта распределения памяти...................206
                  5.1.2 Загрузочные модули программ..................207
                  5.1.3 Загрузочный модуль типа .EXE.................207
                  5.1.4 Загрузочный модуль типа .COM.................209
                  5.1.5 Префикс программного сегмента PSP............211


                                     - 12 -
                  5.1.6 Основные понятия об организации файловой
                        системы......................................213
              5.2  Прерывания ДОС....................................214
                  5.2.1 Прерывание INT 20h (32)  - завершить прог-
                        рамму........................................214
                  5.2.2 Прерывание INT 22h (34) - адрес завершения...215
                  5.2.3 Прерывание INT 23h (35) - адрес выхода при
                        Ctrl+Break...................................215
                  5.2.4 Прерывание INT 24h (36) - адрес обработчи-
                        ка критических ошибок........................216
                  5.2.5 Прерывание  INT  25h/26h (37/38)  - прямая
                        дисковая операция чтения/записи..............218
                  5.2.6 Прерывание 27h (39)  - завершить программу
                        и оставить ее резидентной....................220
              5.3  Функции ДОС.......................................221
                  5.3.1 Функция 00h (0) Завершение программы.........221
                  5.3.2 Функция 01h (1)  Ввод символа с клавиатуры
                        с эхом.......................................222
                  5.3.3 Функция 02h (2) Вывод символа на дисплей.....223
                  5.3.4 Функция 03h (3)  Ввод символа через комму-
                        никационный канал............................223
                  5.3.5 Функция 04h (4) Вывод символа через комму-
                        никационной канал............................224
                  5.3.6 Функция 05h (5) Вывод символа на печать......225
                  5.3.7 Функция 06h (6) Обмен символами с термина-
                        лом..........................................225
                  5.3.8 Функция 07h (7)  Ввод символа с клавиатуры
                        без эха и без проверки Ctrl-break............226
                  5.3.9 Функция 08h (8)  Ввод символа с клавиатуры
                        без эха с проверкой Ctrl-Break...............227
                  5.3.10 Функция 09h (9)  Вывод строки символов на
                         дисплей.....................................227
                  5.3.11 Функция 0Ah (10)  Ввод строки символоов с
                         клавиатуры с буферизацией...................228
                  5.3.12 Функция  0Bh (11)  Проверка факта ввода с
                         клавиатуры..................................229


                                     - 13 -
                  5.3.13 Функция  0Ch  (12)   Очистка буфера вызов
                         функции ввода с клавиатуры..................230
                  5.3.14 Функция 0Dh (13)  Сброс диска, сохранение
                         буферов файлов..............................230
                  5.3.15 Функция 0h (14)  Назначение текущего дис-
                         ковода......................................231
                  5.3.16 Функция  0Fh  (15)  Открытие файла (с ис-
                         пользованием FCB)...........................231
                  5.3.17 Функция  10h  (16)  Закрытие файла (с ис-
                         пользованием FCB)...........................234
                  5.3.18 Функция  11h  (17)   Поиск  первого имени
                         файла, удовлетворяющего шаблону(с исполь-
                         зованием FCB)...............................234
                  5.3.19 Функция 12h (18)  Продолжение поиска имен
                         файлов, начатого  функцией 11h (с исполь-
                         зованием FCB)...............................235
                  5.3.20 Функция 13h (19)  Удаление файлов с диска
                         (с использованием FCB)......................236
                  5.3.21 Функция 14h (20)  Последовательное чтение
                         из файла (с использованием FCB).............236
                  5.3.22 Функция 15h (21)  Последовательная запись
                         в файл (с использованием FCB)...............237
                  5.3.23 Функция 16h (22) Создание и открытие фай-
                         ла для чтения/записи    (с использованием
                         FCB)........................................238
                  5.3.24 Функция 17h (23)  Переименование файла (с
                         использованием FCB).........................239
                  5.3.25 Функция 19h  (25)   Определение  текущего
                         диска.......................................240
                  5.3.26 Функция 1Ah (26) Установка буфера переда-
                         чи данных (DTA).............................240
                  5.3.28 Функция 1Ch (28) Получение данных об ука-
                         занном дисководе............................242
                  5.3.29 Функция 21h (33)  Чтение с диска с прямым
                         доступом (с использованием FCB).............243
                  5.3.30 Функция 22h (34)  Запись на диск с прямым
                         доступом (с использованием FCB).............244


                                     - 14 -
                  5.3.31 Функция 23h (35)  Выдача длины  файла  (с
                         использованием FCB).........................245
                  5.3.32 Функция 24h (36)  Задание  номера  записи
                         для прямого доступа (с использованием FCB)..246
                  5.3.33 Функция 25h (37) Установка вектора преры-
                         вания.......................................246
                  5.3.34 Функция 26h (38)   Создание  программного
                         сегмента....................................247
                  5.3.35 Функция 27h (39)  Чтение блока  с  прямым
                         доступом (с использованием FCB).............247
                  5.3.36 Функция 28h (40)  Запись блока  с  прямым
                         доступом (с использованием FCB).............249
                  5.3.37 Функция 29h  (41)   Преобразование  имени
                         файла во внутренние параметры блока FCB.....250
                  5.3.38 Функция 2Ah (42) Выдача текущей даты........252
                  5.3.39 Функция 2Bh (43) Установка системной даты...253
                  5.3.40 Функция 2Ch (44)  Выдача текущего времени...253
                  5.3.41 Функция  2Dh  (45)   Установка системного
                         времени.....................................254
                  5.3.42 Функция 2h (46)  Установка/сброс переклю-
                         чателя VERIFY...............................254
                  5.3.43 Функция 2Fh (47) Выдача адреса буфера об-
                         ласти передачи данных DTA...................255
                  5.3.44 Функция 30h (48) Выдача номера версии ДОС...255
                  5.3.45 Функция 31h (49)  Завершить  программу  и
                         оставить ее резидентной в ОЗУ...............256
                  5.3.46 Функция 33h (51)  Проверка или  изменение
                         статуса Ctrl-Break..........................257
                  5.3.47 Функция 35h (53)  Выдача вектора прерыва-
                         ния.........................................257
                  5.3.48 Функция 36h (54) Выдача размера свободно-
                         го пространства на диске....................258
                  5.3.49 Функция 38h (56)  Выдача  форматов  даты,
                         времени, чисел, денежных единиц.............258
                  5.3.50 Функция 39h  (57)   Создание  подкаталога
                         (MKDIR).....................................262


                                     - 15 -
                  5.3.51 Функция 3Ah  (58)   Удаление  подкаталога
                         (RMDIR).....................................263
                  5.3.52 Функция 3Bh (59)  Смена текущего подката-
                         лога (CHDIR)................................264
                  5.3.53 Функция 3Ch (60)  Создание  или  открытие
                         файла.......................................264
                  5.3.54 Функция 3Dh (61)  Открытие  существующего
                         файла.......................................266
                  5.3.55 Функция 3h (62) Закрытие файла..............271
                  5.3.57 Функция 40h (64)  Запись в файл или вывод
                         на устройство...............................273
                  5.3.58 Функция  41h (65)  Удаление файла из ука-
                         занного каталога (UNLINK)...................274
                  5.3.59 Функция 42h (66)  Установка текущей пози-
                         ции (LSEEK).................................275
                  5.3.60 Функция 43h (67) Выдача или установка ат-
                         рибутов файла (CHMOD).......................276
                  5.3.61 Функция 44h (68) Управление вводом/выво-
                         дом на устройствах (IOCTL). Обзор...........278
                       5.3.61.1 Функция 4400h (68-0)  IOCTL: Полу-
                               чение информации об устройстве........280
                       5.3.61.2 Функция 4401h (68-1)  IOCTL: Уста-
                               новка информации для устройства.......281
                       5.3.61.3 Функция 4402h (68-2) IOCTL: Чтение
                               из посимвольного устройства...........282
                       5.3.61.4 Функция 4403h (68-3) IOCTL: Запись
                               в посимвольное устройство.............282
                       5.3.61.5 Функция 4404h (68-4) IOCTL: Чтение
                               из блочного устройства................283
                       5.3.61.6 Функция 4405h (68-5) IOCTL: Запись
                               в блочное устройство..................284
                       5.3.61.7 Функция 4406h (68-6)  IOCTL: Полу-
                               чение состояния ввода.................284
                       5.3.61.8 Функция 4407h (68-7)  IOCTL: Полу-
                               чение состояния вывода................285


                                     - 16 -
                       5.3.61.9 Функция 4408h (68-8) IOCTL: Инфор-
                               мация о сменяемости  носителя  (DOS
                               3.0)..................................285
                       5.3.61.10 Функция 4409h (68-9)  IOCTL:  Ин-
                               формация об логического удаленности
                               устройства............................286
                       5.3.61.11 Функция 440Ah (68-10)  IOCTL: Ин-
                               формация об удаленности устройства,
                               заданного номером (DOS 3.1)...........287
                       5.3.61.12 Функция 440Bh (68-11)  IOCTL: Ус-
                               тановка числа повторов при совмест-
                               ном использовании ресурсов(DOS
                               3.0)..................................287
                       5.3.61.13 Функция 440Dh (68-13)  IOCTL: Об-
                               щий запрос (DOS 3.2)..................288
                       5.3.61.14 Функция 440h (68-14) IOCTL: Полу-
                               чение символа    имени  логического
                               дисковода(DOS 3.2)...................288
                       5.3.61.15 Функция 440Fh (68-15)  IOCTL: Ус-
                               тановка символа логического  диско-
                               вода(DOS 3.2)........................289
                  5.3.62 Функция 45h (69) Дублирование дескриптора
                         файла (DUP).................................290
                  5.3.63 Функция  46h  (70)   Производит  удвоение
                         дескриптора файла (FORCDUP).................291
                  5.3.64 Функция 47h (71) Получение текущего ката-
                         лога........................................292
                  5.3.65 Функция 48h (72) Выделение памяти..........293
                  5.3.66 Функция 49h (73)  Освобождение выделенной
                         памяти......................................293
                  5.3.67 Функция 4Ah (74) Изменение выделенной па-
                         мяти (SETBLOCK).............................294
                  5.3.68 Функция 4Bh (75)  Загрузка или выполнение
                         программы (EXEC)............................295
                  5.3.69 Функция  4Ch  (76)   Завершить выполнение
                         программы (EXIT)............................297


                                     - 17 -
                  5.3.70 Функция 4Dh (77)  Получение кода возврата
                         подпроцесса (WAIT)..........................298
                  5.3.71 Функция 4h (78) Поиск первого подходящего
                         файла (FIND FIRST)..........................298
                  5.3.72 Функция 4Fh (79)  Поиск следующего подхо-
                         дящего файла (FIND NEXT)....................300
                  5.3.73 Функция 54h (84)  Получение статуса флага
                         проверки VERIFY.............................300
                  5.3.74 Функция 56h (86) Переименование файла.......301
                  5.3.75 Функция 57h (87)  Получение или установка
                         даты и времени для файла....................302
                  5.3.76 Функция 59h (89)   Получение  расширенной
                         информации об ошибках (DOS 3.0).............303
                  5.3.77 Функция 5Ah (90)  Создание и открытие но-
                         вого файла (DOS 3.0)........................306
                  5.3.78 Функция 5Bh (91)  Создание  нового  файла
                         (без открытия) DOS 3.0......................307
                  5.3.79 Функция 5Ch (92) Блокировка/разблокировка
                         доступа к файлу (DOS 3.0)...................308
                  5.3.80 Функция 5E0h (94-0) Получение имени маши-
                         ны (DOS 3.1)................................309
                  5.3.81 Функция 5E0h (94-2)  Установка параметров
                         принтера (DOS 3.1)..........................310
                  5.3.82 Функция 5E0h (94-3)  Получениепараметров
                         принтера (DOS 3.1)..........................311
                  5.3.83 Функция 5F02h (95-2)  Получение  входа  в
                         списке переопределений (DOS 3.1)............312
                  5.3.84 Функция 5F03h (95-3) Переопределение уст-
                         ройства (DOS 3.1)...........................313
                  5.3.85 Функция 5F04h (95-4) Отмена переопределе-
                         ний (DOS 3.1)...............................315
                  5.3.86 Функция 62h (98)   Получение  адреса  PSP
                         (префикс программного сегмента) DOS 3.0.....315

           6. БАЗОВАЯ СИСТЕМА ВВОДА/ВЫВОДА BIOS. ПРЕРЫВАНИЯ..........316
              6.1 INT 00h (0) Деление на ноль........................316
              6.2 INT 01h (1) Трассировка............................316


                                     - 18 -
              6.3 INT 02h (2) Немаскированное прерывание.............317
              6.4 INT 03h (3) Контрольная точка......................317
              6.5 INT 04h (4) Переполнение...........................318
              6.6 INT 05h (5) Печать экрана..........................318
              6.7 INT 08h (8) Системный таймер.......................319
              6.8 INT 09h (9) Клавиатура.............................319
              6.9 Прерывание INT 10h (управление экраном)............321
                  6.9.1 INT 10h,  00h (0)  Установка pежима работы
                                  дисплея............................322
                  6.9.2 INT 10h, 01h (1) Установка размера курсора...323
                  6.9.3 INT 10h,  02h (2) Установка положения кур-
                                  сора...............................324
                  6.9.4 INT 10h,  03h (3)  Считывание положения и
                                  размера курсора....................325
                  6.9.5 INT 10h, 04h (4) Считывание положения све-
                                  тового пера........................327
                  6.9.6 INT 10h, 05h (5) Установка текущей страни-
                                  цы дисплея.........................328
                  6.9.7 INT 10h, 06h (6) Прокрутка окна вверх........329
                  6.9.8 INT 10h, 07h (7) Прокрутка окна вниз.........329
                  6.9.9 INT 10h,  08h (8) Считывание символа и ат-
                                  рибута по   месту   расположения
                                  курсора............................330
                  6.9.10 INT 10h, 09h (9) Запись символа и атрибу-
                                  та по месту расположения курсора...331
                  6.9.11 INT 10h, 0Ah (10) Запись символа по месту
                                  расположения курсора...............332
                  6.9.12 INT 10h,  0Bh (11) Установка цветовой па-
                                  литры..............................333
                  6.9.13 INT 10h, 0Ch (12) Запись элемента изобра-
                                  жения (точки)......................334
                  6.9.14 INT 10h,  0Dh (13)   Считывание  элемента
                                  изображения (точки)................335
                  6.9.15 INT 10h,  0h (14)  Запись символа в теле-
                                  тайпном режиме.....................336
                  6.9.16 INT 10h,  0Fh (15) Выдача текущего режима
                                  экрана.............................337


                                     - 19 -
                  6.9.16 INT 10h, 10h (16) Установка регистров па-
                                  литры (PCjr и EGA).................337
                  6.9.18 INT 10h,  11h  (17)   Генератор  символов
                                  (EGA)..............................340
                  6.9.19 INT 10h,  12h (18)  Альтернативный  выбор
                                  (EGA)..............................343
                  6.9.20 INT 10h, 13h (19) Вывод строки символов.....344
                  6.9.21 INT 10h, 14h (20) Обработчик LCD (дисплей
                                  на жидких            кристаллах)
                                  Convertible........................345
                  6.9.22 INT 10h,  15h (21)  Выдача физических ха-
                                  рактеристик дисплея  Convertible...346
              6.10 INT 11h (17) Выдача списка оборудования...........348
              6.11 INT 12h (18) Выдача объема памяти.................349
              6.12 Прерывание INT 13h (поддержка дисковых операций)..350
                  6.12.1 INT 13h, 00h (0) Сброс дисковой системы в
                                  начальное состояние................350
                  6.12.2 INT  13h,  01h (1)  Определение состояния
                                  дисковой системы...................351
                  6.12.3 INT  13h,  02h (2)  Считывание секторов в
                                  память.............................352
                  6.12.4 INT 13h, 03h (3) Запись секторов из памя-
                                  ти.................................355
                  6.12.5 INT 13h, 04h (4) Проверка секторов..........357
                  6.12.6 INT 13h,  05h (5) Форматирование цилиндра...358
                  6.12.7 INT 13h, 06h (6) Форматирование дорожки и
                                  установление признаков    плохих
                                  секторов (винчестер)...............361
                  6.12.8 INT 13h,  07h (7)  Форматирование  диска,
                                  начиная с цилиндра (винчестер).....362
                  6.12.9 INT 13h,  08h (8) Взять текущие параметры
                                  дисковода (винчестер)..............363
                  6.12.10 INT 13h,  09h (9)  Инициализация  таблиц
                                  винчестера.........................365
                  6.12.11 INT 13h,  0Ah (10)   Длинное  считывание
                                  (диагностика)......................366
                  6.12.12 INT 13h,  0Bh (11) Длинная запись (диаг-
                                  ностика)...........................368


                                     - 20 -
                  6.12.13 INT 13h,  0Ch (12)  Поиск цилиндра (вин-
                                  честер)............................369
                  6.12.14 INT 13h,  0Dh (13)  Альтернативный сброс
                                  диска (винчестер)..................370
                  6.12.15 INT 13h,  10h (16)  Проверка  готовности
                                  диска (винчестер)..................371
                  6.12.16 INT 13h,  11h (17) Перекалибровка диско-
                                  вода (винчестер)...................371
                  6.12.17 INT 13h, 15h (21) Считывание DASD-типа.....372
                  6.12.18 INT 13h,  16h (22) Статус смены носителя...373
                  6.12.19 INT 13h, 17h (23) Установление DASD-типа
                                  для форматирования.................374
                  6.12.20 INT 13h, 18h(24) Установление типа носи-
                                  теля для форматирования............375
              6.13 Прерывание INT 14h  (поддержка   последователь-
                                  ного порта)........................377
                  6.13.1 INT 14h,  00h (00) Инициализация парамет-
                                  ров последовательного порта........377
                  6.13.2 INT 14h, 01h (1) Засылка одного символа.....377
                  6.13.4 INT 14h, 03h (3) Состояние последователь-
                                  ного порта.........................378
              6.14 Прерывание INT 15h (расширенный сервис AT)........378
                  6.14.1 INT 15h,  40h (64) Считывание/модификация
                                  профиля (для Convertible)..........380
                  6.14.2 INT 15h, 41h (65) Ожидание внешнего собы-
                                  тия (для Convertible)..............382
                  6.14.3 INT 15h, 42h (66) Запрос отключения пита-
                                  ния системы (для Convertible)......383
                  6.14.4 INT  15h,  43h (67)  Считывание состояния
                                  системы (для Convertible)..........384
                  6.14.5 INT  15h,  44h (68)  Включение/выключение
                                  модема (для Convertible)...........385
                  6.14.6 INT 15h, 4Fh (79) Перехват клавиатуры.......386
                  6.14.7 INT 15h, 80h (128) Устройство открыто.......386
                  6.14.8 INT 15h, 81h (129) Устройство закрыто.......387


                                     - 21 -
                  6.14.9 INT 15h, 82h (130) Прекращение работы ус-
                                  тройства...........................388
                  6.14.10 INT 15h, 83h (131) Ожидание события........388
                  6.14.11 INT 15h,  84h (132) Поддержка координат-
                                  ной ручки (джойстик)...............389
                  6.14.12 INT 15h,  85h (133) Нажат системный зап-
                                  рос................................390
                  6.14.13 INT 15h,  86h (134) Ожидание для XT и AT...391
                  6.14.14 INT 15h, 87h (135) перемещение блока для
                                  XT-286,AT..........................391
                  6.14.15 INT 15h,  88h (136) выборка размера рас-
                                  ширенной памяти для XT-286,AT......394
                  6.14.16 INT 15h,  89h (137) переключение в защи-
                                  щенный режим для XT-286,AT.........394
                  6.14.17 INT 15h, 90h (138) Устройство занято.......396
                  6.14.18 INT 15h,  91h (139) Прерывание закончено...397
                  6.14.19 INT 15h,  C0h (192) Возврат конфигурации
                                  системы............................398
              6.15 Прерывание INT 16h (поддержка клавиатуры).........400
                  6.15.1 INT 16h, 00h (0) считывание клавиатуры......400
                  6.15.2 INT 16h, 01h (1) Состояние клавиатуры.......401
                  6.15.3 INT 16h, 02h (2) Выборка состояния сдвига...401
                  6.15.4 INT 16h,  03h (3) Установка скорости пов-
                                  торения для PCjr,XT-286,AT.........402
                  6.15.5 INT 16h, 04h (4) Настройка щелчка клавиа-
                                  туры (для PCjr, Convertible).......404
                  6.15.6 INT 16h, 05h (5) Запись в буфер клавиату-
                                  ры.................................404
                  6.15.7 INT 16h,  10h (16) расширенное считывание
                                  клавиатуры.........................405
                  6.15.8 INT 16h,  11h (17)  Расширенное состояние
                                  клавиатуры.........................406
                  6.15.9 INT 16h,  12h (18)  Выборка  расширенного
                                  состояния сдвига...................406
              6.16 Прерывание INT 17h (поддержка принтера)...........408
                  6.16.1 INT 17h,  00h (0) Засылка одного байта на
                                  принтер............................408


                                     - 22 -
                  6.16.1 INT 17h,  00h (0) Засылка одного байта на
                                  принтер............................408
                  6.16.2 INT 17h, 01h (1) Инициализация принтера.....408
                  6.16.3 INT 17h,  02h (2) Выборка состояния прин-
                                  тера...............................408
              6.17 INT 18h (24) Загрузка БЕЙСИКа.....................409
              6.18 INT 19h (25) Функция начальной загpузки...........409
              6.19 Прерывание INT 1Ah (операции даты/времени)........411
                  6.19.1 INT 1Ah,  00h (0)  Считывание времени  по
                                  системному таймеру.................411
                  6.19.2 INT 1Ah,  01h (1)  Установка  времени  по
                                  системному таймеру.................412
                  6.19.3 INT 1Ah,  02h (2)  Считывание времени  по
                                  часам реального времени............413
                  6.19.4 INT 1Ah, 03h (3) Установка времени на ча-
                                  сах реального времени..............414
                  6.19.5 INT 1Ah, 04h (4) Считывание даты по часам
                                  реального времени..................415
                  6.19.6 INT 1Ah,  05h (5) Установка даты на часах
                                  реального времени..................416
                  6.19.7 INT 1Ah, 06h (6) Установка сигнала на ча-
                                  сах реального времени..............417
                  6.19.8 INT 1Ah,  07h (7)  Сброс сигнала на часах
                                  реального времени..................418
                  6.19.9 INT 1Ah, 08h (8) Установка режима включе-
                                  ния в сеть по часам................419
                  6.19.10 INT 1Ah,  09h (9) Чтение времени сигнала
                                  и его статуса......................419
                  6.19.11 INT 1Ah,  0Ah (10) Чтение значения счет-
                                  чика дней  по системному таймеру...420
                  6.19.12 INT 1Ah,  0Вh (11)   Установка  счетчика
                                  дней для системного таймера........421
                  6.19.13 INT 1Ah,  80h (128)  Установка звукового
                                  мультиплексора.....................421


                                     - 23 -
              6.20 INT 1Bh (27) Сброс с клавиатуры...................422
              6.21 INT 1Ch (28) Квант таймера........................422
              6.22 INT 4Ah (74)  Сигнал пользователю (XT-286,  AT,
                                 Convertible)........................423
              6.23 INT  70h (112)  Часы реального времени (XT-286,
                                   AT, Convertible)..................423
           7. ОБЛАСТЬ ДАННЫХ MS DOS..................................425
              7.1. RAM-BIOS (ОЗУ)....................................425
                   7.1.1 0:400h Базовые адреса последовательного
                                коммуникационного порта RS-232.......425
                   7.1.2 0:408h Базовые адреса параллельного порта
                                принтера.............................425
                   7.1.3 0:410h Список оборудования..................426
                   7.1.4 0:412h Зарезервировано (Для PC Convertible -
                                статус POST).........................427
                   7.1.5 0:413h Объем памяти.........................427
                   7.1.6 0:415h Зарезервировано (Для PC Convertible -
                                состояние батареи)...................428
                   7.1.7 0:417h Состояние сдвига (Shift).............428
                   7.1.8 0:418h Состояние расширенного сдвига........429
                   7.1.9 0:419h Альтернативный ввод через цифровую
                                клавиатуру...........................429
                   7.1.10 0:41Ah Указатель на начало буфера клави-
                                 атуры...............................430
                   7.1.11 0:41Ch Указатель на конец буфера клавиа-
                                 туры................................430
                   7.1.12   0:41Eh   Буфер клавиатуры................430
                   7.1.13 0:43Eh Состояние перекалибровки дисковода..430
                   7.1.14 0:43Fh Состояние мотора дисковода..........431
                   7.1.15 0:440h Счетчик выключения мотора...........432
                   7.1.16 0:441h Статус последней операции диско-
                                 вода................................433
                   7.1.17 0:442h Информация о состоянии контролле-
                                 ра дисковода........................433
                   7.1.18 0:449h Режим дисплея.......................434
                   7.1.19 0:44Ah Число колонок текущего режима.......434
                   7.1.20 0:44Ch Длина буфера регенерации изобра-
                                 жения...............................434


                                     - 24 -
                   7.1.21 0:44h Начальный адрес буфера регенерации...435
                   7.1.22 0:450h Позиция курсора (колонка, строка)
                                 для страниц дисплея.................435
                   7.1.23 0:460h Конечная и начальная строки  раз-
                                 вертки курсора......................436
                   7.1.24 0:462h Текущая страница дисплея............436
                   7.1.25 0:463h Базовый адрес контроллера CRT.......436
                   7.1.26 0:465h Текущее содержимое  регистра  уп-
                                 равления режимом....................437
                   7.1.27 0:466h Текущее содержимое регистра выбо-
                                 ра цвета (порт 3х9h)................437
                   7.1.28 0:467h Зарезервирован......................437
                   7.1.29 0:46Ch    Длинное   целое,    содержащее
                                 значение счетчика таймера...........438
                   7.1.30 0:470h Признак переполнения таймера........438
                   7.1.31 0:471h Состояние клавиши сброса  (Break)...439
                   7.1.32 0:472h Признак состояния сброса............439
                   7.1.33 0:474h Статус  последней  операции  над
                                 жестким диском......................440
                   7.1.34 0:475h Число жестких дисков................441
                   7.1.35 0:476h Зарезервирован......................441
                   7.1.36 0:477h Зарезервирован......................441
                   7.1.37 0:478h Значение времени ожидания для па-
                                 раллельных принтеров................441
                   7.1.38 0:47Сh Значения    текущего   времени
                                 тайм-аута...........................442
                   7.1.39 0:480h  Указатель на смещение начала бу-
                                 фера клавиатуры.....................442
                   7.1.40 0:482h Указатель на смещение конца буфе-
                                 ра клавиатуры.......................443
                   7.1.41 0:484h Число строк дисплея минус 1.........443
                   7.1.42 0:485h Высота символа......................443
                   7.1.43 0:487h Состояние управлениея дисплеем......443
                   7.1.44 0:489h Зарезервирован......................444
                   7.1.45 0:48Bh Управление средой дисковода.........444
                   7.1.46 0:48Сh Статус контроллера жесткого диска...444


                                     - 25 -
                   7.1.47 0:48Dh Статус ошибки контроллера жестко-
                                 го диска............................445
                   7.1.48 0:48Eh Управление  прерыванием  жесткого
                                 диска...............................445
                   7.1.49 0:48Fh Зарезервирован......................445
                   7.1.50 0:490h Состояние среды 0-го дисковода......445
                   7.1.51 0:491h Состояние среды 1-го дисковода......446
                   7.1.52 0:492h Зарезервирован......................447
                   7.1.53 0:494h Текущая дорожка 0-го дисковода......447
                   7.1.54 0:495h Текущая дорожка 1-го дисковода......447
                   7.1.55 0:496h Состояние  клавиатуры и признаки
                                 типа................................447
                   7.1.56 0:497h Состояние  световых  индикаторов
                                 клавиатуры..........................448
                   7.1.57 0:498h 4-х байтный указатель на признак
                                 завершения ожидания  пользователя...448
                   7.1.58 0:49Сh Длинное целое - счетчик ожидания
                                 пользователя........................449
                   7.1.59 0:4A0h Активный признак ожидания...........449
                   7.1.60 0:4A1h Зарезервирован......................449
                   7.1.61 0:4A8h 4-х  байтовый указатель на пара-
                                 метры дисплея для EGA...............450
                   7.1.62 0:4AСh Зарезервирован......................452
                   7.1.63 0:4F0h Внутренняя  область  для  связей
                                 приклад ных программ................452
                   7.1.64 0:500h Байт состояния печати экрана........452
                   7.1.65 0:501h Зарезервирован......................453
                   7.1.66 0:504h Признак имитации дисковода..........453
                   7.1.67 0:505h Зарезервирован......................453
               7.2 Некоторые специальные точки ROM-BIOS (ПЗУ)........454
                   7.2.1 F000:FFF0h  Длинный переход (FAR JMP)  на
                                     начало программы POST...........454
                   7.2.2 F000:FFF5h  Дата  версии ПЗУ BIOS в ASCII
                                     кодах...........................454
                   7.2.3 F000:FFFCh Зарезервирован...................455
                   7.2.4 F000:FFFЕh Идентификатор (ID) модели сис-
                                    темы.............................455
              СПИСОК ЛИТЕРАТУРЫ......................................456
Используются технологии uCoz