Насколько я понимаю, любая программа, чьи регистры сегментов имеют два нулевых LSB, будет работать в режиме ядра, тогда как любая программа, чьи регистры сегментов имеют два LSB = 1, будет работать в пользовательском режиме. Фактически, два младших бита регистраторов сегментов определяют уровень привилегий (от 0 до 3, низший)
Итак, чтобы запустить программу в режиме ядра, нужно настроить регистры сегментов на гекс 0010 (я полагаю). Я не уверен, как вы можете поместить программу в это пространство памяти, не перезаписывая что-то еще - другими словами, как компоновщик обеспечивает это?
Кроме того, если вы хотите вызвать код режима ядра из кода режима пользователя, вы должны выяснить, как передавать параметры - они не используют одинаковый объем памяти, поэтому не могут передавать данные по ссылке на память. Я полагаю, вы должны передать его в регистрах.
Если кто-нибудь сможет заполнить пробелы в вышеприведенном, я был бы очень признателен.