Thanks Bryan. Your explanation makes things a lot clearer to me. As mentioned in my reply to Daniel, I not cannot figure out why "$1f" will be "0000".
On Fri, Sep 23, 2011 at 12:05 PM, Brynet <bry...@gmail.com> wrote: > 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.