用winhexdump可以看到我们的img文件,也就是硬盘的主引导记录被winiboot覆盖,在0x1fe处有55aa的硬盘启动标志。
当然还得有分区表。
winboot是由winboot.x汇编文件生成的相当于bootsect文件也就是也要放到硬盘的主引导记录上mbr
它的作用是打印硬盘分区信息,选择从哪个分区引导。
然后把接力棒交给选择的分区!
下面是winiboot.x中的一些关键代码
boot:
push ax | remember partition
addb al,#ONE | say which one
call putc
mov bx,#m_crlf
call puts
pop ax
movb ah,#partition | size of each partition
mulb ah | offset
mov si,#BUFFER+TABLE | point at partition table
add si,ax | point at partition entry
pushf | fake an int 0x13 这里是把启动分区的第一个扇区加载到内存,把接力棒传出出!
push cs
mov bx,#BOOTCODE
push bx
mov ax,#VECTOR | vector segment
mov es,ax
mov ax,#0x201 | read one sector
seg es
movb dh,shead(si) | head
seg es
movb cl,ssector(si) | sector
seg es
movb ch,scylinder(si) | cylinder
movb dl,diskcode | disk
seg es
jmpi @DISK_VECTOR | read boot