【问题标题】:How to execute another file in Assembly 16-bits如何在 16 位汇编中执行另一个文件
【发布时间】:2017-05-15 15:30:01
【问题描述】:

我正在开发一个简单的 BIOS 重置器,只是为了学习。所以我有主文件,即菜单,名为 Reseta.com,是的,它是一个没有堆栈的微型模型。而且我有一个A.com,要重置的代码在哪里,所以我需要用我的主程序Reseta.com来执行A.com,A.com是用DOS的Debug编写的,是的,我在Windows 98中,但程序将在 MS-DOS 上运行。我尝试使用中断 21,例如服务 4Bh、3DH,但我还没有成功。最简单的方法是如何做到的?只需调用“A.com”文件,它就会从中断 21 以服务 0 返回 DOS。谢谢,为了更容易理解,我正在寻找类似 WinExec(); 的东西。在 WinAPI 中,当然,在汇编 16 位到 MS-DOS 中。

PS:我正在使用 TASM 和 TLINK /t 来编译代码...

【问题讨论】:

  • 我没有使用 NASM,我使用的是 TASM,并且此链接中的示例对我不起作用... :(
  • 请出示您的代码。
  • @user3587527 :该代码已经过验证,可以在实际 MS-DOS 的几个不同化身下工作,所以我对此非常有信心,尽管我显然无法做出任何保证。

标签: assembly interrupt dos real-mode windows-98


【解决方案1】:

听起来你自己也能做到,所以我只是给你一些提示。

.com 只不过是字节码。您可以简单地将文件加载到 RAM,然后跳转到它。确保代码从 4 字节边界开始。

或者,如果软重启就足够了,您可以简单地在程序中调用int 19h,它会跳转到引导加载程序并重新加载 DOS。

(另外,这里是Ralf Brown's Interrupt List。这是一部真正的经典之作。它可能会在某个时候派上用场。请注意:它是巨大的。)

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多