如何在 16 位汇编中执行另一个文件
How to execute another file in Assembly 16-bits
我正在开发一个简单的BIOS重置器,仅供学习。所以我有主要文件,那就是菜单,名为 Reseta.com,是的,它是一个没有堆栈的微型模型。而且我有一个A.com,要重置的代码在哪里,所以我需要用我的主程序执行A.com,Reseta.com,A.com是在DOS的Debug中写的,并且是的,我在 Windows 98,但程序在 MS-DOS 上会 运行。我试过中断 21,比如服务 4Bh、3DH,但我还没有成功。最简单的方法是怎么做?只需调用 "A.com" 文件,它 returns 到 DOS,服务 0 来自中断 21。谢谢,为了让它更容易理解,我正在寻找类似 WinExec(); 的东西。在 WinAPI 中,但当然,在 MS-DOS 的 16 位汇编中。
PS:我正在使用 TASM 和 TLINK /t 来编译代码...
听起来你自己就能做到,所以我只是给你一些提示。
A .com
只不过是字节码。您可以简单地将文件加载到 RAM,然后跳转到它。确保代码从 4 字节边界开始。
或者,如果软重启就足够了,您可以简单地在程序中调用 int 19h
,它会跳转到引导加载程序并重新加载 DOS。
(还有,这里是 Ralf Brown's Interrupt List。这是真正的经典。它可能会在某些时候派上用场。请注意:它是巨大的。)
我正在开发一个简单的BIOS重置器,仅供学习。所以我有主要文件,那就是菜单,名为 Reseta.com,是的,它是一个没有堆栈的微型模型。而且我有一个A.com,要重置的代码在哪里,所以我需要用我的主程序执行A.com,Reseta.com,A.com是在DOS的Debug中写的,并且是的,我在 Windows 98,但程序在 MS-DOS 上会 运行。我试过中断 21,比如服务 4Bh、3DH,但我还没有成功。最简单的方法是怎么做?只需调用 "A.com" 文件,它 returns 到 DOS,服务 0 来自中断 21。谢谢,为了让它更容易理解,我正在寻找类似 WinExec(); 的东西。在 WinAPI 中,但当然,在 MS-DOS 的 16 位汇编中。
PS:我正在使用 TASM 和 TLINK /t 来编译代码...
听起来你自己就能做到,所以我只是给你一些提示。
A .com
只不过是字节码。您可以简单地将文件加载到 RAM,然后跳转到它。确保代码从 4 字节边界开始。
或者,如果软重启就足够了,您可以简单地在程序中调用 int 19h
,它会跳转到引导加载程序并重新加载 DOS。
(还有,这里是 Ralf Brown's Interrupt List。这是真正的经典。它可能会在某些时候派上用场。请注意:它是巨大的。)