我有一个简单的(极其简单的)实际模式内核,用汇编编写,我试图尽可能多地移植到C语言。为此,我使用OpenWatcom编译器获取16位二进制代码。
在我的文件“os.c”中,如果我写下这行,它可以工作:
char msg[50];
但如果我这样做:
char msg[50] = "hello";
它只是不起作用。每次我写一个字符串它就会被打破。我到处搜索,尝试了很多废话,没什么。
有没有人知道它可能是什么?
我不能发布超过2个链接,因此所需的所有4个链接都在pastebin中。提前谢谢。
答案 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,则需要进行更多调查。
除非你真的被迫使用真实模式,否则你可能不会浪费你的时间。