static struct { unsigned long address; unsigned short segment; } pci_indirect = { 0, KERNEL_CS }; static int pci_bios_find_device(unsigned...
можно рискнуть использовать MONITOR/MWAIT для отслеживания записи в определнный участок памяти
с этим согласен
ну загнул работа с регистрами настолько же аппаратно зависима, что и с TSS
цель то у тебя - многопроцессорность так что не парься с флопиком ;-)
ищу таблицу ACPI для HPET ; find ACPI mov eax, 0xDFFF8 @@: add eax, 8 test eax, 0x100000 jnz without_hpet cmp dword [eax],...
состояние FPU и прочие вещи не сохраняются/воостанавливаются при аппаратном переключении задач, так что это делается вручную независимо от способа...
ОС? если Linux, то, конечно, можно
да, забыл, что с единицы начинается
CHS адресация ограничена 64 * 1024 * 256 * 512 = 8Gb
так для потоков по сути важны регистры общего назначения и EIP switch_threads: ; EAX и EDX содержат указатели на сегменты состояния потоков xchg...
да, только наверное ты имел в виду не селекторы, а дескрипторы что-то не понял...
если у тебя винт один, вероятнее всего его номер будет 80h в любом случае, можешь в цикле последовательно перебирать номера от 80h до FFh
ну да все же, имхо, с префиксом более наглядно ;-)
* показывает косвенность вызова jmp *%eax (адрес в EAX) jmp *0xABCDEFAB (адрес 0xABCDEFAB) jmp *(0xABCDEFAB) (адрес в памяти по адресу 0xABCDEFAB)...
у меня GNU AS 2.16 .text .globl main main: ljmp $10, $0x100000 так что все нормально
у тебя адресное пространство ядра не плоское? в смысле?
cppasm нельзя полагаться на какой-то тип процессора либо делаем правильно, либо ошибка/UB
быстрее потому как не надо сохранять/восстанавливать CS, DS, SS, ES, GS, FS, LDTR, EIP а каждая операция загрузки сегментного регистра крайне...
нет, как раз в модели дело не уверен, что вручную получится переключать эффективнее, если использвать в полном объеме сегментацию
Имена участников (разделяйте запятой).