操作系统篇-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却出现错误:无法启动程序,系统找不到指定文件.上网找了一些解决办法,但是仍然无法解决 ...
随机推荐
- CYQ.Data、ASP.NET Aries 百家企业使用名单
如果您或您所在的公司正在使用此框架,请联系左侧的扣扣,告知我信息,我将为您添加链接: 以下内容为已反馈的用户,(收集始于:2016-08-08),仅展示99家: 序号 企业名称 企业网址 备注 1 山 ...
- Sublime配置python开发环境
Package Control Package Control 是Sublime 里直接安装附加插件的包管理器.可以通过以下步骤手动安装: 1.点击Preferences > Browse Pa ...
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- javascript单元测试框架mochajs详解
关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...
- 一个表缺失索引发的CPU资源瓶颈案例
背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...
- jQuery2.x源码解析(缓存篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...
- Python多线程爬虫爬取电影天堂资源
最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...
- C#事件-使用事件需要的步骤
事件是C#中另一高级概念,使用方法和委托相关.奥运会参加百米的田径运动员听到枪声,比赛立即进行.其中枪声是事件,而运动员比赛就是这个事件发生后的动作.不参加该项比赛的人对枪声没有反应. 从程序员的角度 ...
- Linux环境变量设置
修改环境变量PATH 最近为root添加一个环境变量发现sudo su进去没有变化所以总结了一下所有设置环境变量的方法: 查看PATH:echo $PATH 直接在命令行修改,就可以使用,但是只有在当 ...