Does the BIOS copy the 512-byte bootloader to 0x7c00
... the boot-sector loader loads the 512 bytes of the data of a diskette which resides at the memory address 0x7C00 (if I am right) into the RAM
...
Since the machine is booting up, the RAM has to be empty, so the bootloader it loaded at 0x0000 of the RAM?
No. 0000:7C00
refers to a RAM address. RAM means "Random Access Memory", means each location in the memory can be accessed directly. There is nothing like "empty RAM". You can also refer to the INT13 interrupt function "Read Sectors From Drive": one of the parameters (passed in ES:BX
) needs to point to the destination address where the sector contents will be stored. Hence, what the BIOS does is it loads 512 bytes from the drive and stores it into 0000:7C00
to 0000:7DFF
, and then jumps to 0000:7C00
to execute the primary boot loader code.
Any articles/books I should read to get myself familiar with Kernels, etc?
This Wiki is very useful: http://wiki.osdev.org/Main_Page. For the boot process, look at http://wiki.osdev.org/Boot_Sequence.