设为首页 加入收藏

TOP

3.1.3 as86汇编语言程序的编译和链接
2013-10-12 06:46:55 来源: 作者: 【 】 浏览:110
Tags:3.1.3 as86 汇编 语言程序 编译 链接

3.1.3  as86汇编语言程序的编译和链接

现在我们说明如何编译链接示例程序boot.s来生成我们需要的引导扇区程序boot。编译和链接上面示例程序需要执行以下前两条命令:

[/root]# as86 -0 -a -o boot.o boot.s // 编译。生成与as部分兼容的目标文件。
[/root]# ld86 -0 -s -o boot boot.o // 链接。去掉符号信息。
[/root]# ls -l boot*
-rwx--x--x1 root  root 544 May 17 00:44 boot
-rw-------1 root  root 249 May 17 00:43 boot.o
-rw-------1 root  root 767 May 16 23:27 boot.s
[/root]# dd bs=32 if=boot of=/dev/fd0 skip=1   // 写入软盘或Image盘文件中。
16+0 records in
16+0 records out
[/root]# 

其中第1条命令利用as86汇编器对boot.s程序进行编译,生成boot.o目标文件。第2条命令使用链接器ld86对目标文件执行链接操作,最后生成MINIX结构的可执行文件boot。其中选项-0用于生成8086的16位目标程序;-a用于指定生成与GNU as和ld部分兼容的代码。-s选项用于告诉链接器要去除最后生成的可执行文件中的符号信息。-o指定生成的可执行文件名称。

从上面ls命令列出的文件名中可以看出,最后生成的boot程序并不是前面所说的正好512B,而是长了32B。这32B就是MINIX可执行文件的头结构(其详细结构说明请参见第16章)。为了能使用这个程序引导启动机器,需要人工去掉这32B。去掉该头结构的方法有以下几种:

使用二进制编辑程序删除boot程序前32B,并存盘。

使用较新的Linux系统(如Fedora 9)上的as86编译链接程序,它们具有可生成不带MINIX头结构的纯二进制执行文件的选项,请参考相关系统的在线手册页(man as)。

利用Linux系统的dd命令。

上面列出的第3条命令就是利用dd命令来去除boot中的前32B,并把输出结果直接写到软盘或Bochs模拟系统的软盘映像文件中(有关Bochs PC模拟系统的使用方法请参考第17章)。若在Bochs模拟系统中运行该程序,可得到如图3-1所示的画面。

 
(点击查看大图)图3-1  在Bochs模拟系统中运行boot引导程序的显示结果

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.1.4 as86和ld86使用方法和选项 下一篇3.2.3 指令语句、操作数和寻址

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: