| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1916 人关注过本帖, 1 人收藏
标题:[原创]使用masm8写磁盘引导程序的思考
只看楼主 加入收藏
smilebit
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-7-2
收藏(1)
 问题点数:0 回复次数:0 
[原创]使用masm8写磁盘引导程序的思考
〈〈自己动手写操作系统〉〉一书,相信不少人看过,其中作者使用nasm汇编工具写了一个很简单的磁盘引导程序,其中的原理写的也很明白。最近我想用masm8。0写一个。毕竟微软目前很少有人可以与之相抗衡,学习masm的人应当多一些,当程序写大了,更多人的会更容易理解。如果你看过Linux 0。98版本的引导程序,你就知道差不多大约300多行吧,加上系统的head.s,和kernel.s也就有一千左右吧。也这是我想用masm8。0写一个的原因。但多次实验,结果不理想。

第一:在masm8。0中程序的入口是一定要有的。因此编译后的程序二进制文件,在其程序的开头会加入一些代码(由编译器或者是链接器)。这和nasm生成的二进制文件一开头就是二进制的机器操作指令极大的不一样。

第二:就是如何定义最后一个字为:aa55h的问题。(aa55h是引导区的启动标识)在nasm中很简单,就是在最后放一条语句: dw 0xaa55 这就ok了。但在masm中则一定要以end 结束,或以 end main (main为入口过程),这时生的二进制则不是以aa55h结束的。为了能让它以aa55h结束,我试着直接修改二进制文件,结果也不行。:(

第三:masm编译后生成*.obj文件,其中经过查有一些很特殊的东西(我想可能是用于link使用的),即使都用汇编指令不用库文件(毕竟在一台裸机,它是不知道有微软的),也是如此。而nasm则会生成很纯的二进制机器指令。

最后,(个人观点)微软为了保持其统治地位,在幕后做了很多我们所不为人知的事情。而且masm8.0也不在是真正意义上的汇编了,在NT下你是不能直接访问硬件,而是用WIN32API函数,以前DOS,WIN95/98/ME是可以的,这主要是为了安全。

所以,感觉用masm8.0写一个磁盘引导序有点困难。(或有点不太可能)。虽然网上也有其他人用masm写的,但经我试过之后,还没有找到正确的。希望能起点抛砖引玉的作用。
搜索更多相关主题的帖子: 引导程序 磁盘 思考 
2008-07-02 11:31
快速回复:[原创]使用masm8写磁盘引导程序的思考
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016625 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved