Problems understanding this piece of code...
Sergio Andrés Gómez del Real
sergio.g.delreal at gmail.com
Mon Mar 29 04:36:45 UTC 2010
Hi.
I can't seem to understand this piece of i386 boot code:
What I understand is that BIOS loads MBR at 0x7c00, then jumps to the
code there, code that relocates itself to and jumps to 0x600, but what
does movw $main-EXEC+LOAD,%si mean? if it's the source address to copy
from, why is it $main (0x7c00) - EXEC (0x600) + LOAD (0x7c00) above
main? then, movw $main,%di is the address to copy to... wasn't 0x600
the address to copy to? then jump to jmp main-LOAD+EXEC (0x600)?
I guess I am really missing something here, but I can't get to
understand what's happening.
start: cld # String ops inc
xorw %ax,%ax # Zero
movw %ax,%es # Address
movw %ax,%ds # data
movw %ax,%ss # Set up
movw $LOAD,%sp # stack
#
# Relocate ourself to a lower address so that we are out of the way when
# we load in the bootstrap from the partition to boot.
#
movw $main-EXEC+LOAD,%si # Source
movw $main,%di # Destination
movw $0x200-(main-start),%cx # Byte count
rep # Relocate
movsb # code
#
# Jump to the relocated code.
#
jmp main-LOAD+EXEC # To relocated code
More information about the freebsd-hackers
mailing list