Orange‘s:一个操作系统的实现学习笔记2

前言

去年就开始学习Orange’s:一个操作系统的实现,今年记录并总结一下学习中遇到的一些问题,由于我汇编基础几乎为0,对计算机也不是很了解,所以写的这些注释和总结难免会有错误和纰漏,敬请原谅。此篇笔记抄的书上的代码已经实际运行过了,有可能后期添加注释的时候出现bug,如果运行不起来,可以删除所有注释再运行。此篇笔记去年参考了很多文章,可能我现在找不全了,等后续有时间我再把参考文章写在对应位置。如果笔记有侵权的地方,请联系我我会删除。

代码实现了什么

代码实现了操作系统从实模式跳转到保护模式,在保护模式下显示一个红色的“P”

操作流程

  1. 编写pmtest1.asm(可以直接复制粘贴下面的代码)
  2. 在相同文件夹下编写pm.inc(可以直接复制粘贴下面的代码)
  3. 使用NASM汇编pmtest1.asm,在终端输入下面指令
nasm pmtest1.asm -o pmtest1.bin

编译完成后会出现一个pmtest1.bin
4. 编写bochsrc(参考学习笔记1中进行修改)

#Configuration file for Bochs

#how much memory the emulated machine will have
megs: 32

#filename of ROM images
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest

#what disk images will be used
floppya: 1_44=a.img, status=inserted

#choose the boot disk.
boot: floppy

#where do we send log messages
log: bochsout.txt

#disable the mouse
mouse: enabled=0

#enable key mapping, using US layout as default
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map

  1. 生成一个虚拟软盘
bximage

参考下图选择配置
在这里插入图片描述
执行完上述流程后,文件目录下会出现一个a.img

  1. 将生成的二进制导入a.img
dd if=pmtest1.bin of=a.img bs=512 count=1 conv=notrunc
  1. 启动bochs

在对应文件目录下输入下面一条指令

bochs

输入完成后回车,根据提示按6回车后,再输入c,bochs启动完成

代码+注释

;pmtest1.asm
%include	"pm.inc"
;常量,宏,以及一些说明
org	07c00h
jmp	LABEL_BEGIN
;跳转到LABEL_BEGIN处执行


[SECTION .gdt]
;GDT
;Descriptor段描述符,64位八个字节
;Descriptor的三个参数依次为段基址,段界限,属性
;在pm.inc中有三个参数如何送到对应位置的代码,所以此处直接填写即可
LABEL_GDT:	   Descriptor       0,                0, 0           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超大青花鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值