前言
除了直接使用二进制编辑器写机器码之外,我们可以用汇编语言来制作软盘镜像。写出的汇编语言,以.nas为后缀,我们用nask这个汇编工具将汇编语言转为机器码(即软盘镜像*.img)。
汇编程序
汇编程序和直接编写机器码是差不多的,不过可以用RESB表示连续多个字节是0x00(比如RESB 10就表示连续10个字节都是0x00)。
RESB:reserve byte 意思是保留字节,相当于用
0x00来占位
DB:define byte 表示写入字节
一张软盘的大小的1440KB,KB就是kilobyte,1KB等于1024byte(字节)。1byte(字节)等于8bit(比特),能记录8个0和1的信息。
1440KB=1440*1024byte=1474560byte

注意,这个代码必须是每行的前面都有一个tab键。我这里写的不知道为什么渲染出来格式没对🙃,加一行注释就可以显示正确格式了😜
代码:helloos.nas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23; 代码
	DB	0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f
	DB	0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00
	DB	0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00
	DB	0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
	DB	0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff
	DB	0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f
	DB	0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41
	DB	0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00
	RESB	16
	DB	0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
	DB	0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
	DB	0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
	DB	0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
	DB	0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65
	DB	0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72
	DB	0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00
	RESB	368
	DB	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
	DB	0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
	RESB	4600
	DB	0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
	RESB	1469432
汇编工具nask
直接从教程里面拷贝过去的一个exe程序。
使用方法:将汇编程序拷贝到nask.exe所在目录,用powershell开启命令行,输入.\nask.exe .\helloos.nas .\helloos.img,生成helloos.img这个软盘镜像文件。
用QEMU驱动软盘镜像
在QEMU中进行验证,用汇编语言制作的img镜像也可以正常驱动。

