操作系统篇-hello world(免系统运行程序)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载。
一、前言
jmp 0x0000:0x7c00
为什么偏偏是 0x7c00 这个地方?还不太清楚。反正当初定下这个方案的家伙已经被人说了很多坏话!!
通常,主引导扇区的功能是继续从硬盘的其他部分读取更多的内容加以执行。像 Windows 这样的操作系统,就是采用这种接力的方法一步一步把自己运行起来的。






org 07c00h ;告诉计算机将代码加载到内存的07c00h
mov ax, cs
mov ds, ax ;初始化数据段ds
mov es, ax ;初始化附加段寄存器
call DispStr ;调用DispStr来显示字符串
jmp $ ;无限循环
DispStr:
mov ax, BootMessage ;将字符串地址传给寄存器ax
mov bp, ax ; 通过ES:BP来指向显示的字符串
mov cx, ; 表示字符串的长度
mov ax, 01301h ;10h的13号中断,此时通过AH=13传入,AL=,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标
mov bx, 000ch ;BH表示视频区页数
mov dl, ;DL表示在第几列显示(0为第一列)
int 10h ;10H中断
ret
BootMessage: db "Hello,OS World!"
times -($-$$) db ;用times来创建字节0
dw 0xaa55 ;扇区结尾,写入引导程序标志位
下面是打开后的界面:
然后输入1并回车,选择创建一个软盘或硬盘,进入下面的界面:

这个提示是要我们选择要创建的盘符的大小,我们直接回车选择默认的1.44M就行了:
到这里可以为创建的镜像输入名称,也可以用a.img作为默认名。回车后,这时会在bochs安装的目录下面多了一个a.img的文件,这个就是我们刚刚创建的镜像文件:
dd if=boot.bin of=a.img bs= count= conv=notrunc
注意这里我把编译好的boot.bin文件与镜像a.img跟dd放在同一目录,不是同一目录的同学请自行修改路径。
选择自定义,单击下一步进入下一个界面:
这里默认就可以了,直接单击下一步:
这里选择稍后安装操作系统,下一步:
这里选择其他,然后下一步:
这里是处理器的配置,因为我们的程序都很简单,而不是玩游戏,所以选择最低配置就可以了:
选择好内存,单击下一步:
关于网络就随意选都行,反正我们暂时不会涉及网络方面的东西,单击下一步:
IO控制器,直接默认就行,下一步:
虚拟磁盘类型,选择IDE,单击下一步:
创建磁盘,单击下一步:
这里尽量选小一点的磁盘,因为我们用不上的,我们这里是通过软盘来启动的:
选择磁盘文件的位置,然后单击下一步:
单击完成,此时我们的虚拟机就创建好了。
这里我们选择图中红色圈住的地方,来我们刚刚创建好的虚拟机:
选择添加,来添加我们刚刚制作好的软盘:
选择软盘驱动器,单击下一步:
选择使用软盘镜像,单击下一步:
选择我们刚刚的a.img,并勾选启动时连接,单击完成。
操作系统篇-hello world(免系统运行程序)的更多相关文章
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...
- Android应用程序框架层和系统运行库层日志系统源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...
- python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统
python介绍,计算机核心基础,与运行程序有关的三大核心硬件,操作系统 引子 python是什么? 什么是编程语言?为何要有编程语言? 什么是编程?什么是程序?什么是进程?为何要编程? 计算机基础 ...
- 麒麟系统使用root权限运行程序
最近在虚拟机里安装了个国产麒麟系统.(不知道麒麟系统的百度下.) ************************************************** 官方网址:http://www. ...
- 开发系统时候运行程序突然报出“WebDev.WebServer40.exe已停止工作”的错误
已经解决,问题描述:在开发系统时候运行程序突然报出“WebDev.WebServer40.exe已停止工作”的错误,程序调试运行,发现程序在打开数据库时候报错,也就是Connection.Open() ...
- linux 系统shell运行程序不退出
如果通过ssh远程连接到linux系统终端,在shell下执行程序.假如程序名称为app,且程序本身会一直执行不退出,程序执行需要参数文件paramfile. 当我们用 ./app paramfile ...
- 在开发系统时候运行程序突然报出“WebDev.WebServer40.exe已停止工作”的错误的解决办法
问题描述:在开发系统时候运行程序突然报出“WebDev.WebServer40.exe已停止工作”的错误,程序调试运行,发现程序在打开数据库时候报错,也就是Connection.Open()处. 但是 ...
- 如何查看Linux系统下程序运行时使用的库?
Linux系统下程序运行会实时的用到相关动态库,某些场景下,比如需要裁剪不必要的动态库时,就需要查看哪些动态库被用到了. 以运行VLC为例. VLC开始运行后,首先查看vlc的PID,比如这次查到的V ...
- 第一次安装vs2010无法运行程序,系统找不到exe文件,LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
最近在看数据结构的一些书籍,怎奈代码是c写的,所以安装一个编译器vs2010来测试代码,但是建完文件后编译ok,f5却出现错误:无法启动程序,系统找不到指定文件.上网找了一些解决办法,但是仍然无法解决 ...
随机推荐
- 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)
转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...
- python 数据类型---文件二
1.打印进度条 import sys,time for i in range(20): sys.stdout.write("#") sys.stdout.flush() #不等缓冲 ...
- yaf的简单入门
1.目录结构: 2.入口文件 入口文件是所有请求的入口,一般都借助于rewrite规则,把所有的请求都重定向到这个入口文件. 一个经典的入口文件 public/index.php 3.重写规则 需要 ...
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- Android—应用程序开机自启
android开机时候会发送开机广播,我们想要收到广播知道手机开机,才能启动我们的应用程序. 首先要在配置文件中添加相应权限: <uses-permission android:name=&qu ...
- git init和git init -bare区别
1 Git init 和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...
- Linux 入门之网络配置
查看网络状态 ifconfig 修改网络参数 实验环境centos6.5,其他系统自行百度 ls /etc/sysconfig/network-scripts 显示所有文件, vi /etc/sysc ...
- [原创]ubuntu16.04LTS使用细节
如何给自己安装的应用创建桌面图标 拿php开发神器phpstorm为例,找到可执行文件所在路径. 这里是/home/haive/PhpStorm/bin/phpstorm.sh 打开dash,搜索&q ...
- charles工具抓包教程(http跟https)
1.下载charles 可以去charles官网下载,下载地址:http://www.charlesproxy.com/download/ 根据自己的操作系统下载对应的版本,然后进行安装,然后打 ...