nasm实现的用vmware运行自做的linux启动盘的引导代码

当计算机电源被打开后,它会先进行加电自检(POST),然后寻找启动盘,如果是选择从软盘启动,计算机就会查找软盘的0面0磁道1扇区,如果发现它以0xAA55结束,则BIOS认为它是一个引导扇区,然后BIOS就会把引导扇区的前512字节的引导代码拷贝到内存的0000:7c00处并将控制器彻底交给这段引导代码。

简单的引导代码如下所示:

代码如下:

org 07c00h ;告诉编译器加载到07c00h处

mov ax, cs
mov ds, ax
mov es, ax

call DispStr ;调用显示字符串函数

jmp $; 无限循环

DispStr:
mov ax, BootMessge
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessge: db "hello, OS world!"
times 510 - ($ - $$) db 0
dw 0aa55h

这段代码时用nasm写的,它类似于masm的语言。org 07c00h命令就是将命令后面的代码中的偏移地址都加上07c00h,这样程序就相当于在0000:7c00出执行了。按书中所讲的,用命令nasm bootsector.asm -o boot.bin生成引导代码boot.bin,然后将boot.bin写入软盘的0面0磁道1扇区就可以了。问题就来了,我没有软盘怎么搞,不过在wmware虚拟机中貌似可以用软盘的映像文件来启动,所以就想到自己制作一个映像文件来代替软盘来作为启动盘,不过怎么创建这个映像文件呢?

以前记得用linux下的dd命令做过linux的启动盘,dd应该是可以制作的,于是在网上找了下dd制作映像文件,果然是可以的,制作方法如下:

1 先制作一个空的软盘映像文件diska.img(1.44Mb的软盘映像文件):

dd if=/dev/zero of=diska.img bs=512 count=2880

2 制作一个包含boot.bin的映像文件boot.img:

dd if=boot.bin of=boot.img bs=512 count=1

3 将diska.img中1个扇区后面的数据拷贝到boot.img的后面

dd if=diska.img of=boot.img skip=1 seek=1 bs=512 count=2879

这样就做成了一个大小为1.44Mb的包含引导代码的映像文件。

后面的事就好办了,直接在wmware创建一个空的虚拟机,在设置中将Floppy的路径设置为上面制作的引导扇区的路径就ok了,如下图那样:

设置Floppy连接,断开CD/DVD连接,启动虚拟机就可以看到下面的画面了:

 

总结:这个小的代码的编写和运行还是能让自己对系统启动有一个更深的认识,不过有个不懂的就是怎么用ISO镜像文件启动,怎么将引导代码写入ISO镜像文件,依然没有找到很好的方法解决。

(0)

相关推荐

  • win7中VMware安装CentOs7搭建Linux环境教程

    最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享. 我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware,然后在虚拟机中安装CentOs7,搭建我需要的Linux环境. linux环境搭建参考文档:http://www.jb51.net/article/105106.htm 一.VMware和CentOs简介 1.VMware是一个虚拟PC的软件,可以在现有的操纵系统上虚拟出一个新的硬件环境,相当于模拟出

  • Linux下VMware workstation的3种使用技巧

    很多人都说虚拟机不易管理,原因是我们对于虚拟化的使用技巧掌握的还不是很好.今天,我们就来看三个Linux下的VMware workstation使用技巧. VMware workstation使用技巧一.实现VMWare桥接无线网卡上网,不再只限于用NAT 环境:宿主机为UBUNTU8.04_amd64,VMware workstation 6.0.x 在UBUNTU下(实际上是在LINUX作宿主机的情况下)使用VMWare一直有两个大家公认的问题:一是声卡占用的问题:二是桥接无线网卡的问题.关

  • VMware中Linux共享mysql数据库的方法

    win7 +Navicat Lite 9+ VMware7 在VMware中安装openSUSE11.x mysql5 Navicat Lite8\9 VMware网络连接方式 桥接(Bridged) 两个重要的设置 1)防火墙(这个如果不设置,防火墙启用时,从其它机器永远连接不上.) 2)用户帐户(linux Navicat Lite8)(这个如果不设置,从其它机器永远连接不上.) 上图表明指定的用户root可以从任意一个主机上登录. 如果Host设为:192.168.0.%表明用户root可

  • linux常用命令之VMware10中安装CentOS 6.4图文教程

    小编用过的Linux系统也就是现在主流的企业级linu系统RedHat跟CentOS,这边主要介绍下CentOS 6.4的安装RedHat和CentOS差别不大,CentOS是一个基于RedHatLinux 提供的可自由使用源代码的企业级Linux发行版本. CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RED HAT那样需要花钱购买支持服务! 首先安装VMware Workstation这边就不多介绍了,可自行google或者度娘! 下面开始介绍安装过程 第一步,文件 → 新

  • Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7(图文教程)

    一. VMware简介: VMware是一个虚拟PC的软件,可以在现有的操纵系统上虚拟出一个新的硬件环境,相当于模拟出一台新的PC,以此来实现在一台机器上真正同时运行两个独立的操作系统. VMware的主要特点: 不需要区分或重新开机就能在同一台PC上使用两种以上的操作系统: 本机系统可以与虚拟机系统网络通信: 可以设定并且随时修改虚拟机操作系统的硬件环境. VMware Workstation10.0.3下载地址:http://www.jb51.net/softs/102992.html 二.

  • VMware中linux环境下oracle安装图文教程(一)

    安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装配置系统环境 安装linux , 所有服务都不选择,只是选择安装开发工具,不要安装防火墙(当然也可以在后面关闭)打开终端,执行如下命令,检查安装包,没有的都要安装 make, glibc, libaiocompat-libstdc++, compat-gcc-34, compat-gcc-34-c++, gc

  • VMWARE安装与VMWARE下LINUX系统安装(图文教程)

    本篇文章主要是介绍了VMWARE安装和VMWARE下LINUX系统安装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 1.下载安装VMware,我安装的是VMware 12.VMware从11开始不再支持32位系统,32位系统请安装10. VMware官方功能特性介绍http://www.vmware.com/cn/products/workstation VMware下载安装.地址:http://www.epinv.com/post/6304.html当然可以自己百度. VMware安装

  • VMware Workstation下安装Linux教程(图文)

    下载VMware Workstation VMware Workstation v12.1.1 中文破解版 精简自动激活:http://www.jb51.net/softs/149849.html VMware Workstation 12 v12.0.1专业版 中文官方安装版(附序列号):http://www.jb51.net/softs/453004.html VMware Workstation的安装密匙 安装完成后点击 许可证 : 5A02H-AU243-TZJ49-GTC7K-3C61

  • VMware给虚拟机安装linux系统

    在前面的讲解(http://www.jb51.net/article/97357.htm)中,我们已经在VMware虚拟机管理软件中,创建了一台虚拟的PC,但还没有安装linux操作系统.这里,我们继续来讲解如何给虚拟机安装linux的CentOS版本的系统. 1. 点击VMware的虚拟机界面,选择我们创建好的虚拟机CentOS6.6,然后双击虚拟机中模拟的光驱设备.如下图: 2. 更改光驱设置,使用ISO映像文件来安装linux系统. 3. 开启该虚拟机,相当于打开电脑的电源启动电脑. 开启

  • VMware中linux环境下oracle安装图文教程(二)ORACLE 10.2.05版本的升级补丁安装

    首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入Disk1.然后执行安装: $ ./runInstaller 执行脚本 # /u01/app/oracle/10.2.0/db_1/root.shRunning Oracle 10g root.sh script...The following environment variables are set as:    ORACLE_OWNER= oracle   

随机推荐