我有一个用汇编编写的简单(极其简单)实模式内核,我正在尝试尽可能多地移植到 C。为了做到这一点,我正在使用OpenWatcom编译器进行16位二进制代码。
在我的文件"os.c"中,如果我写下这一行,它可以工作:
char msg[50];
但如果我这样做:
char msg[50] = "hello";
它只是不起作用。每次我写一个字符串时,它都会被破坏。我到处搜索,尝试了很多废话,什么都没有。
有谁知道它可能是什么?
我不能发布超过 2 个链接,所以所需的所有 4 个链接都在 pastebin 中。提前谢谢。
示例:http://pastebin.com/xz96N91A
我已经安装了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,您将不得不调查更多。
除非你真的被迫使用真实模式,否则你可能不应该在上面浪费时间。