Я наверное чего-то не знаю, а просматривая документацию упорно это пропускаю. Но никак не могу понять, почему, когда я включаю виртуальную память, при возврате из обработчика прерывания от клавиатуры (отдельная задача) происходит какая-то ошибка с CS. Bochs пишет: "CS not valid executable seg". Без виртуальной памяти всё работает замечательно. В чём может быть ошибка? Код есть, это смесь C и ассемблера.
Странно, по коду, вроде, все правильно. Залей сюда образ для Bochs, может там что интересное обнаружится. И, кстати, Bochs, случайно, не имеет проблем с четырехмегабайтными страницами?
Проблем с четырёхмегабайтными страницами нет. Но не работает и код с таблицей четырёхкилобайтных страниц. И нет никакого образа. Программа работает с дискеты FAT12. Кстати я пробывал и запускать просто так, не через Bochs: всё рабно не работает.
Короче, на случай подобных проблем у кого-нибудь другого, проблема в том, что в начальный сегмент остояние задачи не загружается регистр CR3. Соответственно при возврате из обработчика прерывания при включеной виртуальной памяти это вызывает неисправимую ошибку. Решение - занести этот регистр в TSS предварительно, более элегантного варианта я пока не нашёл.