因为第一个扇区只有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
答案 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
指令用于"链接"会更简单。一切都在一起进入链接器路由意味着编写一个链接器脚本,在这种情况下不值得麻烦。