第0天---《一个操作系统的实现》第一、第二章 学习笔记

构建一个最简易的“OS(引导扇区【Boot Sector】)”

执行过程

Bios过程:

​ 1.计算机上电后,加电自检

​ 2.寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘的0面0磁道1扇区,如果发现该扇区是以0xAA55⁹结尾,则该扇区被判定为引导扇区(必须包含少于512字节的执行码)

​ 3.一旦发现引导扇区,512字节的内容装载到内存地址0000:7c00处

​ 4.然后跳转到0000:7c00处控制权彻底交给这段引导代码

​ 5.此时,BIOS中的固有程序不再控制计算机,而是由操作系统的一部分来控制。

解释:

​ 1.整个过程BIOS就加载了0磁道0扇区的512Byte数据,也就是如果我们写的OS代码想让BIOS加载就必须把我们的代码放到磁盘的0道0区

​ 2.内存地址是线性的, 如果总共1M内存,那么地址标识范围0X0000 - 0XFFFFF

​ 3.CS和IP是汇编语言中的两个寄存器,cpu执行指令的依据就是去找CS:IP对应内存处的指令

  1. 先用汇编写一个asm文件
    org 07c00h   ;告诉编译器将程序加载到7c00处
    mov ax,cs    ;BIOS交出控制权时,cs=0x0
    mov ds,ax    ;数据段地址 ds=0x0
    mov es,ax    ;扩展段地址 ds=0x0
    call DispStr  ;调用显示字符串例程
    jmp $         ;无限循环
DispStr:
	mov ax,BootMessage
	mov bp,ax     ;ES:BP=串地址
	mov cx,16     ;CX =串长度
	mov ax,01301h ;AH=13,AL=01h
	mov bx,000ch  ;页号为0(BH=0),黑底红字
	mov dl,0
	int 10h       ;10h 号中断
	ret
BootMessage:    db    "HELLO,OS,WORLD!"
time 510-($-$$) db     0   ;填充剩余空间,使生成的二进制代码恰好为512字节
dw   0xaa55        ;结束标志

2.使用Nasm的命令编译asm文件得到大小为512字节的bin文件

nasm boot.asm -o boot.bin

3.通过linux命令将bin文件写到空白软盘的第一个扇区

dd if=boot.in of=/dev/fd0 bs =512 count=1

4.创建软盘镜像

概念:软盘镜像可理解为系统盘,类似于重装操作系统自制的u盘;软盘也就是我们上面代码的载体

​ 4.1打开bochs的bximage工具

​ 4.2输入1,进行创建镜像

​ 4.3输入fd,创建软盘

​ 4.4选择软盘的大小

​ 4.5给出软盘文件名

5.创建bochs的配置文件,第三方修改为 镜像名.img

romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest
floppya: 1_44=boot.img, status=inserted
boot: floppy
输入 bochs -f bochsConf 启动
选择6
输入c,可看到打印效果

7.效果
在这里插入图片描述

汇编知识点

  1. $表示当前行被汇编后的地址

  2. $$表示程序被编译后

  3. − - $表示本行距离程序开始处的相对距离

    重点在操作系统,汇编其他点略过

Bochs重点

前面已经写了bochs基本操作

1.Bochs配置文件的作用:告诉Bochs我们构建的虚拟机长什么样子,例如设置内存,硬盘映像,软盘映像都是哪些文件

2.romimage:它指定的文件时真实机器的BIos

3.vgaromimage:它指的是真实机器的VGA BIOS

4.如果输入不带任何参数的Bochs(省略 “ -f bochsrc ”),并执行他,将在当前目录下寻找以下文件作为默认配置文件:

  • .bochsrc

  • bochsrc

  • bochsrc.txt

  • bochsrc.bxrc(仅对Windows有效)

    Bochs调试指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长雨已停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值