Не могу понять некоторых моментов в коде код переходит в защищенный режим и выводит букву "А", очень нужна помощь.
Код:
use16
org 0x7c00
start:
mov bx,pm_entry
mov ax, 0x0003
int 0x10
in al, 0x92
or al, 2
out 0x92, al
lgdt [gdtr]
cli
in al, 0x70
or al, 0x80
out 0x70, al
mov eax, cr0
or al, 1
mov cr0, eax
jmp 00001000b:pm_entry
use32
pm_entry:
mov ax, cs
mov ds, ax
mov es, ax
mov edi, 0xB8000
mov esi, msg
cld
mov al,'A'
mov [edi],al
jmp $
gdt:
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
db 0xFF, 0xFF, 0x00, 0x00, 0x00, 10011010b, 11001111b, 0x00
gdt_size equ $ - gdt
gdtr:
dw gdt_size - 1
dd gdt
finish:
times 0x1FE-finish+start db 0
db 0x55, 0xAA
Можете подсказать на что указывает дескриптор, тоесть каков адрес начала сегмента который он определяет?
Я не могу понять именно как происходит этот прыжок
jmp 00001000b:pm_entry
use32
pm_entry:
Вся проблема в том что не понимаю я структуры дескриптора..
db 0xFF, 0xFF, 0x00, 0x00, 0x00, 10011010b, 11001111b, 0x00
PS: Можете просто по шагам об'яснить буду очень благодарен, кодить в реальном времени уже не-то. Я просто юзерь который полез в ассемблер не судите строго