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

所属分类: 软件编程 / 其它相关 阅读数: 1726
收藏 0 赞 0 分享

当计算机电源被打开后,它会先进行加电自检(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 赞 0 分享

Scala函数式编程专题--scala基础语法介绍

这篇文章主要介绍了scala基础语法的的相关资料,文中讲解非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

Scala函数式编程专题--scala集合和函数

这篇文章主要介绍了scala集合和函数的的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

浅谈Scala模式匹配

这篇文章主要介绍了Scala模式匹配的的相关资料,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

作为程序员必须了解的缩写和专业名词

这篇文章主要介绍了作为程序员必须了解的缩写和专业名词,文中讲解非常详细,对想学编程的朋友有所帮助,感兴趣的可以了解下
收藏 0 赞 0 分享

ffmpeg播放器实现详解之视频显示(推荐)

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。这篇文章主要介绍了ffmpeg播放器实现详解视频显示,需要的朋友可以参考下
收藏 0 赞 0 分享

ffmpeg播放器实现详解之框架搭建过程

这篇文章主要介绍了ffmpeg播放器实现详解之框架搭建过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Maven命令大全

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),这篇文章主要介绍了maven命令大全,需要的朋友可以参考下
收藏 0 赞 0 分享

分享5个实用的vs调试技巧

vs 是我们平时编写代码时的首选工具,相信也是大多数小伙伴儿的首选调试工具,因为实际操作起来太方便了,代码编写完,一个 F5 就可以愉快的调试了。今天我想向大家推荐几个非常值得了解 vs 调试技巧。
收藏 0 赞 0 分享

十招教你学会破解[教程]

十招教你学会破解[教程]
收藏 0 赞 0 分享
查看更多