Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

Применение процедуры MsDos

              Процедура MsDos  осуществляет  прерывание  2In для доступа к
         одной из функций операционной системы высокого  уровня. Обращение
         к этой процедуре имеет следующий общий вид:
              MsDos(регистры); где "регистры"  представляет  собой  запись
         типа  "registrs",  которая определяется в блоке ДОС.  Регистровый
         тип определяется следующим образом:
              regisrers = record
                Case integer of
                  0: (AX, BX, CX, DX, BP, SI, DI,
                      DS, ES, FLAGS: word);
                  1: (AL, AH,BL, BH, CL, CH, DL, DH: byte);
              end;
              Такое определение  позволяет  вам  смешивать  значения  типа
         "байт"  и "слово".  В каждой конкретной ситуации вы должны решить
         какой тип подходит лучше.
              Приводимые ниже в этой главе примеры отчасти дублируют стан-
         дартные процедуры, которые уже реализованы в Турбо Паскале. Такой
         выбор  сделан  по трем причинам.  Во-первых,  Турбо Паскаль имеет
         почти все,  что требуется в большинстве случаях. Вовторых, требу-
         ется возможно полнее проиллюстрировать принципы построения интер-
         фейса,  чтобы можно было их  применить  в  конкретных  ситуациях.
         В-третьих,  приводимые  примеры в некоторой мере проясняют способ
         реализации процедур и функций в Турбо Паскале.
              Ниже приводится простой пример.  Эта функция определяет было
         ли нажатие клавиши.  Она аналогична функции "keyressed", встроен-
         ной  в  язык Турбо Паскаль.  Результат этой функции "KbHrt" будет
         "истина",  если нажата некоторая клавиша,  или "ложь" в противном
         случае. Она использует прерывание 21n с шестнадцатиричным номером
         $B.  Следует помнить,  что перед шестнадцатиричным числом  должен
         стоять валютный знак, который для компилятора является указателем
         шестнадцатиричного числа.  Сама программа будет выводить на экран
         точки до тех пор, пока не будет нажата какая-нибудь клавиша:
            { демонстрация процедуры  MsDos }
             program kb;

             uses Dos;

             function KbHit:boolean; { функция  специфична  для DOS }
             var
               regs: registers;
             begin
               regs.AY:=SB;
               MsDos(regs);
               if regs.AL=0 then KbHit:=FALSE
               else KbHit:=TRUE;              end;

             begin
               repeat
                 Write('.');
               until KbHit;
             end.

              Следует отметить,  что в этом вызове нет необходимости зада-
         вать  значения  остальным  регистрам,  поскольку  здесь требуется
         функция с единственным номером $B.  В общем случае если  какой-то
         регистр не используется при вызове,  то его значение может не ус-
         танавливаться.

           Таблица 1
             Системные подпрограммы, вызываемые посредством прерываний
         ----------------------------------------------------------------
         Регистр АН                     Функция
         ----------------------------------------------------------------
             Функции ввода-вывода на дисплей - прерывание 10h

             0         Установка режима экрана
                        Если AL=0: 40х25 черно-белый;
                                1: 40х25 цветной;
                                2: 80х25 черно-белый;
                                3: 80х25 цветной;
                                4: 320х200 цветной графический;
                                5: 320х200 черно-белый графический;
                                6: 340х200 черно-белый графический
             1         Установка строк курсора
                        Биты 0-4 СН содержат начало строки,
                        биты 5-7 нулевые;
                        биты 0-4 CL содержат конец строки,
                        биты 5-7 нулевые
             2         Установка позиции курсора
                        DH: строка,
                        DL: столбец,
                        ВН: номер страницы экрана
             3         Читать позицию курсора
                        ВН: номер страницы экрана
                       Результат:
                        DH: строка,
                        DL: столбец,
                        СХ: режим
             4         Читать позицию светового пера
                       Результат:
                        если АН=0, то световое перо не инициировано;
                        если АН=1, то световое перо инициировано;
                        DH: строка,
                        DL: столбец,
                        СН: строка растра (0-199)
                        ВХ: столбец элемента изображения (0-319 или
                                                          0-639)
             5         Установка активной страницы экрана
                        AL может принимать значение от 0 до 7

             Функции ввода-вывода на дисплей - прерывание 10h

             6         Просмотр страницы вверх
                        AL: число сдвигаемых строк (от нуля до всех)
                        СН: строка верхнего левого угла,
                        CL: столбец верхнего левого угла,
                                     DH: строка нижнего правого угла,
                        DL: столбец нижнего правого угла,
                        ВН: атрибуты пустой строки
             7         Просмотр страницы вниз
                        см. предыдущую функцию
             8         Чтение символа в позиции курсора
                        ВН: страница экрана,
                       Результат:
                        AL: считанный символ,
                        АН: атрибут
             9         Записать символ и атрибут в позицию курсора
                        ВН: страница экрана,
                        BL: атрибут,
                        СХ: число символов записи,
                        AL: символ
            10         Записать символ в текущей позиции курсора
                        ВН: страница курсора,
                        СХ: число символов записи,
                        AL: символ
            11          Установить палитру цвета
                         ВН: номер палитры,
                         BL: цвет
            12          Записать точку
                         DX: номер строки,
                         СХ: номер столбца,
                         AL: цвет
            13          Читать точку
                         DX: номер строки,
                         СХ: номер столбца
                        Результат:
                         AL: считанная точка
            14          Записать символ на экран и продвинуть курсор
                         AL: символ,
                         BL: цвет,
                         ВН: страница экрана
            15          Читать состояние экрана
                        Результат:
                         AL: текущий режим,
                         АН: число столбцов на экране,
                         ВН: текущая активная страница экрана

             Список оборудования - прерывание 11h

                        Читать список оборудования
                        Результат:
                         АХ: список установленного оборудования:
                          бит 0: имеется одна из дискет,
                          бит 1: не используется,

                          бит 2,3: ЗУ системной платы, 11=64К,
                          бит 4,5: начальный режим экрана:
                           10: 80 столбцов, цветной,
                           11: монохромный,
                           01: 40 столбцов, цветной,
                          бит 6,7: число дисковых накопителей, 0=1
                          бит 8: установка микросхемы прямого доступа в
                                 память, 0 - установлена
                          бит 9,10,11: число портов интерфейса RS-232
                          бит 12: 1 - установлен игровой адаптер,
                          бит 13: 1 - последовательное печатающее
                                      устройство /только типа PCir/
                          бит 14,15: число печатающих устройств

             Размер памяти - прерывание 12h

                         Результат представляет собой число килобайт
                         оперативной памяти, имеющейся в системе
                         Результат:
                          АХ: число килобайт ОЗУ

             Функции ввода-вывода на диск - прерывание 13h

             0           Сброс дисковой системы
             1           Чтение состояния диска
                         Результат:
                          AL: состояние/см.техническое справочное
                              руководство фирмы ИБМ/
             2           Чтение секторов в память
                          DL: номер драйвера,
                          DH: номер головки,
                          СН: номер дорожки,
                          CL: номер сектора,
                          AL: число считываемых секторов,
                          ES:BX: адрес буфера
                         Результат:
                          AL: число считанных секторов,
                          АН: нуль при успешном чтении, в противном
                              случае выдается состояние
             3           Запись секторов на диск
                          /как для операции чтения/
             4           Проверить
                          /как для операции чтения/
             5           Формат дорожки
                          DL: номер драйвера,
                          DH: номер головки,
                          СН: номер дорожки,
                          EL:BX: информация сектора 

             Функции ввода-вывода посредством клавиатуры - прерывание 16h

             0           Чтение кода сканирования
                         Результат:
                          АН: код сканирования,
                          AL: код символа
             1           Получить состояние буфера
                         Результат:
                          ZE: 1 при пустом буфере,
                              0 при наличии символов и следующим
                              символом в регистре АХ
             2           Получить состояние клавиатуры
                         (см.техническое справочное руководство
                          фирмы IBM)

             Функции ввода-вывода на печатающее устройство - прерывание
                                  17h

             0           Печатать символ
                          AL: символ,
                          DX: номер печатающего устройства
                         Результат:
                          АН: состояние
             1           Инициализировать печатающее устройство
                          DX: номер печатающего устройства
                         Результат:
                          АН: состояние
             2           Читать состояние
                          DX: номер печатающего устройства
                         Результат:
                          АН: состояние

             Функции ДОС высокого уровня - прерывание 21h (неполный
                               список)

             1           Чтение символа с клавиатуры
                         Результат:
                          AL: символ
             2           Вывод символа на экран
                          DL: символ
             3           Чтение символа с асинхронного порта
                         Результат:
                          AL: символ
             4           Запись символа по асинхронному порту
                          DL: символ
             5           Выдать символ на устройство из списка
                          DL: символ 
             7           Чтение символа с клавиатуры без вывода на экран
                         Результат:
                          AL: символ
             В           Проверить состояние клавиатуры
                         Результат:
                          AL: OFFH при нажатии клавиши; 0 в противном
                              случае
             D           Сбросить диск
             E           Установить стандартный драйвер
                          DL: номер драйвера /0-А, 1-В,.../
            11           Поиск имени файла
            /4Е под 2.х/  DX: адрес блока FCB

             Функции ввода-вывода на экран - прерывание 10h

                         Результат:
                          AL: 0, если найден, FFh, если не найден
            12           Найти следующее имя файла
            /4F под 2.х/  /как в предыдущем случае/
            1А           Установить адрес передачи диска
                          DX: адрес передачи диска
            2А           Получить дату системы
                         Результат:
                          СХ: год /1980-2099/,
                          DX: месяц /1-12/,
                          DL: день /1-31/
            2В           Установить системную дату
                          СХ: год /1980-2099/,
                          DH: месяц /1-12/,
                          DL: день /1-31/
            2С           Получить системное время
                         Результат:
                          СН: часы /0-23/,
                          CL: минуты /0-59/,
                          DH: секунды /0-59/,
                          DL: сотые секунды /0-99/
            2D           Установить системное время
                          СН: часы /0-23/,
                          CL: минуты /0-59/,
                          DH: секунды /0-59/,
                          DL: сотые секунды /0-99/
         ---------------------------------------------------------------

(с)Все права защищены

По всем интересующим вопросампрошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz