自制一个能显示helloworld的最简单OS

时间:2023-03-09 08:12:23
自制一个能显示helloworld的最简单OS

《自己动手写操作系统》

  org 07c00h
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,
mov ax,01301h
mov bx,000ch
mov dl,
int 10h
ret
BootMessage: db "Hello,OS world!"
times -($-$$) db
dw 0xaa55

在自己电脑安装nasm。

官网下载地址:http://www.nasm.us/pub/nasm/releasebuilds/2.12/win64/

自制一个能显示helloworld的最简单OS

自制一个能显示helloworld的最简单OS

这样就编译为bin的可执行文件,通过软盘启动计算机,便是操作系统的雏形。

之后要做的是将这个bin文件转换为img文件,我花了几个小时在网上寻找解决办法,最后通过一个winhex的神奇小工具解决了。

具体办法:使用 WinHex 用winhex打开 t.bin 文件,按 ctrl+A 选择全部内容,然后点右键->edit- >copy all->hex values,然后用 winhex 新建一个文件,在弹出窗口选择大小为 1.44M。把刚才复制的十六进制值粘贴至新文件。保存为t.img。

自制一个能显示helloworld的最简单OS

自制一个能显示helloworld的最简单OS

用vmware虚拟机启动这个img文件。

首先创建一个空白的虚拟机,也就是创建时选择稍后安装os。

然后右键点击该虚拟机,选择设置。

在硬件里添加软盘->使用软盘影像->将刚才制作的t.img加载进来。

自制一个能显示helloworld的最简单OS

然后开启虚拟机,成功显示hello world文字。

自制一个能显示helloworld的最简单OS

原理分析总结:当计算机通电启动时,会加电自检,然后寻找启动盘,如果是从软盘启动,计算机会寻找0面0磁道1扇区。发现他如果以0xaa55结束会认为这是一个引导扇区。boot sector。

一个正确的boot sector除了必须以0xaa55结束,还应该包括至少512B执行码。

一旦BIOS发现了引导扇区,会将这512B内容加载至0000:7c00处。然后跳转至0000:7c00处将控制权交给这段代码。