I've tried to execute simple kernel with a kolibri bootloader. It's being loaded into 1000:0000. I don't understand, what's wrong in this part:
...
; switch to PM
mov eax, cr0
or al, 1
mov cr0, eax
use32
PROTECTED_ENTRY:
mov ax, 00010000b ; DATA
mov ds, ax
mov ss, ax
mov esp, 0xFFFF
jmp $
mov ax, 00011000b ; VIDEO
mov es, ax
mov edi, 0
mov esi, string
int 1
jmp $
'cause in debugger it looks like this

What's going on here? Why ES and DS aren't being changed?
P.S. i'm trying to get this kernel working with kolibri loader: http://wasm.ru/article.php?article=ia32int
The processor does not automatically enter protected mode when you set the protected bit in
cr0. It enters protected mode whencsis changed after that. The easiest way to do this is to insert a far jump immediately after writing tocr0.Hopefully I got that right. (I'm used to AT&T syntax.) That
.dbis an operand size override to allow a 32 bit address.