Port-amd64 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

confused by the several lines of source code in mbr.S



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.



Home | Main Index | Thread Index | Old Index