Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1016893
  • 博文数量: 146
  • 博客积分: 3444
  • 博客等级: 中校
  • 技术积分: 1602
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-21 15:18
文章分类

全部博文(146)

文章存档

2014年(9)

2013年(3)

2012年(6)

2011年(44)

2010年(38)

2009年(46)

分类:

2009-04-08 17:31:09

 
调试成功的第一个boot程序.
根据电脑的启动过程,BIOS完成检测后,首要要做的事情就是去读入启动设备上第一个扇区的数据到内存地址0x7c00中(而不管这第一个扇区中放的倒底是不是启动引导程序,如果不是结果肯定只有一个--死机),然后执行这段程序,那当然如果我们用这个小程序再去载入其它更多的功能更强的程序,这个程序再去载入更强更强的程序,基本上操作系统就完成载入了.
所以要我如果要研究操作系统,首先要研究的就是这个放在启动设备第一扇区的大小只有512B的小程序,这个程序,你可以随便写,但有一个要求,就是大小只能是512B(如果没有这么长,后面你填0也得填到512B长),而且最后两个字节的数据固定为0xAA55(510是55,511是AA).
 
再假如,你已经用汇编把这个程序写好了,也编译成功了,假设编译后的二进制文件叫boot.bin,你还得把这个程序写入启动设备的第一个扇区去,这个过程比较不爽,因为考虑到启动速度的问题,写这个程序的时候,我是在DOS下写的,要把这个东东写到软盘的第一个扇区(千万别往硬盘上写,否则你就得重装操作系统了),还真不好找工具,最后想想,不就写个数据到第一扇区吗?
BIOS的int 13h不就可以干这个事情吗?
但是我现在的汇编知识还有限,不知道怎么把一个文件直接写入一个扇区,这时候想到了debug,
先用debug把上面编译的boot.bin载入内存,并记住载入的地址
然后再地址0:200的地方,写一小段汇编程序调用int 13h,把上面载入地址写到软盘的第一个扇区
写完汇编后,最后一定要加入mov ax,4c00  ; int 21 ,否则执行的时候,程序就死在那里
然后用r cs  ; r ip命令把cs 和ip 指向0:200
然后用g命令执行.
 
然后重新启动电脑,并把软盘设为第一启动设备,你就可以看到你刚才写的引导程序的执行效果了
 
随便再说一句,这个软盘被这样写过以后,DOS又认不到它了,得重新格式化才能再被DOS使用
不过用int 13h去读写是没有问题的.
阅读(1882) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~