When the PC powers on, the processor's registers are set to some predefined values.
One of the registers is the instruction
pointer register, and its value after a power on is well defined: it is a
32-bit value of 0xfffffff0. The instruction pointer register points to code to be
executed by the processor. One of the registers is the cr1
32-bit control register, and its value just after the reboot is 0. One of the cr1's bits,
the bit PE (Protected Enabled) indicates whether the processor is running in protected or
real mode. Since at boot time this bit is cleared, the processor boots in real mode. Real
mode means, among other things, that linear and physical addresses are identical.
The value of 0xfffffff0 is slightly less then 4Gb, so unless the machine has 4Gb
physical memory, it cannot point to a valid memory address. The computer's hardware
translates this address so that it points to a BIOS memory block.
BIOS stands for Basic Input Output
System, and it is a chip on the motherboard that has a relatively small amount
of read-only memory (ROM). This memory contains various low-level routines that are
specific to the hardware supplied with the motherboard. So, the processor will first jump
to the address 0xfffffff0, which really resides in the BIOS's memory. Usually this
address contains a jump instruction to the BIOS's POST routines.
POST stands for Power On Self
Test. This is a set of routines including the memory check, system bus check
and other low-level stuff so that the CPU can initialize the computer properly. The
important step on this stage is determining the boot device. All modern BIOS's allow the
boot device to be set manually, so you can boot from a floppy, CD-ROM, harddisk etc.
The very last thing in the POST is the INT 0x19
instruction. That instruction reads 512 bytes from the first sector of boot device into
the memory at address 0x7c00. The term first
sector originates from harddrive architecture, where the magnetic plate is
divided to a number of cylindrical tracks. Tracks are numbered, and every track is
divided by a number (usually 64) sectors. Track number 0 is the outermost on the magnetic
plate, and sector 1, the first sector (tracks, or, cylinders, are numbered starting from
0, but sectors - starting from 1), has a special meaning. It is also called Master Boot
Record, or MBR. The remaining sectors on the first track are never used .