One of the first things an MBR does is do a long jump from where the BIOS 
loaded it.

The thing is, often you can't trust the BIOS to do the right thing, the x86 in 
16-bit real mode uses segmented memory, so you may be at 0000:07C0 or 7C00:0000 
depending on the implementation. If you read the comment higher up you'll see 
they perform a long jump to "normalize" the Code Segment to 07C0, offset 0.

0000:07C0 and 7C00:0000 technically resolve to the same address, but enforcing 
segment:offset (cs:ip) just makes things consistent.

The references to ":1" is a local label, used for relative addressing, 'f' 
meaning forward and 'b' meaning backward.
 
http://sourceware.org/binutils/docs/as/Symbol-Names.html

Most MBR's are OS-independent, they relocate, parse partition table, load the 
PBR/VBR to 7C00 and perform a ljmp to it.

Hope that helps,
-Bryan.

Reply via email to