вот мой код проверки и включения. сделано для загрузчика. но адреса можно изменить на свои. ;************************************************ ;* Константа вкл/выкл процедур * ;* бит 0 включает работу через io 92h * ;* бит 1 через клавиатуру * ;* бит 2 через биос * ;************************************************ a20_type equ 0111b ; a20_type ;************************************************ ;* Процедуры для работы с адресной линией A20 * ;* Вход: ds=0, es=0ffffh * ;* Результат: * ;* если cf=0 то линия A20 открыта * ;* во всех процедурах изменяется только рег AX * ;* и флаги * ;************************************************ enable_a20_line: cli call test_a20_line jne short enable_a20_ok if (a20_type) and 1 in al,92h mov ah,al and al,1 or al,2 out 92h,al call test_a20_line jne short enable_a20_ok mov al,ah out 92h,al end if if (a20_type) and 2 call a20_wait_kbd mov al,0adh out 64h,al call a20_wait_kbd mov al,0d0h out 64h,al call a20_wait2_kbd in al,60h push ax call a20_wait_kbd mov al,0d1h out 64h,al call a20_wait_kbd pop ax or al,2 out 60h,al call a20_wait_kbd mov al,0aeh out 64h,al call a20_wait_kbd mov al,0ffh out 64h,al call a20_wait_kbd call test_a20_line jne short enable_a20_ok end if if (a20_type) and 4 mov ax,2401h int 15h call test_a20_line end if enable_a20_ok: sti ret if (a20_type) and 2 a20_wait_kbd: in al,64h test al,2 jnz short a20_wait_kbd ret a20_wait2_kbd: in al,64h test al,1 jz short a20_wait2_kbd ret end if ;************************************************ ;* Процедура проверки линии A20 * ;* если cf=0, то линия открыта * ;************************************************ test_a20_line: cmp word [es:7e0eh],0aa55h jne @f mov word [7dfeh],55aah cmp word [es:7e0eh],55aah mov word [7dfeh],0aa55h @@: ret