Hello! There is the following Assembler code loaded into memory at 0x7E00:
use16 global start1 extern kernel_start start1: jmp 0x0000:entry entry: mov ax, cs mov ds, ax ;ΠΎΡΠΈΡΡΠΈΡΡ ΡΠΊΡΠ°Π½ mov ax, 0x0003 int 0x10 ;ΠΎΡΠΊΡΡΡΡ A20 in al, 0x92 or al, 2 out 0x92, al ;ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ GDT Π² GDTR lgdt [gdtr] ;ΠΠ°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ cli ;ΠΠ°ΠΏΡΠ΅ΡΠΈΡΡ Π½Π΅ΠΌΠ°ΡΠΊΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ in al, 0x70 or al, 0x80 out 0x70, al ;ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π² Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ mov eax, cr0 or al, 1 mov cr0, eax ;ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π² CS:EIP ΡΠΎΡΠΊΡ Π²Ρ
ΠΎΠ΄Π° Π² Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ O32 jmp 00001000b:pm_entry ;32-Π±ΠΈΡΠ½Π°Ρ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ use32 ;Π’ΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π° Π² Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ pm_entry: ;ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ (ΠΊΡΠΎΠΌΠ΅ SS) mov ax, cs mov ds, ax mov es, ax mov edi, 0xB8000 ;Π½Π°ΡΠ°Π»ΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡΠΈ Π² Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ΅ 0x3 mov esi, msg ;Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ cld loop: ;ΡΠΈΠΊΠ» Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ lodsb ;ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΡΡΡΠΎΠΊΠΈ test al, al ;Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈ 0 jz exit ;ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΠΌ Π²ΡΠ²ΠΎΠ΄ stosb ;ΠΈΠ½Π°ΡΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» mov al, 7 ;ΠΈ Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡ Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡΡ stosb jmp loop exit: jmp $ ;Π·Π°Π²ΠΈΡΠ°Π΅ΠΌ msg: db 'Hello World!', 0 ;ΠΠ»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ². gdt: db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 db 0xFF, 0xFF, 0x00, 0x00, 0x00, 10011010b, 11001111b, 0x00 gdt_size equ $ - gdt ;Π΄Π°Π½Π½ΡΠ΅, Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡ GDTR gdtr: dw gdt_size - 1 dd gdt It is almost completely copied from this article: https://habrahabr.ru/post/104988/ . As far as I understand, he should create a code segment with a limit of 0xFFFF + 1010b and a base at 0x00, then output "Hello world!" directly to video memory. But in the end, after compiling and running this code, QEMU reloads indefinitely - displays 
sometimes it still has time to go out "Booting from floppy ..." and the screen is cleared, then again it all comes out and clears and so endlessly. I think the problem is that the author of the article has this code in the 1st loader at 0x7C00, and I in the 2nd one, at 0x7E00. But I'm not sure. Please help me figure it out.
UPD
00000000 <start1>: 0: ea .byte 0xea 1: 05 .byte 0x5 2: 00 00 add BYTE PTR [eax],al ... 00000005 <entry>: 5: b8 03 00 cd 10 mov eax,0x10cd0003 a: e4 92 in al,0x92 c: 0c 02 or al,0x2 e: e6 92 out 0x92,al 10: 0f 01 16 lgdtd [esi] 13: 73 00 jae 15 <entry+0x10> 15: fa cli 16: e4 70 in al,0x70 18: 0c 80 or al,0x80 1a: e6 70 out 0x70,al 1c: 0f 20 c0 mov eax,cr0 1f: 0c 01 or al,0x1 21: 0f 22 c0 mov cr0,eax 24: 66 ea 2a 00 00 7e jmp 0x7e00:0x2a 0000002a <pm_entry>: 2a: 66 b8 08 00 mov ax,0x8 2e: 8e c8 mov cs,eax 30: 66 b8 10 00 mov ax,0x10 34: 8e d8 mov ds,eax 36: bf 00 80 0b 00 mov edi,0xb8000 3b: be 4e 00 00 00 mov esi,0x4e 40: fc cld 00000041 <loop>: 41: ac lods al,BYTE PTR ds:[esi] 42: 84 c0 test al,al 44: 74 06 je 4c <exit> 46: aa stos BYTE PTR es:[edi],al 47: b0 07 mov al,0x7 49: aa stos BYTE PTR es:[edi],al 4a: eb f5 jmp 41 <loop> 0000004c <exit>: 4c: eb fe jmp 4c <exit> 0000004e <msg>: 4e: 48 dec eax 4f: 65 6c gs ins BYTE PTR es:[edi],dx 51: 6c ins BYTE PTR es:[edi],dx 52: 6f outs dx,DWORD PTR ds:[esi] 53: 20 57 6f and BYTE PTR [edi+0x6f],dl 56: 72 6c jb c4 <kernel_start+0x4b> 58: 64 21 00 and DWORD PTR fs:[eax],eax 0000005b <gdt>: ... 63: ff (bad) 64: ff 00 inc DWORD PTR [eax] 66: 00 00 add BYTE PTR [eax],al 68: 9a cf 00 ff ff 00 00 call 0x0:0xffff00cf 6f: 00 .byte 0x0 70: 92 xchg edx,eax 71: cf iret ... 00000073 <gdtr>: 73: 17 pop ss 74: 00 5b 00 add BYTE PTR [ebx+0x0],bl ... 00000079 <kernel_start>: 79: 66 55 push bp 7b: 66 89 e5 mov bp,sp 7e: 66 83 ec 10 sub sp,0x10 82: 67 66 c7 45 fc 00 80 mov WORD PTR [di-0x4],0x8000 89: 0b 00 or eax,DWORD PTR [eax] 8b: 67 66 c7 45 f8 00 00 mov WORD PTR [di-0x8],0x0 92: 00 00 add BYTE PTR [eax],al 94: eb 2d jmp c3 <kernel_start+0x4a> 96: 67 66 8b 55 f8 mov dx,WORD PTR [di-0x8] 9b: 67 66 8b 45 fc mov ax,WORD PTR [di-0x4] a0: 66 01 d0 add ax,dx a3: 67 c6 00 21 mov BYTE PTR [bx+si],0x21 a7: 67 66 8b 45 f8 mov ax,WORD PTR [di-0x8] ac: 67 66 8d 50 01 lea dx,[bx+si+0x1] b1: 67 66 8b 45 fc mov ax,WORD PTR [di-0x4] b6: 66 01 d0 add ax,dx b9: 67 c6 00 0f mov BYTE PTR [bx+si],0xf bd: 67 66 83 45 f8 02 add WORD PTR [di-0x8],0x2 c3: 67 66 81 7d f8 9f 0f cmp WORD PTR [di-0x8],0xf9f ca: 00 00 add BYTE PTR [eax],al cc: 7e c8 jle 96 <kernel_start+0x1d> ce: 90 nop cf: 66 c9 leavew d1: 66 c3 retw
jmp 0x7e00:0x2ait should have been loaded into cs 8, i.e. he should have been about8:7e02a. - Mike