【问题标题】:How to make a .com file using C/C++?如何使用 C/C++ 制作 .com 文件?
【发布时间】:2010-10-20 07:13:29
【问题描述】:

我们如何使用 C/C++ 制作 .com 文件?有可能吗?

编辑:我能够使用 darin 的建议成功制作 com 文件。但不知何故,以下程序的exe文件无法转换为com文件。我收到 exe2bin 的“文件无法转换”消息。我正在使用 Borland Turbo C++ 3.0。有什么建议吗?

#include <dos.h>
void interrupt (*oldint65)( );
char st[80] = {"Hello World$"};
void interrupt newint65(void);
void main()
{
    oldint65 = getvect(0x65); 
    setvect(0x65, newint65);
    geninterrupt (0x65);
    geninterrupt (0x65);
    geninterrupt (0x65);
    setvect(0x65, oldint65);
}
void interrupt newint65( )
{
     _AH = 0x09;
     _DX=(unsigned int)st;
     geninterrupt (0x21);
}

【问题讨论】:

  • 原因:要转换的程序存在以下问题之一: * 程序的起点为0100h,但入口点不同。 * 该程序需要段修正。 * 程序代码和数据大于 64 KB。 * 程序有多个声明段 * 该文件不是有效的 .EXE 格式文件。

标签: c++ c com


【解决方案1】:

这取决于你的意思。您想将您的程序编译成 .com 文件吗?如果可能的话,这将取决于您的编译器。
如果你正在编写一个编译器(或类似的东西),并想从你的自己的程序生成一个.com文件,你应该看看COM article on Wikipedia,或者使用@987654322 @ assembler 组装成一个.com 文件:nasm -o hello.com hello.asm

【讨论】:

    【解决方案2】:

    在 C 中,您必须使用 TINY memory model 编译程序。然后就可以使用EXE2BIN或者类似的程序将EXE文件转换成COM文件了。

    【讨论】:

      【解决方案3】:

      另外,可能值得指出的是,您似乎在进行 TSR 编程,这不太可能在 Windows XP/Vista 等非 DOS(即现代)操作系统上完全甚至正常工作。

      您可能需要考虑运行诸如 bochs 之类的 DOS 模拟器,这也可以更轻松地运行诸如 TC++ 之类的遗留开发工具

      【讨论】:

        猜你喜欢
        • 2013-04-29
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 2011-09-26
        • 2014-06-15
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        相关资源
        最近更新 更多