OK,解决方案似乎是相当容易的(只要你知道你的第二阶段开始的二进制)。代替试图加载上扇区0200的二进制文件(其是FAT32的第二块),加载此部分一直作为它的工作在其他FAT分区的驱动器:
0x7E00:0×00
类型FAT文件系统的似乎并没有影响到那一点。 另外,我的另一个问题是关于第二阶段。它应该有一个
[ORG 0x0000]
在开始。
最终代码:
[BITS 16]
[ORG 0x7C00]
Boot:
xor ax, ax ; AX=0
mov ds, ax ; DS=0
mov es, ax ; ES=0
add ax, 0x9000
mov ss, ax
mov sp, 0xF000
mov ah, 0x00
int 0x13
mov ax, 0x7E00
mov es, ax ; Load to 0x7E00 : 0x00
mov bx, 0x00
SurucuOku:
mov ah, 0x02
mov al, 0x01 ; Read 1 sector
mov ch, 0x00 ; Read on cylinder 0
mov cl, 0x02 ; Read sector 2
mov dh, 0x00 ; Head number 0
int 0x13
jnc Basari
mov al, 0x46
call hata
jmp SurucuOku
hata:
pusha
mov ah, 0x09
mov bh, 0x00
mov bl, 0x0F
mov cx, 0x01
int 0x10
popa
ret
Basari:
jmp 0x07E00:0x00
TIMES 510 - ($ - $$) db 0
DW 0xAA55
你刚才足够的空间来写,可以通过FAT32主目录扫描并加载一个文件到内存中一个512字节的单块体积引导记录,这两个步骤需要你跟着他们FAT中的相应分配链。您需要为FAT32 BPB保留空间,因为这是文件系统元数据的一部分,但仍然留有足够的空间 –
通过查看它的FAT条目并读取它,找出它在哪个扇区。 –