如何写出一个操作系统

想要学习做操作系统其实并不难 也不是那么简单 所以我这里简述 因为需要之前的庞大知识体系首先准备linux系统 下载bochs这个是用来调试系统并且运行系统 再准备一个80386代码1.原理因为系统是通过bios芯片进行检测 初始化各种硬件 比如显示器 硬盘 而且bios不只是一个芯片 显示器对应有他的bios 硬盘也有他的bios 所以不仅仅是一个 然后我们把准备好的代码 5...
摘要由CSDN通过智能技术生成

想要学习做操作系统其实并不难 也不是那么简单 所以我这里简述 因为需要之前的庞大知识体系

首先准备linux系统 下载bochs这个是用来调试系统并且运行系统 再准备一个80386代码
1.原理
因为系统是通过bios芯片进行检测 初始化各种硬件 比如显示器 硬盘 而且bios不只是一个芯片 显示器对应有他的bios 硬盘也有他的bios 所以不仅仅是一个 然后我们把准备好的代码 512b 放到引导扇区0 我们这里的硬盘有2048个扇区 0号扇区是引导扇区 所以呢 我们要把这个引导扇区0号 装载进去我们的程序
bios会自动加载到物理内存 0x7c00到0x7dff位置 我们这里的代码是实模式运行
2.接下来就可以运行这个操作系统了 属于我们自己的操作系统
这里准备一个测试代码
.code16 ;用来表示代码运行在实模式下 16位
BOOTSEG = 0x7c0
ljmp $BOOTSEG, $go
go:
movw %cs, %ax
movw %ax, %ds
movw %ax, %es
movw $msg, %bp
movb $0x13, %ah
movb $0x01, %al
movb $2, %bl
movw msg_len, %cx
movb $0, %dh
movb $0, %dl
int $0x10
jmp .;进入cpu死循环 为了防止 机器码组 运行完毕 进入数据组
msg: ; 这里指的是数据组 默认存储到数据段 数据逻辑地址会默认右移4bit 存储ds段
.ascii “hello, world.”
msg_len:
.word . - msg
.org 0x1fe
.word 0xaa55

这个是.s文件 我们需要用as 汇编器 进行汇编代码 然后通过ld 进行连接 这个代码用来简单的显示一个helloworld 字符串
3.逻辑地址和物理地址区别

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值