First, I am confused by the following lines of code from the mbr.S in i386/stand/mbr directory. ---------------------------------- snip -------------------------------------------------------- 216 movw $lba_info, %si 217 movb $0x42, %ah 218 pop %dx /* recover drive # */ 219 push %dx /* save drive */ 220 int $0x13 221 jc wait_key /* abort menu on read fail */ 222 cmpw $MBR_MAGIC, LOADADDR + MBR_MAGIC_OFFSET 223 movw $nametab - LOADADDR + BOOTADDR, %bx 224 je next_extended ---------------------------------- snip -------------------------------------------------------- Moreover, the BOOTADDR and LOADADDR are defined as below: ---------------------------------- snip -------------------------------------------------------- 65 #define BOOTADDR 0x7c00 66 #define LOADADDR 0x0600 /* address were are linked to */ ---------------------------------- snip -------------------------------------------------------- When we call INT 0x13, BIOS will transfer the PBR code to the address BOOTADDR included in the lba_info struct, and then we should check whether the PBR code is valid. The address LOADADDR + MBR_MAGIC_OFFSET in line 222 is 0x0600 + MBR_MAGIC_OFFSET, which is just the magic number's address of the mbr code but not the PBR code, and no process will modify the mbr's magic number, so, there is alwasy a jump to next_extended. So, is there any other purpos or just a bug because of incaution? Thanks for any tips or comments.