VivaCHE Опубликовано 24 ноября, 2010 Жалоба Поделиться Опубликовано 24 ноября, 2010 Вывести строку с помощью прерываний в биосе? и в притом нада на с++.Вот я все пытался найти информацию о прерываниях:INT 11h - Получить список оборудования.INT 12h - Получить размер основной памяти........Прерывание INT 10h выполняет все многочисленные операции по обслуживанию дисплейного адаптера.вот мне пхду как я понял нужен int 10h или 13h - Запись строки.НУ ЭТО Я ПОНЯЛ ДАВНО НО САМОЕ СЛОЖНОЕ: я не могу найти пример использования.Можете привести пример с использованием прерываний в программе и ооочень желательно на си!как написать команду, какие библиотеки использовать?благодарю за помощь Ссылка на комментарий
VivaCHE Опубликовано 26 ноября, 2010 Автор Жалоба Поделиться Опубликовано 26 ноября, 2010 НУ ГДЕ ВСЕ КРУТЫЕ ПРОГЕРЫ =( Ссылка на комментарий
NAT Опубликовано 26 ноября, 2010 Жалоба Поделиться Опубликовано 26 ноября, 2010 VivaCHEэто чтоле?_asm { asm код }_asm{ lea bp, stroka mov al, 13 int 10h} Ссылка на комментарий
VivaCHE Опубликовано 26 ноября, 2010 Автор Жалоба Поделиться Опубликовано 26 ноября, 2010 VivaCHEэто чтоле?_asm { asm код }_asm{ lea bp, stroka mov al, 13 int 10h}ММММ вот вчера препод дала нам пример int88 { переменная указ. номер прерывания, указатель, указатель}вот тока я не понял зачем эти указатели =( ща пошаруюсь в интернете! Ссылка на комментарий
estamolnia Опубликовано 26 ноября, 2010 Жалоба Поделиться Опубликовано 26 ноября, 2010 rtfm все что могу сказать.Это же "Hello world". )) Ссылка на комментарий
superman Опубликовано 26 ноября, 2010 Жалоба Поделиться Опубликовано 26 ноября, 2010 БИОС? Ссылка на комментарий
D2 Опубликовано 2 декабря, 2010 Жалоба Поделиться Опубликовано 2 декабря, 2010 #include требуется только для объявленияфункцииint inp(port);unsigned port; номер портаОписание.Функция inp читает 1 байт из порта ввода, определенного поport. Аргумент port может быть любым беззнаковым целым числом впределах от 0 до 65535.Возвращаемое значение.Функция inp возвращает прочитанный байт из port. Возвращае-мого значения в случае ошибки нет.Смотри также output.Пример:#includeunsigned port;char result;.../* следующий оператор вводит тот байт из порта, на которыйустановлен port */result=inp(port);INT86#includeint 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 0x23int int_handler(int);union REGS regs;...signal (SIGINT, int_handler);...int86 (CNTRL_C, ®s, ®s);INT86X#includeint 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; errornumber %dn", result);exit(1);}else {printf("Attribs=%#xn", outregs.x.cx);} Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти