Энциклопедия Turbo Pascal. Главы 1-4
Страница 58. Использование функций базовой системы ввода-вывода и ДОС


Использование функций базовой системы ввода-вывода и ДОС

     В некоторых  случаях  желательно иметь возможность использо-
вать внешние программы,  написанные на ассемблере,  для доступа к
системным функциям. Рассмотрим несколько примеров. Пусть во время
работы программы требуется изменить режим экрана. Ниже приводятся
семь режимов экрана при использовании цветного графического адап-
тера в операционной среде PC-DOS:

Режим Тип            Размеры            Адаптеры

0     Текст, черно-  40 х 25            CGA, EGA
      белый

1     Текст, 16      40 х 25            CGA, EGA
      цветов

2     Текст, черно-  80 х 25            CGA, EGA
      белый

3     Текст, 16      80 х 25            CGA, EGA
      цветов

4     Графика, 4     320 х 200          CGA, EGA
      цвета

5     Графика, 4     320 х 200          CGA, EGA
      черно-белых
      тона

6     Графика        640 х 200          CGA, EGA
      черно-белая

7     Текст, черно-  80 х 25            Монохроматический
      белый

8     Графика, 16    160 х 200          PCjr
      цветов

9     Графика, 16    320 х 200          PCjr
      цветов

10    Графика        320 х 200          PCjr, EGA
      PCjr - 4 цвета
      EGA - 16 цветов

13    Графика, 16    320 х 200          EGA
      цветов

14    Графика, 16    640 х 200          EGA
      цветов

15    Графика, 4     640 х 350          EGA
      цвета

     Приводимая ниже процедура "mode" выполняет обращение к функ-
ции 1 базовой системы ввода-вывода (функция установки режима) для
перевода экрана в графический режим 640х200,  выдачи на экран со-
общения-приветствия "HI" и ожидания нажатия пользователем клавиши
"RETURN".  При нажатии указанной клавиши будет сделан  возврат  в
режим цветного экрана с размерами 80х25 (приводимая программа бу-
дет работать только в операционной  системе  PC-DOS  при  наличии
цветного графического адаптера):
     program modetest;

     {SL MODE}

     procedure Mode(ModeSet:integer):external;

     begin
       Mode(6);
       WriteLn('hi'); read;
       Mode(3);
     end.

     Ниже приводится  внешняя  функция "mode",  написанная на ас-
семблере:

     ; Эта процедура делает установку режима экрана, используя
     ; 1 целочисленный параметр.
     code    segment 'code'
             assume cs:code
     public  mode
     mode    proc near

    ; сохранить стек
             push bp
             mov bp,sp
    ; получить режим
             mov ax,[bp]+4
             mov ah,0    ; команда для переключения режима
             int 010h    ; вызов базовой системы ввода-вывода
    ; восстановление и выход
             pop bp
             ret 2
     mode    endp
     code    ends
             end

     Ниже приводится  функция,  которая очищает экран посредством
процедуры "clr":

     program clr_screen;

     {SL CLR}

     procedure Clr; external;

     begin
       WriteLn('нажмите ВВОД для чистки экрана');
       ReadLn;
       Clr;
       WriteLn('экран полностью очищен');
     end.

     Ниже приводится  внешняя процедура "clr",  написанная на ас-
семблере.

        ; прерывание с номером 6
          cseq segment 'code'
          assume cs:cseq

          public clr

          clr proc near
        ; сохранить используемые регистры
                 push ax
                 push bx
                 push cx
                 push dx
                 mov cx, 0  ; начать с начала координат
                 mov dh, 24 ; конец в строке 24
                 mov dl, 79 ; столбец 79
                 mov ah, 0  ; установить режим просмотра
                 mov al, 0  ; очистить экран
                 mov bh, 7
                 int 10h

         ; восстановление и выход
                 pop ax
                 pop bx
                 pop cx
                 pop dx
          clr endp
          cseq ends
                 enu

     Другим примером   связи   с  базовой  системой  ввода-вывода
посредством применения ассемблера является функция "xy",  которая
устанавливает  курсор в координаты Х и Y.  Эта функция аналогична
процедурe "GotoXY", предусмотренной в языке Турбо Паскаль. В ПЭВМ
фирмы IBM левый верхний угол экрана имеет координаты (0,0)

           program gotoxy;

           {$l XY}

           var
             t: integer;

           procedure xy(x, y): integer); external ;

           begin
             for t := 0 to 24 do begin
               xy(t,t);
               write(t);
             end;
           end.

     Ниже приводится внешняя процедура "xy",  написанная  на  ас-
семблере:


     ; эта функция  устанавливает курсор в координаты (Х,Y)
     сode       cseq segment 'code'
                assume cs:cseq

     public     xy
     xy         proc near

     ; сохранение указателя стека
                puch bp
                mov bp,sp

     ; получить первый параметр
                mov dh,[up]+4  ; получить Х
                mov dl,[up]+8  ; получить Y
                mov ah,2       ; указатель точки перехода для
                               ; BIOS
                mov bh,0       ; номер страницы
                int 10h

                pop bp
                ret 4

     xy         endp

     code       ends
                end

 
« Предыдущая статья