0%

30天自制操作系统-用汇编语言制作软盘镜像

前言

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

image.png
注意,这个代码必须是每行的前面都有一个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程序。
image.png
使用方法:将汇编程序拷贝到nask.exe所在目录,用powershell开启命令行,输入.\nask.exe .\helloos.nas .\helloos.img,生成helloos.img这个软盘镜像文件。

用QEMU驱动软盘镜像

在QEMU中进行验证,用汇编语言制作的img镜像也可以正常驱动。
image.png

-------------本文结束感谢您的阅读-------------