Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11639
Последний выпуск: 19.06.2015

inp

[ Оглавление ]
               INP
      
               #include <conio.h>      требуется  только   для  объявления
                                       функции
               int inp(port);
               unsigned port;          номер порта
            
               Описание.
            
               Функция  inp читает 1 байт из порта ввода, определенного по
         port. Аргумент port может быть любым беззнаковым целым  числом  в
         пределах от 0 до 65535.
            
               Возвращаемое значение.
            
               Функция inp возвращает прочитанный байт из port. Возвращае-
         мого значения в случае ошибки нет.
               Смотри также output.

                                     
               Пример:
            
               #include <conio.h>
               unsigned port;
               char result;
               .
               .
               .
               /*  следующий оператор вводит тот байт из порта, на который
         установлен port */
            
               result=inp(port);
               INT86
               #include <dos.h>
               int int86(intno,inregs,outregs);
               int ntno;                     номер (число) прерывания зна-
               union REGS *inregs;           чения  регистров  при вызове
               union REGS *outregs;          значения  регистров  при воз-
                                             врате
                
               Описание.
                
               Функция int86 выполняет прерывание 8086 программного  обес-
         печения,  которое  определено номером прерывания intno. Перед вы-
         полнением прерывания int86 копирует содержимое inregs в соответс-
         твующие регистры. После возврата прерывания функция копирует зна-
         чение текущего регистра в outregs. Она также копирует статус  пе-
         реносимого  флага  системы  в поле cflag, содержащееся в outregs.
         Аргументы inregs и outregs являются объединениями типа REGS.  Тип
         объединения объявлен в include-файле <dos.h>. Использование функ-
         ции int86 предназначено для вызовов прерываний DOS.
                
                
               
               Возвращаемое значение.
         
               Возвращаемым значением является значение в регистре AX пос-
         ле возврата прерывания. Если поле cflag в outregs ненулевое, воз-
         никает ошибка и переменная _doserrno также устанавливает соответ-
         ствующий код ошибки.
               Смотри также bdos, intdos, intdosx, int86x.
                
               Пример:
                
               #include <signal.h>
               #include <dos.h>
               #include <stdio.h>
               #include <process.h>
                
               /*  прерывание  номер 0х23, подхватываемое процедурой обра-
         ботки прерываний int_handler.  Замечание:  Значения  в  структуре
         regs не имеют смысла для этого прерывания. */
                
               #define CNTRL_C 0x23
               int int_handler(int);
               union REGS regs;
               .
               .
               .
               signal (SIGINT, int_handler);
               .
               .
               .
               int86 (CNTRL_C, &regs, &regs);
               
               
               INT86X
                
               #include <dos.h>
               int int86x(intno,inregs,outregs,segregs);
               int intno;                    номер (число) прерываний
               union REGS *inregs;           значение  регистров  при
                                             вызове
               union REGS *outregs;          значение  регистров  при
                                             возврате
               struct SREGS *segregs;        значение  сегментов  при
                                             вызове
             

                                     
               Описание.
                
               Функция int86x выполняет прерывание 8086 программного обес-
         печения,  которое  определено номером прерывания intno. В отличие
         от функции int86, функция int86x принимает значения регистра сег-
         мента в segregs, позволяя программам, использующим сегменты  дан-
         ных  большой  модели или far-указатели, определять, какой сегмент
         или указатель должен быть использован в процессе системного вызо-
         ва. Перед выполнением определенного  прерывания  int86x  копирует
         содержимое inregs и segregs в соответствующие регистры. В segregs
         используются  только  значения  регистров DS и ES. После возврата
         
         прерываний функция копирует значения текущего регистра в  outregs
         и  перезаписывает DS. Она также копирует состояние (статус) пере-
         носимого флага системы в поле cflag, содержащееся в outregs.  Ар-
         гументы  inregs и outregs являются объединениями типа REGS. Аргу-
         мент segregs является структурой типа SREGS. Эти типы объявлены в
         include-файле <dos.h>. Использование функции int86x предназначено
         для прямого вызова прерываний DOS, которые берут аргумент  в  ре-
         гистре  ES  или значение регистра DS, которое отличается от умал-
         чиваемого сегмента данных.
                
               Возвращаемое значение.
                
               Возвращаемым значением является значение в регистре AX пос-
         ле возвращения прерываний. Если поле flag в outregs является  не-
         нулевым, возникает ошибка и переменная _doserrno также устанавли-
         вает соответствующий код ошибки.
               См.также bdos, intdos, intdosx, int86, segread, FP_SEG.
                
               Замечание!  Значения  сегмента  для  аргумента segreg могут
         быть получены либо при использовании функции segread, либо  макро
         FP_SEG.
      
               Пример:
                
               #include <signal.h>
               #include <dos.h>
               #include <stdio.h>
               #include <process.h>
                
               /* процедура int86x используется для генерирования прерыва-
         ния 0х21 (системный вызов), который, в свою очередь, активизирует
         системный  вызов  "Изменение  атрибутов"  DOS. Здесь используется
         процедура int86x, поскольку ссылка на имя файла может  находиться
         в сегменте, отличном от умалчиваемого сегмента данных (ссылка при
         помощи  far-указателя), поэтому регистр DS может быть точно уста-
         новлен со структурой SREGS. */
                
               #define SYSCALL 0x21
               /* INT 21H вызывает системные вызовы */
               #define CHANGE_ATTR 0x43
               /* системный вызов 43H - изменения атрибутов */
               char far *filename;
               /* имя файла в far-сегменте данных */
               union REGS inregs, outregs;
               struct SREGS segregs;
               int result;
               .
               .
               .
               inregs.h.ah=CHANGE_ATTR;
               /* AH - номер (число) системного вызова */
               inregs.h.al=0;
               /* AL - функция вызова атрибутов */
               inregs.x.dx=FP_OFF(filename);
               /* DS:DX указывают на имя файла */
         
               segregs.ds=FP_SEG(filename);
               result=int86x(SYSCALL,&inregs,&outregs,&segregs);
               if (outregs.x.cflag) {
                   printf("can't get attributes of file; error
                           number %d\n", result);
                   exit(1);
                   }
               else {
                   printf("Attribs=%#x\n", outregs.x.cx);
                   }
                

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог