При написание програмки демонстрирующей работу загрузчика, столкнулся с проблемой: прога при работе в защищенном режиме не загружает селектор сегмента кода (я пытался сделать это jmpl) Если кто знает как это делеть правильно, напишите пожалуйста вот исходник: BOOT_SEG= 0x7c0 .code16 .text .globl _start _start: jmpl $BOOT_SEG,$boot # тут все ОК boot: cli movl %cs,%eax movl %eax,%ds movl %eax,%es movl $_start,%esp movl %esp,%ebp sti movl $msgr,%esi movb $0xe,%ah rprint: lodsb int $0x10 test %al,%al jnz rprint #defined base-gdt cli xorl %eax,%eax movl $_protect,%eax shll $4,%eax addl $gdt,%eax movl %eax,(gdtr+2) #load gdtr lgdt gdtr #20A enable inb $0x92,%al orb $2,%al outb %al,$0x92 #dis unmask interrupt inb $0x70,%al orb $0b10000000,%al outb %al,$0x70 #protect mode ON movl %cr0,%eax orb $1,%al movl %eax,%cr0 .code32 /* а вот после прыжка вылетает */ # jmpl $8,$_protect #load cs-selector .byte 0x66 .byte 0xEA _offset: .long (_protect) .word 0b00001000 # movl $_protect,(_offset) _protect: movl $0b00010000,%eax movl %eax,%ds movl %eax,%ss movl $msg,%esi xorl %edi,%edi movl $0b00011000,%eax movl %eax,%es movw $msg_l,%cx rep movsb /* movl $msg,%esi movl $0xb800,%ebx xorl %ecx,%ecx pprint: #protect print lodsb movb %al,(%ebx,%ecx) incl %ecx test %al,%al jnz pprint */ quit: hlt jmp quit .align 16 gdt: #null-descr .word 0,0,0,0 #code-descr .byte 0xff,0xff,0x00,0x00,0x00,0b10011010,0b11001111,0x00 #data-descr .byte 0xff,0xff,0x00,0x00,0x00,0b10010010,0b11001111,0x00 #video-descr .byte 0xff,0xff,0x00,0x80,0x0b,0b10010010,0b01000000,0x00 gdt_end: .align 4 .word 0 gdtr: .word gdt_end-gdt-1 #limit .word 0,0 #base msgr: .asciz "Real mode ...\n" msg: .string "32-bits .... enable protect mode ... \n" msg_l=.-msg .byte 0 .org 510 .word 0xAA55 P.S зараннее извиняюсь за свою безграмотность