使用 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" 也会简单得多。走链接器路线意味着编写一个链接器脚本,在这种情况下不值得麻烦。
因为第一个扇区只有 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" 也会简单得多。走链接器路线意味着编写一个链接器脚本,在这种情况下不值得麻烦。