Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Intdosx

CuBook05

Функция

Интерфейс с функциями DOS.
 
Синтаксис

#include <dos.h>
int int86(int intr_num, union REGS *inregs, union REGS *outregs, struct SREGS *segregs);
 
Прототип

dos.h
 
Описание

Функция генерирует программное прерывание DOS 0x21 для вызова необходимой функции DOS. Значение inregs->h.al определяет требуемую функцию.

Кроме этого, intdosx копирует значения segregs->x.ds и segregs->x.es в соответствующие регистры, перед вызовом прерывания. Эта возможность позволяет программам использовать дальние указатели или большие модели памяти для указания используемых для прерывания сегментов.

После возврата из прерывания, функция копируют текущие значения регистров в параметр outregs, а статус флага системного переноса в поле x.cflag параметра outregs. Если флаг переноса установлен, это означает что произошла ошибка. Кроме этого, данная функция восстанавливает содержимое DS и заполняет поля segregs->es и segregs->ds соответствующими значениями.

Функция intdosx позволяет вам вызывать функцию DOS, которая получает значение в DS, отличное от адреса сегмента данных по умолчанию, и/или которое получает аргумент в регистре ES.

Примечание: параметры inregs и outregs могут указывать на одну и туже структуру.
 
Возвращаемое значение

Функция intodsx возвращает значение регистра AX после завершения прерывания. Если флажок переноса установлен (outregs-->x.cflag!=0), то есть произошла ошибка, данная функция присваивает глобальной переменной _doserrno код ошибки.
 
Переносимость

Функция уникальна для DOS.
 
Пример

#include <stdio.h>
#include <dos.h>
/* удаление файла. При успешном завершении возвращает 0, иначе ненулевое значение */
int delete_file(char near *filename)
{
union REGS regs;
int ret;
regs.h.ah = 0x41; /* удаление файла */
regs.x.dx = (unsigned) filename;
ret = intdos(&regs, &regs);
/* if carry flag is set, there was an error */
return(regs.x.cflag ? ret : 0);
}
int main(void)
{
int err;
err = delete_file("NOTEXIST.$$$");
printf("Able to delete NOTEXIST.$$$: %s\n", (!err) ? "YES" : "NO");
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий