О Г Л А В Л Е Н И Е
ВВЕДЕНИЕ.................................................. 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