スタック例外で悩み中

qemu では発生しないのですが、bochsVMWare では起動時にキーボードタスクとマウスタスクでスタック例外が発生します。

void task_idle(void)
{
    for (;;) {
        io_hlt();
    }
}

void task_keyboard(void)
{
    for (;;) {
        List<int>* fifo = Scheduler::current->fifo;
        if (fifo->isEmpty() == false) {
            int i = fifo->removeAt(0);
            char c = 0;
            if((c = Keyboard::decode(i)) != 0) {
                Screen::put_key(c);
            }
        }
    }
}

void task_mouse(void)
{
    for (;;) {
        List<int>* fifo = Scheduler::current->fifo;
        if (fifo->isEmpty() == false) {
            int i = fifo->removeAt(0);
            if (Mouse::decode(i) != 0) {
                Mouse::draw();
            }
        }
    }
}

アイドルタスクでは例外が起きないし、qemu でも例外が起きないので困り果てています。なにがおかしいのだろうか・・。ちなみに各タスクのスタックサイズは64KB、10msごとに次のタスクへ切り替えています。