自制操作系统Antz(1)——Boot Sector
0.引子
最近在看操作系统底层方面的东西,最开始的为什么是07c00h这个问题就让我对操作系统有了很大的兴趣。所以准备在看书之余顺便写一个操作系统(Anz)。至于为什么这个系统会被叫做Antz,可以参考Antz Uhl Kone(某个日漫男主的名字), 日语为アインズ·ウール·ゴウン , 与之对应的还有接下来准备写的自制脚本语言AntzScript,因为准备是用Java实现解释器,所以如何把AntzScript运行在Antz上是一个很大问题(其实问题就是引入Java)。
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html
Linux内核源码分析地址:https://www.cnblogs.com/LexMoon/category/1267413.html
1.关于Boot Sector
引导扇区(Boot Sector) 通常指设备的第一个扇区,用于加载并转让处理器控制权给操作系统。
1.1 主引导扇区
1.2 MBR成员
3.硬盘分区表DPT,占64字节
4.主引导扇区结束标志55AAH
硬盘的主引导程序代码是从偏移0000H开始到偏移01BDH结束的446字节;主引导程序代码包括一小段执行代码。启动PC 机时,系统首先对硬件设备进行测试,成功后进入自举程序INT 19H;然后读系统磁盘0柱面、0磁头、1扇区的主引导扇区MBR的内容到内存指定单元0:7C00 首地址开始的区域,并执行MBR程序段。
1.3MBR功能
Error loading operating system
Missing operating system
2.Boot Sector实现代码
在BIOS自检等一系列工作完成后,要开始引导了。计算机会将硬盘0面0道1扇区512字节加载到07c00h(0000::7c00)处。
1)为什么是0面0道1扇区?
这个可以理解为是规定,当Bios工作完成后会去将硬盘0面0道1扇区512字节进行加载。但是真实情况是根据“魔数”来确定的,魔数就是有特殊意义的数,更大作用是用来做标记,比如MBR就是在512个字节的最后两个字节填入 0x55 ,0xaa来进行标记的。放在第一个扇区是因为0面0道1扇区是磁盘最开始的地方,一开始检验出有 0x55 ,0xaa就直接开始加载。
2)为什么是07c00h?
这个也可以当作是规定,在IBM文档中没有具体说明07c00h是为什么,但是在世界上第一台个人计算机诞生时,07c00h就是在它当中初次诞生的,那时的DOS最多也就是32K,为了实现MBR中的栈需要512B,为了满足需求取最大为1K,也就是32K-1K,就是07c00h了。
org 07c00h
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $ DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,
mov ax,01301h
mov bx,000ch
mov dl,
int 10h
ret
BootMessage: db "Antz Uhl Kone"
times -($-$$) db dw 0xaa55
第1行的org 07c00h已经做出讲解了,它规定了程序加载的区域。
第2-4行是将ds,es和cs指向相同的地址
第5行call DispStr是调用了子程序实现字符串显示。
在子程序DispStr中:
mov ax,BootMessage 取得显示字符串的地址
mov bp,ax es:ax 串地址
mov cx,16 cx,串长度
mov ax,01301h ah = 13 h al=01h
mov bx,000ch bh = 00 页号 bl = 0ch 字色
mov dl,0
int 10h 10h中断
ret
第6行的 jmp $是为了进行无限循环。
$可以理解为当前行命令的起始地址,$$是表示当前段的起始地址。
第18行的times 510-($-$$) db 0 是将剩下的地址全部填 0 ,在512个字节中,0x55,0xaa占两个字节,剩下的510个字节减去之前用过的($-$$)个字节,身下的512-2-$-$$个字节全部填0。
3.代码生成Img镜像
工具 : NASM , FloppyWriter

先对asm文件使用NASM编译成为bin文件:
nasm os.asm -o os.img

此时在asm同级目录生成了一个os.bin文件。
新建一个文件为 One_Antz.img


此时生成了一个空的img文件。
打开FloppyWriter.exe,选择第二个

先选择我们生成的bin文件,点击下一步

再选择我们创建的img文件。

镜像就制作成功了。

生成的镜像就是我们之前创建的img文件,内容被直接写入了。
现在可以使用虚拟机打开我们创建的镜像了。

设置好镜像后打开虚拟机。

自制操作系统Antz(1)——Boot Sector的更多相关文章
- 自制操作系统Antz -- 系列文章
自制操作系统Antz day10——实现shell(上) AntzUhl 2018-10-10 16:25 阅读:192 评论:0 Linux内核源码分析 day01——内存寻址 AntzUhl ...
- 自制操作系统Antz(13) 显示图片
显示图片只是在多媒体课上看着bmp格式图片的突发奇想,然后就实现在了我自己的操作系统 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 效果图: 显示图片的原理 在之前显卡操作时 ...
- 自制操作系统Antz(12)——承上启下
我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的工作中,AntzOS已经从单调的界面,变得逐渐 ...
- 自制操作系统Antz(5)——深入理解保护模式与进入方法
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 自制操作系统Antz(4)——进入保护模式 (下) 实现内核并从硬盘载入
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 自制操作系统Antz(8)——实现内核 (中) 扩展内核
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html 在前几天的任务中,我们已经简单实现了MBR,直接操作显示器和硬盘操作 ...
- 自制操作系统Antz(7)——实现内核 (上)
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 自制操作系统Antz(6)——内核初步,引入c语言
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...
- 自制操作系统Antz(2)——进入保护模式 (上) jmp到保护模式
Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.htm Linux内核源码分析地址:https://www.cnblogs.c ...
随机推荐
- git error: Your local changes to the following files would be overwritten by merge:xxxxxx ,Please commit your changes or stash them before you merge.的phpstorm解决办法
git报错 error: Your local changes to the following files would be overwritten by merge: .idea/encoding ...
- C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html
简介 现在越来越多的场景需要我们使用网络爬虫,抓取相关数据便于我们使用,今天我们要讲的主角Html Agility Pack是在爬取的过程当中,能够高效的解析我们抓取到的html数据. 优势 在.NE ...
- [原]Jenkins(一)---我理解的jenkins是这样的(附全套PDF下载)
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5330 ...
- 10.31vue(一)
2018-10-31 19:58:45 耳机一个响一个不响,,,该换耳机了 又换个新老师预计讲五天的vue后面的路飞项目用! 这是vue参考连接: https://www.cnblogs.com/ma ...
- axis2与cxf区别
1.CXF支持 WS-Addressing,WS-Policy, WS-RM, WS-Security和WS-I Basic Profile.Axis2不支持WS-Policy,但是承诺在下面的版本支 ...
- hive 限制本地内存使用量
hive.mapred.local.mem Mapper/Reducer 在本地模式的最大内存量,以字节为单位,0为不限制. hive-default.xml <property> < ...
- 使用 jQuery 调用 ASP.NET AJAX Page Method
文章来源:http://chungle.iteye.com/blog/406054 说到轻量级的客户端通信,我注意到大多数人喜欢使用 ASP.NET AJAX Page Method 多于 ASMX ...
- The way to unwind the stack on Linux EABI
I. probe the stack frame structure The original idea is to unwind the function call stack according ...
- VS统计项目代码行数
ctrl + shift + F 输入:b*[^:b#/]+.*$ 选项图如下
- Docker入门2------容器container常规操作
参考转自 https://www.cnblogs.com/jsonhc/p/7760144.html Docker的container 运行一个container的本身就是开启一个具有独立namesp ...