Стоит задача получить информацию о компьютере, используя системное прерывание int 11h, которое записывает в регистр AX слово состояния (конфигурации). Доступ к прерываниям можно получить из заголовка dos.h, однако функция, обеспечивающая работу с прерыванием int86() была найдена только в библиотеках и хедерах компилятора за 1993 год, MS Visual 1.52 (1993 г) 16-битный, что мне не подходит, в виду наличия 64-битной ОС.
Был написан следующий код:
/*#include <stdio.h>
int main()
{
short a=0;
__asm
{
int 11h
mov a, ax
}
printf("%d",a);
return 0;
}
который выводит на экран слово состояния в числовом виде, равном -14302. И вроде все устраивает, но есть несколько но, которые не получилось решить:
int 11h-14302 является результатом также и на планшете (Windows 8.1, 32 bit). И на другом компьютере (WinXP, 32 bit).Второе "но" наталкивает на мысли, что что-то работает неверно. Разве может быть одинаковым слово состояния на 3 абсолютно разных вычислительных устройствах (планшет, ноутбук, компьютер)?
Прошу советов по решению данной задачи.
Команда прерывание процессора int X это указание процесору вызвать функцию адрес которой хранится в таблице IDT (Interrupt Descriptor Table) (таблица векторов прерываничя) и вектором X.
При загрузке, BIOS первоночально записывает адреса своих функций, но после загрузки ядра ОС. ОС записывает свои адреса в таблицу IDT. Поэтому в определеных ОС Вы будете получать одинаковый ответ.
Для того чтобы сделать asm вставку в gcc. В gcc используется AT&T синтаксис ассемблера
#include <stdio.h>
int main()
{
int a;
__asm__(
"int $0x11\n\t"
:"=a"(a)
);
printf("%d",a);
return 0;
}
Но можно использовать и Intel синтаксис
#include <stdio.h>
int main()
{
int a;
__asm__(
".intel_syntax noprefix\n\t"
"int 11h\n\t"
:"=a"(a)
);
printf("%d",a);
return 0;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей