В книге "Программирование аппаратных средств Windows" - В.Несвижский есть такой пример: mov ax,0b101h int 1ah cmp ah, 00h jne no_pcibios cmp edx, 20494350h jne no_pci mov byte ptr num_bus,cl но он зависает при вызове int 1ah, как я понял он только для 16-битовых программ, для 32 надо находить точку входа. Если можно один примерчик. Спасибо заранее за ваш труд.
я хотел запустить программу с провами админестратора из под windows для проверки, если pci bios или нет. я так понемаю что это ring 3.
Если у тебя вопрос - "Как это отработать на asm-е, если я не знаю asm, но знаком с С?" То так ... Код (Text): // pcbios.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> int main(int argc, char* argv[]) { unsigned char flag=0; // Объявление переменных _asm mov ax,0b101h// Проверка присутствия PCI BIOS в системе _asm int 1ah // Вызываем прерывание 1ah _asm mov flag,ah // Флаг присутствия if (flag!=0) // Если он не равен нулю, то шина отсутствует { printf("Шина PCI отсутствует в системе\n"); return 1; // Выход } return 0; // Выход } Если ты хочешь это запустить (под Win XP к примеру как у меня) то выйдет ... Из под ring 0 - нужно получать доступ к функциям BIOS! Как сказал бы тут кто-то не помню - "надо дровину писать!" ) Или ставь DOS или Win 3.1 или Win95 да тренируйся.
спасибо за пример на с++ , но я хотел на ассемблере. может какие нибудь функции win api вызывать надо? ну не может быть что-бы на ассемблере так все сложно было, может кто подскажет?!
_sheva740 Бред. Напишите дров и вызовите функцию биос. А я посмотрю на вас. arrhangel Из под виндоус вы не получите доступ к pci bios. Но функции биос доступны в NTVDM. Пишите дос программу. Разве что для загрузки драйвера. Даже если вы напишете драйвер для PCI шины, и запустите его, то в нем нельзя вызывать прерывания биос, можно только работать с шиной и устройствами на шине напрямую. В общем RTFM
Судя по всему int 1ah не доступен даже в NTVDM для XP. (( http://support.microsoft.com/kb/314106 И вот еще вроде как проверка ... А после выполнения int 1ah Код (Text): mov ah, 02h ; 02 - ф-ция прерывания 1Ah для получения текущего времени int 1Ah ; Вызываем прерывание ; В регистре CH будут часы ; В регистре CL будут минуты ; В регистре DH будут секунды ... а CX и DX по нулям ((
_sheva740, Неплохо бы дать int1A/02 отработать до конца прежде, чем проверять cx:dh. И двоечку, желательно, в ah. Иначе казус выйдет.
baldr Батенька - Да Вы кудесник! Виноват, был неправ. Все понял в 10 часов 40 минут 11 секунд arrhangel Дак вот же оно - счатье-то, - рядом