将文件复制到映像文件的根目录

时间:2016-04-04 02:04:21

标签: assembly x86-64 bootloader

我在Mac上工作。我试过了Mtool。我甚至无法安装它因为它显示了一堆我无法处理的错误(相信我这不适合我)。

我想要做的只是将普通文件复制到fat12 Img文件。 你可以用Mtool做的事情。

mcopy -i floppy.img mornal.file 

除了使用Mtool之外我怎么做。 这是我想在Img文件中写的文件。

    ORG 0xc200
    MOV AL,0x13
    MOV AH,0x00
    INT 0x10    

fin: 
    HLT
    JMP fin         

我在引导扇区完成其工作后添加JMP 0xc200并尝试添加文件名和fat12文件系统允许其定位的代码(0x2600和0x4200:FAT12加载元数据和数据本身) 。

t:
    TIMES       0x2600-0x512 DB 0   
    DB          "TEST    sys"       ;8bytes file name : meta data
    TIMES       0x4200-0x2611 DB 0  ;2611 = 2600 + file name(11) 
    ORG         0xc200              ;data
    MOV         AL,0x13
    MOV         AH,0x00
    INT         0x10    
fin: 
    HLT
    JMP fin     
done:       
    TIMES       0x168000-(done-t) DB 0  

这是BIOS参数块和我的其余代码。

    JMP     entry
    DB      0x90        
    DB      "MyOS    "  
;BIOS Parameter Block
    DW      512     
    DB      1       
    DW      1       
    DB      2       
;End of BIOS Parameter Block
    DW      224     
    DW      2880        
    DB      0xf0        
    DW      9       
    DW      18      
    DW      2       
    DD      0       
    DD      2880        
    DB      0,0,0x29    
    DD      0xffffffff  
    DB      "MyOS-Vol   "   
    DB      "FAT12   "  
    TIMES       18 DB 0     
entry:
    MOV     AX, 0           
    MOV         SS,AX
    MOV         SP,0x7c00 
    MOV         DS,AX                       
    MOV         AX,0x0820       

    MOV         ES,AX           

    MOV         CH, 0           
    MOV         DH, 0           
    MOV         CL, 2           
readloop:   
    MOV         SI, 0           
retry:      
    MOV         AH, 0x02        
    MOV         AL, 1           
    MOV         BX, 0           
    MOV         DL, 0x00        
    INT         0x13            
     JNC        next            
    ADD         SI, 1           
     CMP        SI, 5
    JAE         error
    MOV         AH, 0x00
    MOV         DL, 0x00
    INT         0x13            
    JMP         retry 
next:
    MOV         AX,ES
    ADD         AX,0x0020
    MOV         ES,AX 
    ADD         CL, 1
    CMP         CL,18
    JBE         readloop
    MOV         CL, 1
    ADD         DH, 1
    CMP         DH, 2
    JB      readloop 
    MOV         DH, 0
    ADD         CH, 1
    CMP         CH,CYLS 
    JB      readloop  
    JMP     0xc200
fin:
    HLT                 
    JMP     fin         
error:      
    MOV         AX, 0
    MOV         ES,AX
    MOV         SI,msg
printloop:
    MOV     AL,[SI]
    ADD     SI, 1           
    CMP     AL,0
    JE      fin
    MOV     AH, 0x0e        
    MOV     BX, 15          
    INT     0x10            
    JMP         printloop
msg:
    DB      0x0a, 0x0a      
    DB      "load error"
    DB      0x0a            
    DB      0 

maker:      
    TIMES       0x01fe-(maker-start) DB 0
    DB      0x55, 0xaa      

但是当我组装它时它会显示错误。

error: program origin redefined

我想这是因为我在bootsector中使用ORG 0xc200之后使用了ORG 0x7c00。但是我认为没关系,因为我在正确的地方写它(0x2600,0x4200)。 我认为这就是IPL的作用。跳转到它所在的程序,程序应该在内存中分配。

简而言之,问题是

  • 如何将此代码放在引导加载程序映像文件中的正确位置?
  • 我看到有人使用mount和finder进行此类操作但是我如何以编程方式执行此操作(因为我应该为此prosedure创建一个Makefile)?

btw我可以用dd吗?

0 个答案:

没有答案