рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ: рднрд╛рдЧ 5. рдУрдПрд╕ рд╕реЗ BIOS рддрдХ рдкрд╣реБрдВрдЪрдирд╛


рд╣рдорд╛рд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ "рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП", рд╣рдордиреЗ GRUB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд▓рд╛рд╕рд┐рдХ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред рдЕрдм рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ BIOS рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП - рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ BIOS рдХреНрдпрд╛ рд░реБрдХрд╛рд╡рдЯ рд╣реИрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдХреНрдпреЛрдВ рд╣реИрдВред

рдереЛрдбрд╝рд╛ рд╕рд╛ рд╡реНрдпрд╡рдзрд╛рди


рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдЬреЛ рдПрдХ рдШрдЯрдирд╛ рдХреА рдШрдЯрдирд╛ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╡рдзрд╛рдиреЛрдВ рдХреЛ 2 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
тАв рдмрд╛рд╣рд░реА рд╡реНрдпрд╡рдзрд╛рди - рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди;
тАв рдЖрдВрддрд░рд┐рдХ рд╡реНрдпрд╡рдзрд╛рди - рдХрд┐рд╕реА рднреА рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0 рд╕реЗ рд╡рд┐рднрд╛рдЬрди рдпрд╛ рдЕрдорд╛рдиреНрдп рдкрддреЗ рддрдХ рдкрд╣реБрдВрдЪ) рдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдЖрдИрдбреАрдЯреАрдЖрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдЯреЗрдмрд▓ рд╕реЗ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╛рд░реВрдк рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рд░реБрдХрд╛рд╡рдЯреЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдмрд┐рдЬрд▓реА рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рд┐рдпрд▓ рдореЛрдб рдХреЗ рд╕рдорд╛рди рдПрдХ рдореЛрдб рдореЗрдВ рдЕрдкрдирд╛ рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрджрдо BIOS рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╣реИред BIOS рдХреБрдЫ CPU рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд░реИрдо рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, POST рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рдмреЗрд╕рд┐рдХ рдЗрдХреНрд╡рд┐рдкрдореЗрдВрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддрд╛ рд╣реИред BIOS рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ IDTR рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ 0x0 рд╣реИ ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЛрдб (рд░рд┐рдпрд▓ рдореЛрдб) рдореЗрдВ, рдЗрдВрдЯрд░рдлреЗрдЬ рдЯреЗрдмрд▓ рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдПрдХ sel: рдСрдлрд╝рд╕реЗрдЯ рдЬреЛрдбрд╝реА рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рдкреНрдЯрд▓рд░ рдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИред BIOS рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдп рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдорд╢реАрди рд╕реЗ рдорд╢реАрди рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП BIOS рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдХреНрд╕ рд╕реЗ рд╕реЗрдХреНрдЯрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП 0x13 рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реАрдбрд┐рдпреЛ рдореЛрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 0x10 рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред BIOS рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдпрд▓ рдореЛрдб рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрд╕реЗрдВрдмрд▓рд░ рдЗрдВрдЯ рдЕрдиреБрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рд╕реЗрдХреНрдЯрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде int 0x13 рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдб рдореЗрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рдКрдкрд░ рдореЗрдореЛрд░реА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░рдЧрддрд┐ (рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред рдЗрд╕рд▓рд┐рдП, x86 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреВрд╕рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб, рдЬреИрд╕реЗ рдкреНрд░реЛрдЯреЗрдХреНрдЯреЗрдб рдореЛрдб рдФрд░ рд▓реЙрдиреНрдЧ рдореЛрдб рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред

рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ, рдмрд╛рдзрд╛ рддрд╛рд▓рд┐рдХрд╛ рдЕрд▓рдЧ рджрд┐рдЦрддреА рд╣реИред рдЖрдИрдбреАрдЯреАрдЖрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдЕрднреА рднреА рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ 3 рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЧреЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╣реИ (рдЗрдВрдЯреЗрд▓ рдореИрдиреБрдЕрд▓ рдХрд╛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 6.11 рдкрдврд╝реЗрдВ)ред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рдкреНрдЯ рдЯреЗрдмрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ BIOS рдХреЛ, рдЗрд╕рд▓рд┐рдП, рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ BIOS рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо (рдПрдЪрдбреАрдбреА, рд╕реАрдбреА-рд░реЛрдо, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб ...) рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдкрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЙрдиреНрдЧ рдореЛрдб рдореЗрдВ, рдЧреЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╕реНрдерд┐рддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕реА рд╣реА рд╣реИред

рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рд╕реЗ BIOS рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ


рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓, рдЬреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддрдм рднреА рдбрд┐рд╕реНрдХ рд╕реЗ рдХреБрдЫ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХ рдбреНрд░рд╛рдЗрд╡рд░) рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдЕрднреА рддрдХ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред
1. VirtualMode86 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ BIOS рдХреЙрд▓ рдХрд░реЗрдВред
2. RealMode рдкрд░ рдЬрд╛рдПрдВ, BIOS рдкрд░ рдЬрд╛рдПрдВ, рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдкрд░ рд▓реМрдЯреЗрдВред

рд╡рд░реНрдЪреБрдЕрд▓ рдореЛрдб 86 ( рд╡реАрдПрдо 86) рдПрдХ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрдЧрдореЗрдВрдЯрд┐рдВрдЧ рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдХрд╛ рдкреЗрдЬрд┐рдВрдЧ рдЙрд╕реА рд╕рдордп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЪреВрдВрдХрд┐, рдЗрд╕реА рддрд░рд╣ рдХреА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк 64-рдмрд┐рдЯ рдХреЛрдб рд╕реЗ BIOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рд▓реЛрдВрдЧрдореЛрдб рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЬреЛ VM86 рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рд╣рдо рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рдЕрдм рд╣рдо BIOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реИрдо рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЕрднреА рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд 32 рд╡реЗрдВ рдореЛрдб рд╕реЗ BIOS рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдЗрд╕реЗ VBE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ 32-рдмрд┐рдЯ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ 16-рдмрд┐рдЯ BIOS рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реИред рдпрд╣ рддрд░реАрдХрд╛ рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рдмреБрд░рд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд░реБрдХрд╛рд╡рдЯреЛрдВ рдХреЛ рдПрдореБрд▓реЗрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд░реИрдо рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╕рдордп, рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪреВрдВрдХрд┐ BIOS рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреВрдЯ рдЪрд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╣рдо 2 рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдпрд╣ рдХреЛрдб рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд▓реЗрдЦред

рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдЪреБрдирд╛ рд╣реБрдЖ рддрд░реАрдХрд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реАрдкреАрдпреВ рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдордПрдордЖрдИрдУ рдФрд░ рдбреАрдПрдордП рдЬреИрд╕реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдкреНрдЯ рд╡реИрдХреНрдЯрд░ рдХреЛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ BIOS рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВред рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдбреНрд░рд╛рдЗрд╡рд░, BIOS рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рдорд╛рди рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде, рд░реБрдХрд╛рд╡рдЯ рдЦреЛ рджреЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдУрдПрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд░реНрдгрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ


рддреЛ, рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп: e820 рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реИрдо рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╣рдореЗрдВ BIOS рдЗрдВрдЯрд░ рдЗрдВрдЯ 0x15 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд┐рд▓реЗрдЧрд╛ред E820 рдЯреЗрдмрд▓ рдПрдХ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдХреМрди рд╕реА рд░реЗрдВрдЬ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХреЗ рджреБрд░реНрдЧрдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЗ рдореБрдЦреНрдп BIOS рдФрд░ BIOS, ACPI рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдХреБрдЫ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдЙрдирдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд┐рдВрдбреЛрдЬ 7 рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдореЙрдирд┐рдЯрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рдореЗрдореЛрд░реА" рдЯреИрдм рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ "рдЖрд░рдХреНрд╖рд┐рдд рдЙрдкрдХрд░рдг" рдореЗрдВ рдЖрд░рдХреНрд╖рд┐рдд рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХреА рдЧрдИ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред



рддрд╛рд▓рд┐рдХрд╛ E820 рд╕реЗ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: EBX рдореЗрдВ, рдорд╛рди 0 рд╣реИ, EAX рдореЗрдВ рдорд╛рди 0xE820 рд╣реИ, ECX рдореЗрдВ рдмрдлрд░ рдЖрдХрд╛рд░ (рдХрдо рд╕реЗ рдХрдо 20 рдмрд╛рдЗрдЯреНрд╕), EDX рдореЗрдВ рдорд╛рди 0x534d4150 рд╣реИ, ES: DI рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рд╕реВрдЪрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрдлрд╝рд░ред Int0x15 рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рдмрд╛рдж, e820 рдЯреЗрдмрд▓ рд╕реЗ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдлрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ EBX рдореЗрдВ рдореВрд▓реНрдп 1 рд╕реЗ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред рдИрдмреАрдПрдХреНрд╕ рдлрд┐рд░ рд╕реЗ 0 рд╣реЛ рдЬрд╛рдиреЗ рддрдХ рд░реБрдХрд╛рд╡рдЯ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЕрдВрддред рдЙрд╕рдХреЗ рдмрд╛рдж, рдмрдлрд░ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░, рдПрдлрд╝реНрд▓реИрдЧреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдХреИрд░реА рдлрд╝реНрд▓реИрдЧ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ 'SMAP' рдореВрд▓реНрдп EAX рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк рд╣реИ:



рдкреНрд░рдХрд╛рд░ "1" рд╣реИ рдпрджрд┐ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ "рдореЗрдореЛрд░реА" рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ BIOS, "3" рдпрд╛ "4" рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ рдпрджрд┐ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрд╕реАрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдп рдорд╛рди рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВ; рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб:



рдпрд╣ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ GRUB, рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рд╕реЗ BIOS рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ GRUB рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред

рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реАрдкреАрдпреВ рд░рд┐рдпрд▓рдореЛрдб рдореЛрдб рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ BIOS рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрд░рдмреВрдЯ рдХрд░рддрд╛ рд╣реИ, BIOS рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдФрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, BIOS рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмреВрдЯ рдСрд░реНрдбрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдЪреНрдЪрддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗрдХреНрдЯрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЕрдЧрд░ рдпрд╣ рдПрдЪрдбреАрдбреА рд╣реИ рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдПрдЪрдбреАрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЖрд░рдПрдо рдореЗрдВ рд░рд╣рддреЗ рд╣реБрдП BIOS рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЛрдбрд┐рдВрдЧ hdd рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рд╕реЗрдХреНрдЯрд░ MBR рд╣реИ, рдЬреЛ GRUB рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред GRUB рдореБрдЦреНрдп рд░реВрдк рд╕реЗ PM рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЙрдкрдХрд░рдг рддрдХ рдкрд╣реБрдВрдЪреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рд╕реЗрдХреНрдЯрд░ рдкрдврд╝реЗрдВ) рдЖрд░рдПрдо рдкрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ BIOS рдмрд╛рдзрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред GRUB рдкреАрдПрдо рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд░реНрдиреЗрд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдВрдХрдбрд╝рд╛ рдмреВрдЯ рдХреЗ рджреМрд░рд╛рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реАрдкреАрдпреВ рд╕рдВрдХреНрд░рдордг рдХреЗ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрдХреНрд░рдо рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред



рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдЬрд╛рд░реА рд░рдЦрдиреЗ рдФрд░ рд╕реАрдзреЗ рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рд╖рдп рд╡реНрдпрд╛рдкрдХ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдмрд╛рдж рдореЗрдВ рд╣рдо рдХреЛрдб рдореЗрдВ рдЬреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЙрд╕рдХрд╛ рд╡рд░реНрдгрди рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрд░рдПрдо рдФрд░ рдкреАрдПрдо рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдЦрдВрдбрд┐рдд рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╣реИред рдФрд░ рдЦрдВрдб рд╕реНрдореГрддрд┐ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХреНрдпрд╛ рд╣реИ? рдЖрд░рдПрдо рдореЗрдореЛрд░реА рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 20-рдмрд┐рдЯ рдПрдбреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ 16 рдмрд┐рдЯреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИ (рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдХреЛрдб рдХреЛ 16-рдмрд┐рдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЬреЛрдбрд╝реЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдЦрдВрдб рдХрд╛ рдЖрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдСрдлрд╕реЗрдЯред рдСрдлрд╕реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд░реИрдЦрд┐рдХ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 4. рджреНрд╡рд╛рд░рд╛ рдмрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рдХрд┐рдП рдЧрдП рд╕реЗрдЧрдореЗрдВрдЯ рдХрд╛ рдЖрдзрд╛рд░ рдЖрд░рдПрдо рдореЗрдВ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдСрдлрд╕реЗрдЯ рдХреЛ рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реЗрдЧрдореЗрдВрдЯ рдмреЗрд╕ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕реАрдПрд╕, рдбреАрдПрд╕, рдПрд╕рдПрд╕, рдИрдПрд╕, рдПрдлрдПрд╕, рдЬреАрдПрд╕ред рдЗрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред PUSH, POP рдХреЗ рд▓рд┐рдП, рдпрд╣ SS (рд╕реНрдЯреИрдХ рд╕реЗрдЧрдореЗрдВрдЯ) рд╣реИ, JUMP рдХреЗ рд▓рд┐рдП, LOOP CS (рдХреЛрдб рд╕реЗрдЧрдореЗрдВрдЯ) рд╣реИ, MOV рдХреЗ рд▓рд┐рдП DS (рдбреЗрдЯрд╛ рд╕реЗрдЧрдореЗрдВрдЯ) рд╣реИред

рдкреАрдПрдо рдЦрдВрдбрд┐рдд рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдВрддреНрд░ рдмрд╣реБрдд рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЕрдм рдЪрдпрдирдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ рдЦрдВрдб рдХреЗ рдЖрдзрд╛рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рд╡рд░рдг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрд░рдЪрдирд╛ рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдЗрдВрдЯреЗрд▓ рдореИрдиреБрдЕрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред



тАв RPL (рдЕрдиреБрд░реЛрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░) - рдЦрдВрдб рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
тАв TI - рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реНрдерд┐рдд рд╣реИред 1 - рдПрд▓рдбреАрдЯреА (рд╕реНрдерд╛рдиреАрдп рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рд╡ рдЯреЗрдмрд▓), 0 - рдЬреАрдбреАрдЯреА (рдЧреНрд▓реЛрдмрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдЯреЗрдмрд▓)ред
тАв рдЗрдВрдбреЗрдХреНрд╕ - рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХред

рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ 2 рдкреНрд░рдХрд╛рд░ рд╣реИрдВ - рдЬреАрдбреАрдЯреА рдФрд░ рдПрд▓рдбреАрдЯреАред рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрдбреАрдЯреА рдЯреЗрдмрд▓ рд╣реИ, рдХрдИ рдПрд▓рдбреАрдЯреА рдЯреЗрдмрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ)ред рд╣рдо GDT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ LDT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реИрд╕реЗ рднреА GDT рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдХреЛ 2 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред рдХрд╕реНрдЯрдо рд╡рд┐рд╡рд░рдгрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░реЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрджрд▓рд╛рд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХреАред рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕рдВрд░рдЪрдирд╛ (рдЗрдВрдЯреЗрд▓ рдореИрдиреБрдЕрд▓ рд╕реЗ рднреА рд▓реА рдЧрдИ) рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ x86 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрдм рддрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ рдХрд┐рддрдиреЗ рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рд╕рд╣рдирд╛ рдкрдбрд╝рд╛ред



рд╕реЗрдЧрдореЗрдВрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░, рдЖрдХрд╛рд░, рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рд╕реНрддрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ, рдкрдврд╝рдиреЗ, рд▓рд┐рдЦрдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдФрд░ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдЖрдзрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред
тАв рдмреЗрд╕ рдПрдбреНрд░реЗрд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рдХрд╛ 32-рдмрд┐рдЯ рдПрдбреНрд░реЗрд╕ рд╣реИ, рдпрд╣ рдлреАрд▓реНрдб 3 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ base_0_15, base_16_23, base_24_31ред
тАв рд╕реЗрдЧрдореЗрдВрдЯ рд▓рд┐рдорд┐рдЯ - рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕реЗрдЧрдореЗрдВрдЯ рд╕рд╛рдЗрдЬ рдЕрдЧрд░ рдЭрдВрдбрд╛ G = 0 рд╣реИ, рдпрд╛ 4Kb рдХреЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдЕрдЧрд░ рдЭрдВрдбрд╛ G = 1 рд╣реИред
тАв рдЬреА (рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА) - рдпрджрд┐ рдЭрдВрдбрд╛ рд╕реЗрдЯ рд╣реИ, рддреЛ рд╕реЗрдЧрдореЗрдВрдЯ рд▓рд┐рдорд┐рдЯ рдХреЛ 4Kb рдХреЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВред
тАв рдПрд╕ (рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдЯрд╛рдЗрдк) - рдпрджрд┐ рдЭрдВрдбрд╛ рд╕реЗрдЯ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдЕрдиреНрдпрдерд╛ рд╕рд┐рд╕реНрдЯрдоред рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ, рд╕рднреА рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реИред
тАв рдкреНрд░рдХрд╛рд░ - рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдПрд╕ рдзреНрд╡рдЬ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрдВрдб рдХреЗ рд▓рд┐рдП, 2 рдореБрдЦреНрдп рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВ: рдПрдХ рдХреЛрдб рдЦрдВрдб рдФрд░ рдПрдХ рдбреЗрдЯрд╛ рдЦрдВрдб, рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЙрдЪреНрдЪ рдмрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИред



рдбреЗрдЯрд╛ рдЦрдВрдб рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдЯреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдИ (рд╡рд┐рд╕реНрддрд╛рд░-рджрд┐рд╢рд╛), (рдбрдмреНрд▓реНрдпреВ) рд░рд╛рдЗрдЯ-рдЗрдиреЗрдмрд▓, (рдП) рдПрдХреНрд╕реЗрд╕ред рдмрд┐рдЯ (рдбрдмреНрд▓реНрдпреВ) рдЖрдкрдХреЛ рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, (рдИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдЯреИрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, (рдП) рдбреЗрдЯрд╛ рдФрд░ рдХреЛрдб рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдЯ рд╣реИ, рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп 1 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдкрдврд╝ рд░рд╣рд╛ рд╣реЛ, рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реЛ рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реЛред рдХреЛрдб рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд┐рдЯ (E) рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ ┬й рдФрд░ (W) рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдХреЛрдб рдХреЛ рджреВрд╕рд░реЗ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдмрд┐рдЯ ┬й рдХрдиреНрдлрд░реНрдорд┐рдВрдЧ, рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдЪреЗрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд░рджреНрдж рдХрд░ рджреЗрддрд╛ рд╣реИред ┬о рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрд┐рдЯ рдПрдХ рдХреЛрдб рдЦрдВрдб рд╕реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рдХреЛрдб рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗред

тАв L (64-рдмрд┐рдЯ рдХреЛрдб рд╕реЗрдЧрдореЗрдВрдЯ) - рдпрджрд┐ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ 64-рдмрд┐рдЯ рдХреЛрдб рд╣реИ рддреЛ рд╕реЗрдЯ рдХрд░реЗрдВред рдзреНрд╡рдЬ рдХреЛ рдХреЛрдб рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 1 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
тАв рдПрд╡реАрдПрд▓ (рдЙрдкрд▓рдмреНрдз рдФрд░ рдЖрд░рдХреНрд╖рд┐рдд рдмрд┐рдЯреНрд╕) - рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
тАв рдбреА тАЛтАЛ/ рдмреА (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрдкрд░реЗрд╢рди рдЖрдХрд╛рд░) - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рдЦрдВрдбреЛрдВ рдХреА рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред 16 рдмрд┐рдЯреНрд╕, рдпрджрд┐ рдзреНрд╡рдЬ 0 рдФрд░ 32 рдкрд░ рд╕реЗрдЯ рд╣реИ, рдпрджрд┐ 1 (рд╣рд╛рдБ, рд╣рд╛рдБ, рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ 16-рдмрд┐рдЯ рдХреЛрдб рднреА рд╣реЛрддрд╛ рд╣реИ)ред
тАв рдбреАрдкреАрдПрд▓ (рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░) - рдЦрдВрдб рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ 0 рд╕реЗ 3 рддрдХ рдорд╛рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ 0 рд╕рдмрд╕реЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реИред рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрдВрдЯреЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб рднрд╛рдЧ 1 , рдЕрдиреБрднрд╛рдЧ 3.4.5 рдореЗрдВ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред рд╡рд╣рд╛рдВ рдЖрдк рдпрд╣ рднреА рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЦрдВрдбреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЙрдирдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрддрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Habr├й рдкрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ ред
рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ рд╣рдо рд╕рднреА рдиреЗ рдпрд╣ рдХреНрдпреЛрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ - рд╣рдореЗрдВ рд╕реА рдХреЛрдб рд╕реЗ BIOS рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ ASM рдкрд░ рдХреЛрдб рд╕реЗ C рд╕реЗ RM рдореЗрдВ рдХреЛрдб рдкрд░ рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╕реА рдХреЛрдб 32-рдмрд┐рдЯ рдкреАрдПрдо рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рд╕рдВрдХреНрд░рдордг рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:



рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд╕реА рдХреЛрдб рд╕реЗ рдЖрд░рдПрдо рддрдХ рдХреЛрдб рдФрд░ рдЖрд░рдПрдо рдореЗрдВ рдХреЛрдб рд╕реЗ рд╕реА рдХреЛрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

! рдорд╣рддреНрд╡рдкреВрд░реНрдг! рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рд╕рднреА 6 рдЪрд░рдгреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ "рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ"!

рддреЛ рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛:
1. GRUB рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреА GDT рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░реЗрдВред
2. C рдореЗрдВ BIOS рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦреЗрдВред
3. рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВред
4. рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░ рдЪрд▓рд╛рдПрдВред

рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!

рдЪрд░рдг 1. рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬреАрдбреАрдЯреА


1. рдмрд┐рдЯрд╡рд┐рдЬрд╝рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдмрд┐рдЯрд╡рд┐рдЬрд╝рд░ -1.2 \ core \ desc.h рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╡рд░рдгрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
2. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реА рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:

#include "types.h" #include "desc.h" #include "string.h" static void SetSegDesc(struct segdesc *d, u32 limit, u32 base, enum segdesc_type type, enum segdesc_s s, unsigned int dpl, unsigned int p, unsigned int avl, enum segdesc_l l, enum segdesc_d_b d_b) { d->base_15_0 = base; d->base_23_16 = base >> 16; d->type = type; d->s = s; d->dpl = dpl; d->p = p; d->avl = avl; d->l = l; d->d_b = d_b; d->base_31_24 = base >> 24; if (limit <= 0xFFFFF) { d->g = 0; d->limit_15_0 = limit >> 0; d->limit_19_16 = limit >> 16; } else { d->g = 1; d->limit_15_0 = limit >> 12; d->limit_19_16 = limit >> 28; } } void SetupDescTables(struct segdesc *GDT_base) { // SEG_SEL_NULL memset(&GDT_base[0], 0, sizeof(GDT_base[0])); //  .  0 // SEG_SEL_CODE32 SetSegDesc(&GDT_base[1], 0xFFFFFFFF, 0x00000000, // 32    SEGDESC_TYPE_EXECREAD_CODE, //   0 SEGDESC_S_CODE_OR_DATA_SEGMENT, 0, 1, //  0  4G 0, SEGDESC_L_16_OR_32, SEGDESC_D_B_32); // SEG_SEL_DATA32 SetSegDesc(&GDT_base[2], 0xFFFFFFFF, 0x00000000, // 32    SEGDESC_TYPE_RDWR_DATA, //   0 SEGDESC_S_CODE_OR_DATA_SEGMENT, 0, 1, //  0  4G 0, SEGDESC_L_16_OR_32, SEGDESC_D_B_32); // SEG_SEL_CODE16 SetSegDesc(&GDT_base[3], 0x0000FFFF, 0x00000000, // 16    SEGDESC_TYPE_EXECREAD_CODE, //   0 SEGDESC_S_CODE_OR_DATA_SEGMENT, 0, 1, //  0  4G 0, SEGDESC_L_16_OR_32, SEGDESC_D_B_16); // SEG_SEL_DATA16 SetSegDesc(&GDT_base[4], 0x0000FFFF, 0x00000000, // 16    SEGDESC_TYPE_RDWR_DATA, //   0 SEGDESC_S_CODE_OR_DATA_SEGMENT, 0, 1, //  0  4G 0, SEGDESC_L_16_OR_32, SEGDESC_D_B_16); struct descreg gdtr; gdtr.base = (ulong)GDT_base; //     gdtr.limit = 5 * sizeof(*GDT_base) - 1; //     - 1 __asm__ volatile ("lgdt %0" // GCC-Inline-Assembly : : "m" (gdtr)); } 


рд╕реА рдХреЛрдб рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, 2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрдВрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ: 32-рдмрд┐рдЯ рдХреЛрдб рдЦрдВрдб рдФрд░ 32-рдмрд┐рдЯ рдбреЗрдЯрд╛ рдЦрдВрдбред 16-рдмрд┐рдЯ рдХреЛрдб рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЧрдореЗрдВрдЯ рдЪрд╛рд╣рд┐рдП: 16-рдмрд┐рдЯ рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рд╕реЗрдЧрдореЗрдВрдЯред * GDT_base рдкрддреЗ рдкрд░ GDT рддрд╛рд▓рд┐рдХрд╛ рдкрд╛рдБрдЪ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд╕рд╛рде SetupDescTables рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рд╢реВрдиреНрдп рд╣реИ, рдФрд░ рд╢реЗрд╖ 4 рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рд╕рднреА рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ 0 рдХрд╛ рдЖрдзрд╛рд░ рдФрд░ 4 рдЬреА рдХреА рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИред GDT рдореЗрдВ рдкрд╣рд▓рд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред GDTR рд░рдЬрд┐рд╕реНрдЯрд░, рдЬреЛ GDT рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдХреЛ lgdt рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢рд┐рд╖реНрдЯ GCC рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдбрд╛рдВрддрд░рдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╕реЗрдВрдмрд▓рд░ рдЖрд╡реЗрд╖рдг рдореЗрдВ рдирд┐рдореНрди рд░реВрдк рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ:

 asm ( assembler template : output operands /* optional */ : input operands /* optional */ : list of clobbered registers /* optional */ ); 


рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ asm рд╕рдореНрдорд┐рд▓рд┐рдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:



рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЬреАрдбреАрдЯреА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реАрдПрд╕, рдПрд╕рдПрд╕, рдбреАрдПрд╕ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

3. рдПрдХ рдХреЙрд▓ рдХреЛ Setup.DescTables рдФрд░ рдХреБрдЫ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ kern.c рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

 #include "printf.h" #include "screen.h" #include "types.h" #include "desc.h" #include "callrealmode.h" struct segdesc g_GDT[5]; void SetupDescTables(struct segdesc *GDT_base); void kmain(void) { clear_screen(); printf(" -- Kernel started! -- \n"); SetupDescTables(g_GDT); u64 ram_size = GetAvalibleRAMSize (); printf("ram_size = %llu(%lluMb)\n", ram_size, ram_size / 0x100000); } 


GetAvalibleRAMSize () рдХреЙрд▓ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ RAM рдХрд╛ рдЖрдХрд╛рд░ рджреЗрддрд╛ рд╣реИред

рдЪрд░рдг 2. рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВред



1. Bitvisor-1.2 \ core \ string.s рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, bitvisor-1.2 \ core \ longmode.h рдФрд░ bitvisor-1.2 \ BitVisor рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╢рд╛рдорд┐рд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ \ core \ string.h рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ ред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрдИ рд╕рд╛рдорд╛рдиреНрдп-рдкреНрд░рдпреЛрдЬрди рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореЗрдореНрд╕реНрдХреА рдФрд░ рдореЗрдорд╕реЗрдЯред рд╢рд╛рдорд┐рд▓ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 #ifndef _TYPES_H #define _TYPES_H #define NULL 0 typedef unsigned long size_t; typedef unsigned long ulong; typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64; #endif 


рдЪрд░рдг 3. BIOS рддрдХ рдкрд╣реБрдВрдЪрдирд╛



1. SetupDescTables рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛ рдорд╛рдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ ред

 #ifndef _SEGMENT_H #define _SEGMENT_H #define SEG_SEL_NULL 0 #define SEG_SEL_CODE32 (1 * 8) // Index = 1, TI = 0, RPL = 0 #define SEG_SEL_DATA32 (2 * 8) // Index = 2, TI = 0, RPL = 0 #define SEG_SEL_CODE16 (3 * 8) // Index = 3, TI = 0, RPL = 0 #define SEG_SEL_DATA16 (4 * 8) // Index = 4, TI = 0, RPL = 0 #endif 


рдФрд░ GetRamsize рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ callrealmode.h ред

 #ifndef _CALLREALMODE_H #define _CALLREALMODE_H #include "types.h" u64 GetAvalibleRAMSize(); #endif 


2. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓ рдореЗрдВ callrealmode.c рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:

 #include "printf.h" #include "types.h" #include "string.h" #include "segment.h" #include "callrealmode_asm.h" // interrupts and paging must be disabled static void callrealmode_Call(struct callrealmode_Data *p_param) { u16 sp16; u32 sp32; // copy 16 bit code and stack //   memcpy  16    //  callrealmode_start  callrealmode_end //   CALLREALMODE_OFFSET < 1Mb.   //    ,   RM     //   1Mb. memcpy ((u8*)CALLREALMODE_OFFSET, &callrealmode_start, &callrealmode_end - &callrealmode_start); //    ,     ,    . //     RM   ,     SP //     sp16 = CALLREALMODE_OFFSET - sizeof(*p_param); //   memcpy     memcpy ((void*)(u32)sp16, p_param, sizeof(*p_param)); __asm__ volatile ( "mov %%esp,%0\n" //   ESP   sp32 "mov %1,%%ds \n" //  16     "mov %1,%%es \n" //  DS, ES, FS, GS, SS "mov %1,%%fs \n" // "mov %1,%%gs \n" // "mov %1,%%ss \n" // "mov %2,%%esp\n" //   16     sp16 "pusha \n" //     "lcall %3,%4 \n" //  16     CS //     CALLREALMODE_OFFSET. //     CS  EIP, //     // lretl    32   "popa \n" //      "mov %5,%%ds \n" //  32     "mov %5,%%es \n" //  DS, ES, FS, GS, SS "mov %5,%%fs \n" // "mov %5,%%gs \n" // "mov %5,%%ss \n" // "mov %0,%%esp\n" //   32  ,  //     sp32 : "=&a" (sp32) // %0 тАУ Input : "b" ((u32)SEG_SEL_DATA16) // %1 - Output , "c" ((u32)sp16) // %2 - Output , "i" ((u32)SEG_SEL_CODE16) // %3 - Output , "i" (CALLREALMODE_OFFSET) // %4 - Output , "d" ((u32)SEG_SEL_DATA32) // %5 - Output ); //      16    p_param memcpy (p_param, (void*)(u32)sp16, sizeof(*p_param)); } u64 GetAvalibleRAMSize() { struct callrealmode_Data param; // ,     //    RM,    u64 avalible_ram_sz = 0; param.func = CALLREALMODE_FUNC_GETSYSMEMMAP; param.getsysmemmap.next_num = 0; do { param.getsysmemmap.num = param.getsysmemmap.next_num; callrealmode_Call(┬╢m); // int 0x15,  EBX = param.getsysmemmap.num // EAX = 0xE820, EDX = 0x534d4150, ECX = 20 // ES:DI = ┬╢m.getsysmemmap.base //   EBX  // param.getsysmemmap.next_num = EBX //        SYSMEMMAP_TYPE_AVAILABLE if (SYSMEMMAP_TYPE_AVAILABLE == param.getsysmemmap.type) { avalible_ram_sz += param.getsysmemmap.len; } printf("n 0x%08X nn 0x%08X b 0x%08llX l 0x%08llX(%lldMb) t 0x%08X\n", param.getsysmemmap.num, param.getsysmemmap.next_num, param.getsysmemmap.base, param.getsysmemmap.len, param.getsysmemmap.len / 0x100000, param.getsysmemmap.type); } while (param.getsysmemmap.next_num); return avalible_ram_sz; } 


рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддрдХ рдкрд╣реБрдБрдЪ рдЧрдП! рдЗрд╕ рдХреЛрдб рдореЗрдВ 2 рдХрд╛рд░реНрдп рд╣реИрдВ: GetRamsize рдФрд░ callrealmode_Call ред GetRamsize рдлрд╝рдВрдХреНрд╢рди callrealmode_Call рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ callrealmode_Data рдкрд░рдо рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ ред Callrealmode_Call рдлрд╝рдВрдХреНрд╢рди рд╕реАрдзреЗ 16-рдмрд┐рдЯ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛрдб рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ BIOS рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рд╕реЗрдХреНрдЯрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред рдПрдХрдорд╛рддреНрд░ рд╢рд░реНрдд callrealmode_Data рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред

GetRamsize рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рддрд░реНрдХ рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрд╡рд░реНрддреА int0x15 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдмрд╛рд░-рдмрд╛рд░ callrealmode_Call рдлрд╝рдВрдХреНрд╢рди (рдПрдирд╛рд▓реЙрдЧ int0x15) рдХреЛ param.getsysmemmap.next_num (рдЙрд░реНрдл EBX) рддрдХ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред Callrealmode_Call рдлрд╝рдВрдХреНрд╢рди рджреЛ рдлрд╝реНрд░реЗрдордпреБрдХреНрдд рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рд▓реЗрдмрд▓реНрд╕ callrealmode_start рдФрд░ callrealmode_end рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА 16-рдмрд┐рдЯ рдХреЛрдб рдХреЛ рдирд┐рдореНрди рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдкрд░ CALLREALMODE_OFFPET = 0x5000 рдкрддреЗ рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ ред рдкрддреЗ рдХрд╛ рдЪрдпрди рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдирдХрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╣ BIOS рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рди рднрдЯрдХреЗред рдлрдВрдХреНрд╢рди рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рджрд┐рд▓рдЪрд╕реНрдкреА рдЕрд╕реЗрдореНрдмрд▓рд░ рдЗрдВрд╕рд░реНрдЯ рдХреА рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдпрд╣ рджрд┐рдЦрд╛рдПрдВ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛:



3. рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ callrealmode_asm.h рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ, рдлрд╝рд╛рдЗрд▓ рдпрд╣рд╛рдБ рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ , рдФрд░ callrealmode_asm.s рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд░реЛрдд рд░реВрдЯ рдореЗрдВ, рдЬреЛ рдпрд╣рд╛рдБ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ callrealmode.c рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВред рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 16-рдмрд┐рдЯ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрд░рдПрдо рдХреЛ рд╕рдВрдХреНрд░рдордг, BIOS рдХреЙрд▓, рдкреАрдПрдо рдХреЛ рд╡рд╛рдкрд╕реА рдФрд░ рдлрд┐рд░ рд╕реА рдХреЛрдб рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреАрдПрдо рдФрд░ рдЖрд░рдПрдо рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд░рдХреНрд╖рд╛_рдСрдл рдФрд░ рдкреНрд░реЛрдЯреЗрдХреНрд╢рди_рдСрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВред рд╡реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реАрдЖрд░ 3, рдХреБрдЫ рдПрдордПрд╕рдЖрд░, рдЬрд┐рди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЬреАрдбреАрдЯреАрдЖрд░ рдФрд░ рдЖрдИрдбреАрдЯреАрдЖрд░ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд┐рдЯрд╡рд┐рдЬрд╝рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдлрд╝рд╛рдЗрд▓ рдмрд┐рдЯрд╡рд┐рдЬрд╝рд░-1.2 \ core \ callrealmode_asm.s рдореЗрдВ ред

рдЪрд░рдг 4. рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рд▓реЙрдиреНрдЪ



1. рдореЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВред рдХреА рдЬрдЧрд╣

 OBJFILES = \ loader.o \ common/printf.o \ common/screen.o \ kernel.o 


рдкрд░

 OBJFILES = \ loader.o \ common/printf.o \ common/screen.o \ common/string.o \ kernel.o \ callrealmode.o \ callrealmode_asm.o \ descriptor.o 


рдФрд░ рдПрдХ рд▓рд╛рдЗрди

 as -o $@ $< 


рдкрд░

 as -I include -o $@ $< 


2. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг:

 make rebuild sudo make image 


3. "рдПрдо-рдПрдо" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ, рдЬреЛ рдЖрдкрдХреЛ рд░реИрдо рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

 sudo qemu-system-i386 -hda hdd.img тАУm 123 



рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рднреА рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рд░реЗрдВрдЬ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХреА рддрд░рд╣, рдЖрдк USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ hdd.img рдЫрд╡рд┐ рдХрд╛ dd рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдмреВрдЯ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдЧреЗ рдХреА рдпреЛрдЬрдирд╛


рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рддрдВрддреНрд░ рдорд┐рд▓рд╛ рдЬреЛ рд╕реА рдореЗрдВ рдХреЛрдб рд╕реЗ BIOS рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рднрд╛рдЧ рдХреЛ рдЫреБрдЖ рдЧрдпрд╛ рдерд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ FAT32 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реА рдмрд╛рд░ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ!

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ:
" рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ: рднрд╛рдЧ 6. FAT рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди "

Source: https://habr.com/ru/post/In211470/


All Articles