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". ))
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);}
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти