是否可以在没有 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.
所以这里我有一个全屏运行的 .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.