Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать

79

О десский национальный морской университет

Кафедра информационных технологий

А. Д. Бодарев,

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ

НА ЯЗЫКЕ АССЕМБЛЕРА

Методическое пособие

по теме

«ПРОГРАММИРОВАНИЕ ДЛЯ DOS»

Одесса 2010

СОДЕРЖАНИЕ

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ 1

Методическое пособие 1

Одесса 2010 2

ВВЕДЕНИЕ 8

1. Основы программирования для dos 9

1.1. Структура и выполнение программ в DOS 9

1.1.1. Программа типа СОМ 10

1.1.2. Программа типа ЕХЕ 12

1.2. Использование служебных функций DOS и BIOS 13

1.3. Вывод на экран в текстовом режиме 14

1.1.3. Средства DOS 14

Функция DOS 02h — Записать символ в STDOUT с проверкой на Ctrl-Break 14

Функция DOS 06h — Записать символ в STDOUT без проверки на Ctrl-Break 14

Функция DOS 09hЗаписать строку в STDOUT с проверкой на Ctrl-Break 15

Функция DOS 40h Записать строку в файл или устройство 15

INT 29hБыстрый вывод символа на экран 15

1.1.4. Средства BIOS 16

INT 10h, АН = 4Fh, AL = 2Установить SuperVGA-видеорежим 16

Ввод: ВХ — номер режима в младших 13 битах 16

INT 10h, АН = 2Установить положение курсора 16

Ввод: АН = 2 16

INT 10h, АН = 3Считать положение и размер курсора 17

Ввод: АН = 3 17

Таблица 1. Атрибуты символов 17

INT 10h, АН = 8 — Считать символ и атрибут символа в текущей позиции курсора 17

INT 10h, АН = 9Вывести символ с заданным атрибутом на экран 17

INT 10h, АН = 0AhВывести символ с текущим атрибутом на экран 18

INT 10h, АН = 0EhВывести символ в режиме телетайпа 18

Ввод: АН = 0Eh 18

INT 10h, АН = 13h — Вывести строку символов с заданными атрибутами 18

Ввод: АН = 13h 18

1.1.5. Прямая работа с видеопамятью 18

1.4. Ввод с клавиатуры 19

1.1.6. Средства DOS 19

Функция DOS 0AhСчитать строку символов из STDIN в буфер 19

Функция DOS 0BhПроверить состояние клавиатуры 20

Функция DOS 0Сh — Очистить буфер и считать символ 20

Таблица 2. Некоторые расширенные коды ASCII 20

1.1.7. Средства bios 21

INT 16h, АН = 0, 10h, 20hЧтение символа с клавиатуры с ожиданием 21

INT 16h, АН = 1, 11h, 21hПроверка символа 21

INT 16h, АН = 05h — Поместить символ в буфер клавиатуры 21

Ввод: АН = 05h 21

INT 16h, АН = 02h, 12h, 22h — Считать состояние (флаги) клавиатуры 22

1.5. Графические видеорежимы 23

1.1.8. Работа со стандартными графическими режимами 23

INT 10h, АН = 0Ch Вывести точку на экран 23

Ввод: АН = 0Сh 23

Таблица 3. Основные графические режимы 24

INT 10h, АН = 0DhСчитать точку с экрана 24

Ввод: АН = 0Dh 24

1.1.9. Работа с SVGA-режимами 25

Таблица 4. Графические режимы SVGA 26

INT 10h АН = 4Fh, AL = 0 Получить общую SVGA-информацию 26

Ввод: AX = 4F00h 27

INT 10h АН = 4Fh, AL = 01 Получить информацию о режиме 27

Ввод: AX = 4F01h 27

INT 10h АН = 4Fh, AL = 02 Установить режим 27

Ввод: AX = 4F02h 27

INT 10h АН = 4Fh, AL = 03 — Узнать номер текущего видеорежима 28

Ввод: AX = 4F03h 28

INT 10h АН = 4Fh AL = 05 Перемещение окна (переключение банка ви­деопамяти) 28

Ввод: AX = 4F05h 28

INT 10h, АН = 4Fh, AL = 07 Установка начала изображения 28

Ввод: АХ = 4F07h 28

1.6. Работа с мышью 28

INT 33h, AX = 0 Инициализация мыши 28

Ввод: AX = 0000h 28

Выполняется аппаратный и программный сброс мыши и драйвера. 28

INT 33h, АХ = 1 Показать курсор 29

Ввод: АХ = 0001h 29

INT 33h, АХ = 2 Спрятать курсор 29

Ввод: АХ = 0002h 29

INT 33h, AX = 3 Определить состояние мыши 29

Ввод: AX = 0000h 29

INT 33h, AX = 0Ch Установить обработчик событий 29

Ввод: AX = 000Ch 29

1.7. Другие устройства 30

1.1.10. Системный таймер 30

Функция DOS 2AhОпределить дату 30

Ввод: АН = 2Ah 30

Функция DOS 2Ch — Определить время 30

Ввод: АН = 2Ch 30

Функция DOS 2BhУстановить дату 30

Ввод: АН = 2Bh 30

Функция DOS 2Dh — Установить время 30

Ввод: АН = 2Dh 30

INT 1Ah, АН — 04h — Определить дату RTC 31

Ввод: АН = 04h 31

INT 1Ah, АН = 02h — Определить время RTC 31

Ввод: АН = 02h 31

INT 1Ah, АН = 05h — Установить дату RTC 31

Ввод: АН = 05h 31

INT 1Ah, АН = 03h — Установить время RTC 31

Ввод: АН = 03h 31

INT 1Ah, АН = 06h — Установить будильник 31

Ввод: АН = 06h 31

INT 1Ah, АН = 07 — Отменить будильник 31

Ввод: АН = 07h 31

INT 1Ah, АН = 00h — Считать значение счетчика времени 32

Ввод: АН = 00h 32

INT 1Ah, АН = 01h — Изменить значение счетчика времени 32

Ввод: АН = 01h 32

INT 15h, АН = 86h — Формирование задержки 32

Ввод: АН = 86h 32

INT 15h, АН = 83h Запуск счетчика времени 32

Ввод: АН = 83h 32

1.1.11. Последовательный порт 32

Функция DOS 03h Считать байт из STDAUX 32

Функция DOS 04h — Записать байт в STDAUX 32

INT 14h, АН = 04 Инициализация FOSSIL-драйвера 33

Ввод: АН = 04h 33

INT 14h, АН = 05h Деинициализация FOSSIL-драйвера 33

Ввод: АН = 05 33

INT 14h, АН = 00 — Инициализация последовательного порта 33

Ввод: АН = 00h 33

INT 14h, АН =01 — Запись символа в последовательный порт 34

Ввод: АН = 01h 34

INТ 14h, АН = 02 — Чтение символа из последовательного порта с ожиданием 34

INT 14h, АН = 03h — Получить текущее состояние порта 34

Ввод: АН = 03h 34

1.1.12. Параллельный порт 34

Функция DOS 05h — Вывод символа в стандартное устройство PRN 34

INT 17h, АН = 00 Вывести символ на принтер 34

Ввод: АН = 00h 34

INT 17h, АН = 01 — Выполнить аппаратный сброс принтера 34

Ввод: АН = 01h 34

INT 17h, АН = 02 — Получить состояние принтеров 34

Ввод: АН = 02h 34

1.8. Работа с файлами 35

1.1.13. Создание и открытие файлов 36

Функция DOS 3Ch — Создать файл 36

Ввод: АН = 3Ch 36

Таблица 5. Коды и описания ошибок DOS 38

Функция DOS 3Dh Открыть существующий файл 38

DS:DX = адрес ASCIZ-строки с полным именем файла 38

Функция DOS 5Bh — Создать новый файл 38

Функция DOS 5Ah Создать временный файл 39

Функция LFN 6Ch — Создать или открыть файл с длинным именем 39

DS:SI = адрес ASCIZ-строки с именем файла 39

1.1.14. Чтение из файла и запись в файл 40

Функция DOS 3Fh — Чтение из файла или устройства 40

Функция DOS 42h Переместить указатель чтения/записи 40

Функция DOS 40h — Запись в файл или устройство 40

Функция DOS 68h Сброс файловых буферов DOS на диск 41

Функция DOS 0Dh Сброс всех файловых буферов на диск 41

1.1.15. Закрытие и удаление файла 41

Функция DOS 3Eh — Закрыть файл 41

Ввод: АН = 3Eh 41

Функция DOS 41h — Удаление файла 41

Ввод: АН = 41h 41

Функция LFN 41h — Удаление файлов с длинными именами 41

1.1.16. Поиск файлов 42

Функция DOS 1Ah Установить область DTA 43

Функция DOS 4Fh Найти следующий файл 44

Функция LFN 4Eh Найти первый файл с длинным именем 44

Функция LFN 4Fh Найти следующий файл 44

Функция LFN A1h Закончить поиск файла 45

Ввод: AX = 71Alh 45

1.1.17. Управление файловой системой 45

Функция DOS 39h Создать каталог 45

Ввод: АН = 39h 45

Функция LFN 39h Создать каталог с длинным именем 45

Функция DOS 3Ah — Удалить каталог 45

Ввод: АН = 3Ah 45

Функция LFN 3Ah — Удалить каталог с длинным именем 45

Функция DOS 47h Определить текущий каталог 45

Функция LFN 47h — Определить текущий каталог с длинным именем 46

Функция DOS 3Bh Сменить текущий каталог 46

Функция LFN 3Вh — Сменить каталог с длинным именем 46

Функция LFN A0h Получить информацию о разделе файловой системы VFAT 46

1.9. Управление памятью 46

1.1.18. Обычная память 47

Функция DOS 48h — Выделить память 47

Ввод: АН = 48h 47

Функция DOS 49h — Освободить память 47

Ввод: АН = 49h 47

Процесс может освобождать только те блоки памяти, для которых он является владельцем. 47

Функция DOS 4Ah — Изменить размер блока памяти 47

1.1.19. Область памяти UMВ 48

Функция DOS 58h — Считать/изменить стратегию выделения памяти 48

1.1.20. Область памяти НМА 49

1.1.21. Интерфейс EMS 49

INT 67h, АН = 46h Получить номер версии 50

Ввод: АН = 46h 50

INT 67h, АН = 41h Получить сегментный адрес окна 50

Ввод: АН = 41h 50

INT 67h, АН = 42h Получить объем памяти 50

Ввод: АН = 42h 50

INT 67h, АН = 43h — Выделить идентификатор и EMS-память 50

Ввод: АН = 43h 50

INT 67h, АН = 44h — Отобразить память 50

Ввод: АН = 44h 50

INT 67h, АН = 45h — Освободить идентификатор и EMS-память 50

Ввод: АН = 45h 50

1.1.22. Интерфейс XMS 51

INT 2Fh, AH=43h — XMS- и DPMS-сервисы 51

Ввод: AX = 4300h: проверить наличие XMS 51

Функция XMS 00h — Определить номер версии 51

Функция XMS 08h — Определить объем памяти 51

Функция XMS 88h — Определить объем памяти 51

Функция XMS 09h — Выделить память 51

Ввод: АН = 09h 51

Функция XMS 0Ah — Освободить память 51

Ввод: АН = 0Ah 52

Функция XMS 0Bh — Пересылка данных 52

Ввод: АН = 0Bh 52

Функция XMS 0Fh — Изменить размер XMS-блока 52

1.10. Организация процессов 52

1.1.23. Запуск программ на выполнение 52

Функция DOS 4Bh — Загрузить и выполнить программу 54

+02h: 4 байта — адрес командной строки для нового процесса 55

+0Ah: 4 байта — адрес второго FCB для нового процесса 55

AL = 03h — загрузить как оверлей 55

+00h: слово — сегментный адрес для загрузки оверлея 55

+00h: слово — 00h 55

+08h: слово — сегментный адрес PSP новой программы 55

+0Eh: 4 байта — размер программы, включая PSP 55

Функция DOS 4Ch — Завершить программу 56

Ввод: АН = 4Ch 56

Функция DOS 4Dh Определить код возврата последнего завершившего­ся процесса 56

1.1.24. Переменные окружения 56

1.1.25. Командные параметры 56

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]