рдЯреНрд░рд╛рдпрд▓ рдЖрд░реНрдЯрд┐рдХрд▓ "рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрд░реНрдирд▓ рдпреВрдирд┐рдХреНрд╕-рдЬреИрд╕реЗ OC - рд╢реЗрдбреНрдпреВрд▓рд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕" рдХреА рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд▓реЗрдЦреЛрдВ
рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ
рдлрд┐рд░ рд╕реЗ
рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЕрдм, рдЕрдкрдиреЗ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХреЛрдВ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЕрдкрдиреА рддрд░рд╣ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЧрдпрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдмред
рдЯрд┐рдкреНрдкрдгреА 1. рдЕрдиреБрд╕реВрдЪрдХ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рдж рд╕реЗ, рдХреЛрдб рдмрд╣реБрдд рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдХреЛрд░ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рд╕реВрдХреНрд╖реНрдо рдкреЛрд╖рдХ рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реИрдо рдбрд┐рд╕реНрдХ (рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рдЖрднрд╛рд╕реА рдореЗрдореЛрд░реА (рдПрдордПрдордпреВ) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдФрд░ рдХреНрд▓рд┐рдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА (stdio, string) рдереЗред рддреЛ, /initrd/sh.elf рд╢реЗрд▓ рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рдпреЛрдЧрд┐рдиреА рдмреВрдЯрд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред
рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХреА рд╕реВрдЪреА: рдирд┐рд╖реНрдкрд╛рджрди <file.elf>, ps, рдорд╛рд░, рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╢реЗрд▓ рдХреЛ рд╢реЗрд▓ рд╕реЗ рд╣реА рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди)ред
рдиреЛрдЯ 2. рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдмрд╣реБрдд рдЬрд╛рджреВ рд╣реИред
рдореИрдВрдиреЗ рдЙрд╕ рдкрд╛рда рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдордЭрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдФрд░ рд╕рд░рд▓рддрдо рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдЬрд┐рди рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдЫрд┐рдкрд╛рдирд╛ рдкрд╛рдк рд╣реИ, рдореИрдВрдиреЗ рдЙрд╕реА рд╕реЗ рд╢реБрд░реБрдЖрдд рдХреА рдереАред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдУрдПрд╕ рдХреЛ рд╕рдордЭрд╛рдиреЗ рд╕реЗ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдУрд╕реА рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВред
рдЯрд┐рдкреНрдкрдгреА 3. рдЧрд┐рддреБрдм рдХрд╛ рд▓рд┐рдВрдХ рдХрд╣рд╛рдВ рд╣реИ?
рдЕрдм рд╡рд╣ рд╣реИред
YouTube рдкрд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ
рд╡рд░реНрдгрди рдореЗрдВ (рд╣рд╛рдВ, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдореЗрд░реЗ рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рди рдЧреБрдЬрд░реЗрдВ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЖрдВрдЦ рд╕реЗ рджреЗрдЦреЗрдВ)ред
рдЯрд┐рдкреНрдкрдгреА 4. рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рд╡рд╣реА рд╣рдо рдХрд░реЗрдВрдЧреЗред
рдЯрд┐рдкреНрдкрдгреА 5. рдЖрдк рдХреБрдЫ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВред
рд╣рд╛рдБ, рдХреБрдЫ рдмрдбрд╝реА рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрднреА рд╕реЗ рдЧрд▓рддреА рд╣реЛ рдЧрдИред рдЕрдм рд╣рдо рдХрджрдо рджрд░ рдХрджрдо рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдзреАрд░реЗ-рдзреАрд░реЗ, рд╕рд░рд▓рддрдо рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдХрд░реНрдиреЗрд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЖрдкрдХреЛ рджреБрдирд┐рдпрд╛ рдХреА рдПрдХ рд╕рдордЧреНрд░ рддрд╕реНрд╡реАрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ рдЬреАрдердм рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдЖрдкрдХреЛ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдбреБрдмрд╛ рджреЗрдЧрд╛ред
рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ред
1. рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо (рдореЗрдХ, рдЬреАрд╕реАрд╕реА, рдЧреИрд╕)ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреВрдЯ (рдорд▓реНрдЯреАрдмреВрдЯ)ред рд▓реЙрдиреНрдЪ (qemu)ред рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА (strcpy, memcpy, strext)ред
2. рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рд╕реНрдкреНрд░рд┐рдВрдЯрдл, рд╕реНрдЯреНрд░реИрдЪреА, рд╕реНрдЯреНрд░реИрдореНрдк, рд╕реНрдЯреНрд░реЗрдЯреЛрдХ, рд╡рд╛_рд▓рд┐рд╕реНрдЯ ...)ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЛрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЛрдб рдореЗрдВ рдмрдирд╛рдирд╛ред
3. рдХрд░реНрдиреЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧред рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ (kprintf, kpanic, kassert)ред
4. рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА, рдПрдХ рдЧреБрдЪреНрдЫрд╛ (kmalloc, kfree)ред
6. рдореЗрдореЛрд░реА рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ (GDT, IDT, PIC, syscall) рдХрд╛ рд╕рдВрдЧрдардиред рдЕрдкрд╡рд╛рджред
5. рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА (рдкреЗрдЬ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдкреЗрдЬ рдЯреЗрдмрд▓)ред
6. рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рд╕рдордпрдмрджреНрдзрдХред рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (рдорд╛рд░, рдирд┐рдХрд╛рд╕, рдкреАрдПрд╕)ред
7. рдХрд░реНрдиреЗрд▓ рдХреА рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо (initrd), рдпреЛрдЧрд┐рдиреА рдФрд░ рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (рдирд┐рд╖реНрдкрд╛рджрди)ред
8. рдЪрд░рд┐рддреНрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (ioctl, fopen, fread, fwrite)ред рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА (fopen, fclose, fprintf, fscanf)ред
9. рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╢реЗрд▓ред
10. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдореЛрдб (рд░рд┐рдВрдЧ 3)ред рдЯрд╛рд╕реНрдХ рд╕реНрдЯреЗрдЯрд╕ рд╕реЗрдЧрдореЗрдВрдЯ (tss)ред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред рднрд╛рдЧ 1. рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдВ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреЗрд╡рд▓
рдкреНрд░рдореБрдЦ рдЪрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рджреВрдВрдЧрд╛ред рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВред
рдЖрдкрдХреЛ рд▓рд┐рдирдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдореЗрдХ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗред рдХрд░реНрдиреЗрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЭрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
CC_FLAGS=-g -m32 -isystem $(IDIR) -I include -DKERNEL=1 -fno-stack-protector -Wall -Werror -fno-pie AS_FLAGS=-g --32 LD_FLAGS=-m elf_i386
рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓рд┐рдирдХреНрд╕ рдкрд░ qemu рдПрдореБрд▓реЗрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рд╣рдо рдЗрд╕ рддрд░рд╣ рдЕрдкрдирд╛ рдХрд░реНрдиреЗрд▓ рдЪрд▓рд╛рдПрдВрдЧреЗ:
qemu-system-i386 -kernel ./bin/kernel.elf
рдпрд╣ рднреА рд▓рд┐рдВрдХрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рд╣реА рдкрддреЗ рдкрд░ рдФрд░ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗ:
OUTPUT_FORMAT(elf32-i386) ENTRY(start) SECTIONS { . = 0x100000; .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss) } }
рдЪреВрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ рдХреЛ рдорд▓реНрдЯреАрдмреВрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
.code32 .text # multiboot spec .align 4 multiboot: .long 0x1BADB002 # magic .long 0x00 # flags .long -(0x1BADB002 + 0x00) # checksum. m+f+c should be zero
рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рддреБрд░рдВрдд рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдвреЗрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╡рд░рдгрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдвреЗрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
.bss .fill 8192,1 # 8Kb stack:
рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рд▓рд┐рдЦреЗрдВред рдЖрдкрдХреЛ рдЧрди рдЕрд╕реЗрдВрдмрд▓рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдЗрдВрдЯреЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдереА, рдлрд┐рд░ рдЙрд╕реЗ рдЪрдЦрд╛, рд▓рд┐рдирдХреНрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдбрд┐рд▓реАрдЯ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдЯреА рдПрдВрдб рдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╡рд┐рдкрд░реАрдд рдСрдкрд░реЗрдВрдб рд╣реИрдВред рдмрд╛рдХреА рд╕рдм рд╕рд╣рдЬ рд╣реЛрдЧрд╛ред
start: cli movl $stack,%esp push %esp push %ebx /* address of struct multiboot_t */ call kernel_start /* should never return */ hlt
рдпрд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдордЬрд╝рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЕрдм рд╣рдо C. рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдмрдзрд╛рдИ рд╕рдВрджреЗрд╢ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
char *hello = "Hello world!"; int screen_size = 80 * 25;
рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛:
/* * Api - Kernel entry point */ extern void kernel_start(struct multiboot_t* multiboot, void* kstack) { char *video = (char*)0xB8000; char buff[screen_size + 1]; video[screen_size] = '\0'; memset(buff, ' ', screen_size); strext(video, buff, 0x7); strext(video, hello, 0x7); }
рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдкрд╣рд▓реЗ рдкрд╛рда рдХреЗ рдХреЛрдб рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реАрдзреЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рдирд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди 2 рдореЗрдВ рд╕рднреА рдкрд░рд┐рдЪрд┐рдд рдХрд╛рд░реНрдп (strcpy, memcpy) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд╛рдЗрдЯ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреНрд░реЗрдХреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВ рдФрд░ рдЕрдкрдиреЗ рджрдо рдкрд░ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЧреАрдердм рдкрд░ рдкрд╛рда рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬреАрдереВрдм рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ
:рд╕рд╛рд╣рд┐рддреНрдп
1. рдЬреЗрдореНрд╕ рдореЛрд▓реЙрдпред рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЦрд┐рд▓реМрдирд╛ рдпреВрдирд┐рдХреНрд╕-рдХреНрд▓реЛрди рдУрдПрд╕ рд░реЛрд▓ рдХрд░реЗрдВред
2. рджрд╛рдБрддред рдбреЙрд╕, рд╡рд┐рдВрдбреЛрдЬ, рдпреВрдирд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓рд░
3. рдХрд▓рд╛рд╢реНрдирд┐рдХреЛрд╡ред рдЕрд╕реЗрдВрдмрд▓рд░ рдЖрд╕рд╛рди рд╣реИ!
4. рддрд╛рдирдирдмрд╛рдоред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдоред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд╡рд┐рдХрд╛рд╕ред
5. рд░реЙрдмрд░реНрдЯ рд▓рд╡ред рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред