想要学习做操作系统其实并不难 也不是那么简单 所以我这里简述 因为需要之前的庞大知识体系
首先准备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.逻辑地址和物理地址区别