30天自制操作系统之第1天
来源:互联网 发布:sql server 混合模式 编辑:程序博客网 时间:2024/06/06 18:45
转载自:http://www.fanis.cn/post/16
本节从计算机结构讲到汇编程序编写的最小化启动程序加载器IPL(Initial Program Loader),汇编编译器使用NASM,虚拟机使用QEMU,每个章节都有对应的代码段,是编写操作系统非常实用的一本教材。
这里制作软盘的代码含义如表中所示:
偏移
字节
内容/含义
(参考)值
0
3
跳转到软盘指令开始处的跳转指令
jmp l_start(l_start为软盘内第一条指令处的标号)
3
8
第一个扇区的名字
"xnlosipl"
11
2
软盘每个扇区的大小(字节为单位)
必须为512
13
1
每簇的扇区数
必须为1
14
2
保留扇区数/FAT的起始位置/Boot记录占用扇区
一般为1
16
1
FAT的个数
必须为2
17
2
根目录文件数的最大值
一般为224
19
2
扇区总数
(必须为)2880
21
1
介质描述符
必须为0xf0
22
2
每FAT扇区数
必须为9
24
2
每磁道扇区数
必须为18
26
2
磁头数
必须为2
28
4
隐藏/不使用的扇区数
必须为0
32
4
如果偏移19处值为0,由这个值表示总扇区数
2880
36
1
中断13h的驱动器号
固定为0
37
1
未使用
固定为0
38
1
扩展引导标记
固定为0x29
39
4
卷列序号
0xffffffff
43
11
软盘名称
"xnlhello-os"
54
8
软盘格式名称
"FAT12 "(8字节,空格填充)
62
448
(引导)代码、数据及其它填充字符
……
510
2
标明软盘有无所需的启动代码(在第一个扇区内)
0x55aa(为0x55aa表明有)
下面直接上本章代码:
- ; hello-os
- ; TAB=4
- ;以下的记述用于标准FAT12格式的软盘
- DB0xeb,0x4e,0x90
- DB"HELLOIPL";启动区的名称可以是任意的字符(8字符)
- DW512;每个扇区的大小
- DB1;簇的大小(必须为1个扇区)
- DW1; FAT的起始位置(一般从第一扇区开始)
- DB2; FAT的个数(必须为2)
- DW224;根目录的大小(一般设为224)
- DW2880;该磁盘的大小(必须为2880扇区)
- DB0xf0;磁盘的种类(必须是0xf0)
- DW9; FAT的长度,必须是9扇区
- DW18;1个磁道有几个扇区,必须是18
- DW2;磁头数,必须是2
- DD0;不使用分区,必须是0
- DD2880;重写一次磁盘大小
- DB0,0,0x29;意义不明,固定
- DD0xffffffff;卷标号码
- DB"HELLO-OS ";磁盘名称
- DB"FAT12 ";磁盘格式
- RESB18;空出
- ;程序主体
- 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
- ;信息显示
- DB 0x0a,0x0a;2个换行
- DB "hello,world"
- DB 0x0a;换行
- DB 0
- RESB 0x1fe-$ ;填入0x00,直到510字节
- DB 0x55,0xaa
- ;启动区以外部分的输出
- DB 0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
- RESB 4600
- DB 0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
- RESB 1469432
0 0
- 30天自制操作系统之第一天
- 30天自制操作系统之第1天
- 《30天自制操作系统》第1天
- 30天自制操作系统之第1周(一)【袖珍操作系统怎么转】
- 《30天自制操作系统》之——第03天
- 《30天自制操作系统》之——第04天
- 《30天自制操作系统》之——第05天
- 30天自制操作系统之第11天 制作窗口
- 30天自制操作系统之第17天 命令行窗口
- 30天自制操作系统之第0天备忘梳理
- 《30天自制操作系统》第0天
- 《30天自制操作系统》第2天
- 《30天自制操作系统》第3天
- 《30天自制操作系统》第4天
- 《30天自制操作系统》第5天
- 《30天自制操作系统》第6天
- 30天自制操作系统-第3天
- 《30天自制操作系统》第一天
- 编译安装PHP教程
- windows环境Caffe训练mnist
- Leetcode441. Arranging Coins
- 广播 BroadcasetReceiver
- CSS 9 响应式与自适应
- 30天自制操作系统之第1天
- C语言练习题(二)
- 【iOS10】使用XCode8、Swift3. 操作SQLite3数据库的步骤(包括配置环境和SQLite语句)
- 1002. 写出这个数 (20)
- [USACO2011Dec] Roadblock
- 初探CardView
- oracle初步使用
- Ubuntu16.04 LTS下安装JDK 1.8
- 6.Linux 运行级别