首页 > 代码库 > 操作系统篇-hello world(免系统运行程序)
操作系统篇-hello world(免系统运行程序)
一、前言
jmp 0x0000:0x7c00
为什么偏偏是 0x7c00 这个地方?还不太清楚。反正当初定下这个方案的家伙已经被人说了很多坏话!!
通常,主引导扇区的功能是继续从硬盘的其他部分读取更多的内容加以执行。像 Windows 这样的操作系统,就是采用这种接力的方法一步一步把自己运行起来的。
1 org 07c00h ;告诉计算机将代码加载到内存的07c00h 2 mov ax, cs 3 mov ds, ax ;初始化数据段ds 4 mov es, ax ;初始化附加段寄存器 5 call DispStr ;调用DispStr来显示字符串 6 jmp $ ;无限循环 7 DispStr: 8 mov ax, BootMessage ;将字符串地址传给寄存器ax 9 mov bp, ax ; 通过ES:BP来指向显示的字符串 10 mov cx, 16 ; 表示字符串的长度 11 mov ax, 01301h ;10h的13号中断,此时通过AH=13传入,AL=1,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标 12 mov bx, 000ch ;BH表示视频区页数 13 mov dl, 0 ;DL表示在第几列显示(0为第一列) 14 int 10h ;10H中断 15 ret 16 BootMessage: db "Hello,OS World!" 17 times 510-($-$$) db 0 ;用times来创建字节0 18 dw 0xaa55 ;扇区结尾,写入引导程序标志位
下面是打开后的界面:
然后输入1并回车,选择创建一个软盘或硬盘,进入下面的界面:
这个提示是要我们选择要创建的盘符的大小,我们直接回车选择默认的1.44M就行了:
到这里可以为创建的镜像输入名称,也可以用a.img作为默认名。回车后,这时会在bochs安装的目录下面多了一个a.img的文件,这个就是我们刚刚创建的镜像文件:
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
注意这里我把编译好的boot.bin文件与镜像a.img跟dd放在同一目录,不是同一目录的同学请自行修改路径。
选择自定义,单击下一步进入下一个界面:
这里默认就可以了,直接单击下一步:
这里选择稍后安装操作系统,下一步:
这里选择其他,然后下一步:
这里是处理器的配置,因为我们的程序都很简单,而不是玩游戏,所以选择最低配置就可以了:
选择好内存,单击下一步:
关于网络就随意选都行,反正我们暂时不会涉及网络方面的东西,单击下一步:
IO控制器,直接默认就行,下一步:
虚拟磁盘类型,选择IDE,单击下一步:
创建磁盘,单击下一步:
这里尽量选小一点的磁盘,因为我们用不上的,我们这里是通过软盘来启动的:
选择磁盘文件的位置,然后单击下一步:
单击完成,此时我们的虚拟机就创建好了。
这里我们选择图中红色圈住的地方,来我们刚刚创建好的虚拟机:
选择添加,来添加我们刚刚制作好的软盘:
选择软盘驱动器,单击下一步:
选择使用软盘镜像,单击下一步:
选择我们刚刚的a.img,并勾选启动时连接,单击完成。
下面是本文中用到的相关工具的下载地址
操作系统篇-hello world(免系统运行程序)