《操作系统镜像还原》学习

前言

最近一直想学一下操作系统,但是一直没有太多时间,趁最近快过年了,腾出一点时间。买了一本《操作系统镜像还原》。想着自己实现一下操作系统。其实还有一个日本作家的《30自制操作系统》听说也挺不错的。里面还有图形界面。但是那本书,是用的作者自己写的汇编编译器和c编译器。比较一下。还是选择这本《操作系统镜像还原》,看下面书评,说对小白非常友好,讲的非常细。以至于变成太过于唠叨了。想了想,正好适合我。太唠叨的地方,略过不看就行,但是要是一卸作者认为很简单的点,他略过不写了。但是读者没有弄懂,后面找相关资料去弄懂,也是一件麻烦事。

1.配置环境

书上用的环境有点老了,Linux版本是centos6.3,现在centos有些版本已经停止支持了。下载比较麻烦。这里我推荐Ubuntu,还有书上推荐的是Vmware box。这个是免费的。但是我这边用的是Vmware tool。至于环境具体咋安装,我想书上也已经说的比较清楚了,这里就不赘述了。推荐一篇文章《操作系统真象还原》第一章 ---- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险!Love 6的博客-CSDN博客vmware中怎么找bochs。这个讲的蛮好的。

3.记录一下理解的思路

首先BIOS这个程序会运行,这个程序是写在rom里面的,无法擦除。开机就启动。负责检查各种设备的情况 并且建立中断向量表。之后BIOS就将0柱面0磁头1扇区加载到0x7c00这个位置,至于为啥是这个位置,就是历史原因了。我们的MBR就放在0x7c00这个位置。之后,BIOS还会检测一下最后两个字节是否为0x55和0xaa。如果是就加载MBR

填写中断例程**

2.编写MBR主引导

SECTION MBR vstart=0x7c00 ;起始地址编译在0x7c00
    mov ax,cs
    mov ds,ax
    mov es,ax
    mov ss,ax
    mov fs,ax
    mov sp,0x7c00
    ;ah = 0x06 al = 0x00 想要调用int 0x06的BIOS提供的中断对应的函数 即向上移动即完成清屏功能
    ;cx dx 分别存储左上角与右下角的左边 详情看int 0x06函数调用
    mov ax,0x600 
    mov bx,0x700
    mov cx,0
    mov dx,0x184f
    
    ;调用BIOS中断
    int 0x10 

    mov ah,3
    mov bh,0
    
    ;获取光标位置 需要打印信息
    int 0x10
    
    mov ax,message
    mov bp,ax
    
    mov cx,5
    mov ax,0x1301
    
    mov bx,0x71;白底蓝字好cooi
    
    int 0x10 ;写字符串
    		
    jmp $ ;无限循环 一直跳转到当前命令位置
    
    ;字符串声明 
    message db "1 MBR" 
    
    times 510 - ($ - $$) db 0 ;这个times相当于masm的dup的意思,起到重复定义,定义512-2
    db 0x55,0xaa

这个调用BIOS的中断,将字符串显示在屏幕上。这里调用的是当AH为A时,就是显示字符串。

AH功 能调用参数返回参数 / 注释
1 置光标类型  (CH)0―3 = 光标开始行   (CL)0―3 = 光标结束行
2 置光标位置  BH = 页号   DH = 行   DL = 列  
3 读光标位置  BH = 页号 CH = 光标开始行  CL = 光标结束行  DH = 行  DL = 列
4 置显示页  AL = 显示页号
5 屏幕初始化或上卷
6 屏幕初始化或上卷  AL = 上卷行数   AL =0全屏幕为空白   BH = 卷入行属性   CH = 左上角行号   CL = 左上角列号   DH = 右下角行号   DL = 右下角列号
7 屏幕初始化或下卷  AL = 下卷行数   AL = 0全屏幕为空白   BH = 卷入行属性   CH = 左上角行号   CL = 左上角列号   DH = 右下角行号   DL = 右下角列号
8 读光标位置的属性和字符  BH = 显示页 AH = 属性  AL = 字符
9 在光标位置显示字符及其属性  BH = 显示页   AL = 字符   BL = 属性   CX = 字符重复次数
A 在光标位置只显示字符  BH = 显示页   AL = 字符   CX = 字符重复次数
E 显示字符(光标前移)  AL = 字符   BL = 前景色 光标跟随字符移动
13 显示字符串  ES:BP = 串地址   CX = 串长度   DH, DL = 起始行列   BH = 页号   AL = 0,BL = 属性   串:Char,char,……,char   AL = 1,BL = 属性   串:Char,char,……,char   AL = 2   串:Char,attr,……,char,attr   AL = 3   串:Char,attr,……,char,attr 光标返回起始位置  光标跟随移动  光标返回起始位置  光标跟随串移动

3.写入镜像

这里我们先用nasm编译我们编写的代码,得到一个mbr.bin文件

nasm -o mbr.bin mbr.S

之后我们再用dd命令将bin文件写入镜像

dd if=mbr.bin of=hd60M.img bs=512 count=1 conv=notrunc

4.运行

bin/bochs -f bochsrc.disk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值