使用 nasm 附加两个 .asm 文件

Appending two .asm files with nasm

因为第一个扇区只有 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

最简单的方法是将两个程序集文件连接在一起,然后 assemble 使用 -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 指令将所有内容一起 "link" 也会简单得多。走链接器路线意味着编写一个链接器脚本,在这种情况下不值得麻烦。