前言
除了直接使用二进制编辑器写机器码之外,我们可以用汇编语言来制作软盘镜像。写出的汇编语言,以.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镜像也可以正常驱动。