When the computer powers on, the processor's registers are set to some predefined values. One of the registers is the
<emphasis>instruction pointer
</emphasis> register, and its value after a power on is well defined: it is a 32-bit value of
<literal>0xfffffff0
</literal>. The instruction pointer register (also known as the Program Counter) points to code to be executed by the processor. Another important register is the
<literal>cr0
</literal> 32-bit control register, and its value just after a reboot is
<literal>0
</literal>. One of
<literal>cr0
</literal>'s bits, the PE (Protection Enabled) bit, indicates whether the processor is running in 32-bit protected mode or 16-bit real mode. Since this bit is cleared at boot time, the processor boots in 16-bit real mode. Real mode means, among other things, that linear and physical addresses are identical. The reason for the processor not to start immediately in 32-bit protected mode is backwards compatibility. In particular, the boot process relies on the services provided by the
<acronym>BIOS
</acronym>, and the
<acronym>BIOS
</acronym> itself works in legacy, 16-bit code.