Перейти к содержанию

Помогите с прерываниями в биосе


Рекомендуемые сообщения

Вывести строку с помощью прерываний в биосе? и в притом нада на с++.

Вот я все пытался найти информацию о прерываниях:

INT 11h - Получить список оборудования.

INT 12h - Получить размер основной памяти........

Прерывание INT 10h выполняет все многочисленные операции по обслуживанию дисплейного адаптера.

вот мне пхду как я понял нужен int 10h или 13h - Запись строки.

НУ ЭТО Я ПОНЯЛ ДАВНО НО САМОЕ СЛОЖНОЕ: :dontknow::dontknow: я не могу найти пример использования.

Можете привести пример с использованием прерываний в программе и ооочень желательно на си!

как написать команду, какие библиотеки использовать?

благодарю за помощь :prayer::prayer::prayer::

Ссылка на комментарий
VivaCHE

это чтоле?

_asm { asm код }

_asm{
lea bp, stroka
mov al, 13
int 10h
}

ММММ вот вчера препод дала нам пример int88 { переменная указ. номер прерывания, указатель, указатель}

вот тока я не понял зачем эти указатели =( ща пошаруюсь в интернете!

Ссылка на комментарий

#include требуется только для объявления

функции

int inp(port);

unsigned port; номер порта

Описание.

Функция inp читает 1 байт из порта ввода, определенного по

port. Аргумент port может быть любым беззнаковым целым числом в

пределах от 0 до 65535.

Возвращаемое значение.

Функция inp возвращает прочитанный байт из port. Возвращае-

мого значения в случае ошибки нет.

Смотри также output.

Пример:

#include

unsigned port;

char result;

.

.

.

/* следующий оператор вводит тот байт из порта, на который

установлен port */

result=inp(port);

INT86

#include

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-файле . Использование функ-

ции int86 предназначено для вызовов прерываний DOS.

Возвращаемое значение.

Возвращаемым значением является значение в регистре AX пос-

ле возврата прерывания. Если поле cflag в outregs ненулевое, воз-

никает ошибка и переменная _doserrno также устанавливает соответ-

ствующий код ошибки.

Смотри также bdos, intdos, intdosx, int86x.

Пример:

#include

#include

#include

#include

/* прерывание номер 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

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-файле . Использование функции int86x предназначено

для прямого вызова прерываний DOS, которые берут аргумент в ре-

гистре ES или значение регистра DS, которое отличается от умал-

чиваемого сегмента данных.

Возвращаемое значение.

Возвращаемым значением является значение в регистре AX пос-

ле возвращения прерываний. Если поле flag в outregs является не-

нулевым, возникает ошибка и переменная _doserrno также устанавли-

вает соответствующий код ошибки.

См.также bdos, intdos, intdosx, int86, segread, FP_SEG.

Замечание! Значения сегмента для аргумента segreg могут

быть получены либо при использовании функции segread, либо

макро FP_SEG.

Пример:

#include

#include

#include

#include

/* процедура 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 %dn", result);

exit(1);

}

else {

printf("Attribs=%#xn", outregs.x.cx);

}

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...