自制操作系统(一、环境配置和第一个操作系统)

一、介绍

这个系列用于自制操作系统,不会太长,但是功能应有尽有,进度很快

作者是准备升初一的学生,但是五年级就自学了微积分,复变函数等

其他的教程和书籍的环境配置总是出问题,要么就是Linux,要么就是32位电脑,对Windows64x用户非常不友好,我的教程适用于任何电脑

其他的教程和书籍要么要深厚的计算机底层基础,要么就像haribote(《30天自制操作系统》)一样只有外部工作

二、环境配置

我不喜欢太繁琐的教程,先放张今天的效果图

下载nasm
下载Cygwin
下载VMware

下载教程和配置我就不说了,网上都有

VMware用法可以参考这一篇:VMware环境配置

三、写操作系统源代码

用的是汇编语言nasm

建议学一下汇编语言

本教程不用C,只有汇编,但是代码逻辑简单

新建一个hanos.asm文件

[org 0x7c00]

start:
	
	mov bp, 0x8000
	mov sp, bp

	mov ax, 0x0600
	mov bx, 0x0700
	mov cx, 0
	mov dx, 0x184f
	int 0x10

	mov ah, 0x02
	xor bh, bh
	mov dh, 0
	mov dl, 0
	int 0x10

.print:
	mov ah, 0x0E

	mov al, 'M'
	int 0x10

	mov al, 'y'
	int 0x10

	mov al, 'O'
	int 0x10

	mov al, 'S'
	int 0x10

	mov al, 0x0D
	int 0x10
	mov al, 0x0A
	int 0x10






times 510-($-$$) db 0
dw 0xAA55

总共30行代码,不长,分析一下

[org 0x7c00]:让程序从0x7c00,即引导扇区开始执行,任何操作系统都是这样

start:,.print:,相当于C语言的标签,不会被编译成机器码,是给编译器看的

5-18行,清屏并把光标移动到左上角

mov ah, 0x0E:把0x0E赋值给ax寄存器的高位,即调用打印功能

mov al, 'M':把M的编码赋值给ax寄存器的低位,即准备打印M

int 0x10:系统0x10中断,即打印al的值

0x0D是换行的编码,但光标不会回到第一个字符

0x0A是回车的编码,即光标回到第一个字符

times 510-($-$$) db 0

dw 0xAA55

这两行把剩下的字节直到510都填上0,和操作系统文件的标志0xAA55,把引导扇区填满

在当前目录打开终端,用nasm编译成二进制文件

nasm hanos.asm -o hanos.bin

点开 Cygwin.bat,输入

cd /
dd if=/dev/zero of=hanos.img bs=512 count=2
dd if=hanos.bin of=hanos.img bs=512 count=1

 意思是跳转到当前目录,创建img文件,并把hanos.bin写进去

根据VMware里的配置,选择软盘为hanos.img

开启虚拟机

成功了! 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值