Я вижу два странных момента.
Один у вас: доступ к 32-битным регистрам APIC не может выполняться как к 64-битной памяти. Об этом говорит intel developer's manual vol3, p 10.4.1:
All 32-bit registers should be accessed using 128-bit aligned 32-bit loads or stores.
Второй — в qemu. Там (смотрел текущую голову git) нет кода, который бы перемещал регистры при изменении базового адреса APIC.
На чём вы тестируете своё ядро?