-printing_numbers: db "Printing some random hex numbers", 0
-goodbye: db "Thank you for your attention", 0
+switch_to_pm
+ mov bx, 0B800h
+ mov es, bx
+ mov byte [es:0], 'L'
+
+ cli
+ xor ax, ax
+ mov ds, ax
+ lgdt [gdt_desc]
+
+ mov eax, cr0
+ or eax, 1
+ mov cr0, eax
+ jmp CODE_SEG:protected
+
+ bits 32
+protected
+ mov ax, DATA_SEG
+ mov ds, ax
+ mov ss, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+
+ mov ebp, 090000h
+ mov esp, ebp
+
+ mov ebx, pm_success
+ call pmprint
+
+ call KERNEL_OFFSET
+
+ jmp $
+
+pmprint
+ pusha
+ mov edx, video_memory
+
+.loop
+ mov al, [ebx]
+ mov ah, 0Fh
+
+ cmp al, 0
+ je .done
+
+ mov [edx], al
+ mov [edx+1], ah
+
+ inc ebx
+ add edx, 2
+
+ jmp .loop
+
+.done
+ popa
+ ret
+
+pm_success db "Now in protected mode", 0
+video_memory equ 0B8000h
+
+gdt_start
+null_seg
+ dq 0
+code_seg
+ dw 0FFFFh
+ dw 0
+ db 0
+ db 10011010b
+ db 11001111b
+ db 0
+data_seg
+ dw 0FFFFh
+ dw 0
+ db 0
+ db 10010010b
+ db 11001111b
+ db 0
+gdt_end
+gdt_desc
+ dw gdt_end - gdt_start - 1
+ dd gdt_start
+CODE_SEG equ code_seg - gdt_start
+DATA_SEG equ data_seg - gdt_start