使用OpenWatcom编译和链接到C中的二进制简单实模式OS

时间:2014-02-26 01:09:42

标签: c assembly watcom

我有一个简单的(极其简单的)实际模式内核,用汇编编写,我试图尽可能多地移植到C语言。为此,我使用OpenWatcom编译器获取16位二进制代码。

在我的文件“os.c”中,如果我写下这行,它可以工作:

char msg[50];

但如果我这样做:

char msg[50] = "hello";

它只是不起作用。每次我写一个字符串它就会被打破。我到处搜索,尝试了很多废话,没什么。

有没有人知道它可能是什么?

我不能发布超过2个链接,因此所需的所有4个链接都在pastebin中。提前谢谢。

示例:http://pastebin.com/xz96N91A

1 个答案:

答案 0 :(得分:1)

我已经安装了openwatcom,所以我可以看到它给出了什么。显然它是一个大混乱,数据部分似乎应用于代码中间等。

我建议您改为创建COM格式文件。这至少看起来有效。 我使用命令wcl -s -zls -0 -q -ms -bcl=com os.c创建os.com,我用它代替os.bin。我还将加载程序中的远程跳转更新为jmp far 0x0040:0x0100以考虑com入口点。可能还需要设置一些段寄存器,但是对于这个测试,它没有用。

我相信COM个文件的限制为64k,不知道watcom是否强制执行。如果确实如此,并且您需要超过64k,则需要进行更多调查。

除非你真的被迫使用真实模式,否则你可能不会浪费你的时间。