мне главное из под ассемблера запустить уже другое ядро, на Си
мы довольно забавно обменялись очевидными фактами
Предположим, что надо написать Once только с двумя значениями (WasNotCalled = 0, WasCalled = 1). Для метод call может использовать swap и вернуть предыдущее значение. Но какой порядок нужно использовать в этом swap?
int scan_code = 0;
asm(
"push %%eax\n"
"xor %%eax, %%eax\n"
"in $0x60, %%al\n" // принимаю сканкод
"movl %%eax, -12(%%ebp)\n"
"pop %%eax\n"
:
:
:
);
unsigned char scan_code = 0;
asm(
"in $0x60, %0" // принимаю сканкод
: "=a"(scan_code)
:
:
);
После этого ядро стало выдавать ошибку
qemu-system-x86_64 -kernel kernel-10 -nographic -serial stdio -monitor none -append 'console=ttyS0'
но ты лучше напиши сам и подробно. какие вопросы можно было бы задать модели, что бы и ответ не подсказать и понять, на сколько глубоко она понимает это?
Zailox, ok, мне gcc таких смещений не генерирует, всё это барахло можно отключить добавив опцию
-fno-asynchronous-unwind-tables
в командную строку gcc. Я запушил патч с этим изменением в репу из ответа.