使用nasm附加两个.asm文件

时间:2016-03-26 11:44:07

标签: macos assembly x86 nasm boot

因为第一个扇区只有512个字节,而其余代码很大,我想我需要一个单独的.lst文件汇编程序代码。 我不确定这是否称为绑定,但是当我使用NASM创建.img文件时,我想绑定此汇编程序文件。

第一个

    ORG     0x7c00      
start:
    JMP     entry
    DB      0x90
    ; Start of BIOS Parameter Block         
    DB      "MyOS    "      
    DW      512         
    DB      1           
    DW      1           
    DB      2           
    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         
    ; End of BIOS Parameter Block           

entry:
    MOV     AX, 0           
    MOV     SS,AX
    MOV     SP,0x7c00 
    MOV     DS,AX 
    MOV     ES,AX 
    MOV     SI,msg
loop:
    MOV     AL,BYTE [SI]
    ADD     SI, 1           
    CMP     AL,0
    JE      fin
    MOV     AH, 0x0e        
    MOV     BX, 0xe1        
    INT     0x10            
    JMP     putloop
fin:
    HLT                 
    JMP     fin         

msg:
    DB      0x0a, 0x0a      
    DB      "hello, world"
    DB      0x0a            
    DB      0

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

第二个

DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
TIMES   4600 DB 0
DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
TIMES   1469432 DB 0

如何将第二个代码附加到第一个代码?不是通过复制粘贴文本,而是将文档链接在一起。

对于那些正在寻找fat12磁盘格式的人。 DOS Boot Record Format for FAT12 and FAT16

1 个答案:

答案 0 :(得分:3)

最简单的方法是将两个汇编文件连接在一起,然后使用-f bin选项进行汇编,直接生成软盘映像。列表文件的大小不会成为问题,您的第二个文件会生成如下所示的列表文件:

     1 00000000 F0FFFF0000000000            DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
     2 00000008 00                    TIMES   4600 DB 0
     3 00001200 F0FFFF0000000000            DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
     4 00001208 00                    TIMES   1469432 DB 0

如果您想将两个源代码文件分开,可以使用NASM的%include指令:

%include "bootsector.asm"
%include "fat12.asm"

或者,您可以使用cat命令将这两个文件直接组合到二进制文件中,然后将它们连接在一起:

nasm -f bin bootsector.asm -o bootsector.bin
nasm -f bin fat12.asm -o fat12.bin
cat bootsector.bin fat.bin > floppy.img

除非您将引用自己文件之外的符号的文件链接在一起,否则您不需要使用链接器来创建软盘映像。即便如此,将%include指令用于"链接"会更简单。一切都在一起进入链接器路由意味着编写一个链接器脚本,在这种情况下不值得麻烦。