Помогите с переходом в ring0+paging
Порядок действий в моей ОС(точнее в загрузчике ОС) таков:
1. загрузка IDTR, GDTR, (смещение таблицы GDT указываю равным
(0x00000000+
<то, куда загрузчик грузится>+
смещение в исходнике).
2. far jmp на 0x00000000+
<то, куда загрузчик грузится>+
<адрес метки PM1>
3. копирует ядро 0x00020000->0x00200000
4. ближний вызов процедуры, которая:
- инициализирует таблицы PDE и PTE
- прописывает PTE в двух местах в PDE: для
адреса 0x00000000 и 0xf0000000
- мэппит в PTE первые 3 мегабайта
5. загружает в cr3 адрес PDE
6. устанавливает флаг pg в cr0
7. far jmp на 0xf0000000+
<то, куда загрузчик грузится>+
<адрес метки PM2>
8. так как адреса вида 0x000... болше не нужны,
обнуляю первые 4 байта в таблице PDE
===== из-за этой команды камп резетится =====
9. far jmp на 0xf0200000
PS: Я еще не видел, чтоб на форуме НЕДЕЛЮ отвечали. Ну хоть скажите, как этот переход делается. Если можно, дайте код. Если можно - понятный.