是否可以在没有 OS 的情况下将 .EXE 文件从 .ASM 代码调用到 运行?

Is it possible to call an .EXE file from an .ASM code to run without an OS?

所以这里我有一个全屏运行的 .EXE 文件,我需要用 .ASM 语言调用它。为了更清楚,我正在尝试制作一个 OS 原型(idk 如果它让我听起来很生气),我有一个 .EXE 文件,我需要从 .ASM 调用代码。我是一名学习者,所以我不确定这是否可能,但根据网上的其他答案,我必须制作一个 basic I/O 子系统,内存管理, 和 stuff (OS 通常会这样做)。我想要一个示例,其中从 .ASM 代码调用 .EXE while,并执行 .EXE

谢谢!即使您只读了这篇文章:)

如果您需要 .EXE 文件及其组件,我可以为您提供,如果您能帮助我...

大多数 .EXE 文件使用操作系统服务,如果不提供这些服务将无法运行。更具体:DOS .EXE 文件需要 DOS API,例如INT 21h 出现。应用程序使用的最突出的操作系统服务是文件系统driver。 .EXE 文件中的代码要求操作系统 打开一个名为 DATA.BIN 的文件,由操作系统在磁盘上定位该文件。您不能 运行 .EXE 试图在没有任何操作系统的情况下访问文件的文件。

如果您正在编写自己的操作系统,则必须实现一种从操作系统加载 DOS 内核(例如 MS-DOS、FreeDOS)的方法,以便 .EXE 文件可以访问它需要的系统服务,或者您的操作系统需要实现 DOS-compatible 服务。加载和执行 .EXE 文件是一项 straight-forward 任务(假设您已经可以访问文件)。您首先加载 header。 header表示EXE文件中executable code/data的开始和大小。您必须加载该区域,最后您需要加载重定位(重定位的大小和长度 table 也包含在 EXE header 中),并在将堆栈设置为EXE 中请求的地址 header 并跳转到入口点。

如果你的操作系统加载了一个DOS内核,DOS内核已经实现了加载和执行EXE文件,所以你可以通过调用int 21h/AX将loading/starting的过程委托给DOS内核=4B00h.