Я написал простой загрузчик, в котором я переключился с реального на защищенный режим. Я хочу включить адресную строку A20. Вот мой код (это неверно):
EnableA20:
.try0:
call .checkenabled
cmp eax,0
jne .done
.fail:
jmp $
.checkenabled:
push ebx
mov eax,0x1234
mov [0x10],eax
mov ebx,[0x100010]
sub eax,ebx
pop ebx
ret
.done:
Это показывает, что моя адресная строка включена по умолчанию ... Это возможно ??
Где я ошибся? Метод, который я использовал, - записать 0x1234 по адресу 0x10 и прочитать значение с адреса 0x100010. Если значение, которое я написал, совпадает со значением, присутствующим в адресе (из-за переноса), я знаю, что строка не должна быть включена.
Я использую qemu в качестве эмулятора:
qemu-system-i386 myos.bin
РЕДАКТИРОВАТЬ: Похоже, A20 по умолчанию. Однако, если я попытаюсь сделать это:
.try1: ;Using keyboard controller to enable A20
mov al,0xdd
out 0x64,al
call .checkenabled
cmp eax,0
jne .done
Это провалится! Я читал, что перемещение 0xdd в порт 0x64 включает A20 и не отключает его. В чем здесь проблема?