When the boot loader invokes the 32-bit operating system, the machine must have the following state:
Must contain the magic value ‘0x2BADB002’; the presence of this value indicates to the operating system that it was loaded by a Multiboot-compliant boot loader (e.g. as opposed to another type of boot loader that the operating system can also be loaded from).
Must contain the 32-bit physical address of the Multiboot information structure provided by the boot loader (see Boot information format).
Must be a 32-bit read/execute code segment with an offset of ‘0’ and a limit of ‘0xFFFFFFFF’. The exact value is undefined.
Must be a 32-bit read/write data segment with an offset of ‘0’ and a limit of ‘0xFFFFFFFF’. The exact values are all undefined.
Must be enabled.
Bit 31 (PG) must be cleared. Bit 0 (PE) must be set. Other bits are all undefined.
Bit 17 (VM) must be cleared. Bit 9 (IF) must be cleared. Other bits are all undefined.
All other processor registers and flag bits are undefined. This includes, in particular:
The OS image must create its own stack as soon as it needs one.
Even though the segment registers are set up as described above, the ‘GDTR’ may be invalid, so the OS image must not load any segment registers (even just reloading the same values!) until it sets up its own ‘GDT’.
The OS image must leave interrupts disabled until it sets up its own
However, other machine state should be left by the boot loader in normal working order, i.e. as initialized by the BIOS (or DOS, if that’s what the boot loader runs from). In other words, the operating system should be able to make BIOS calls and such after being loaded, as long as it does not overwrite the BIOS data structures before doing so. Also, the boot loader must leave the PIC programmed with the normal BIOS/DOS values, even if it changed them during the switch to 32-bit mode.