【问题标题】:"Safety net" utilities (or tricks) for developing ASM under DOS?在 DOS 下开发 ASM 的“安全网”实用程序(或技巧)?
【发布时间】:2011-09-02 06:48:28
【问题描述】:

在 Windows 中,当在 Assembly 中编程时——例如,在 Visual Studio 中的 .cpp 文件中的内联汇编——开发环境可以保护我免于自己犯的愚蠢错误。如果我在子程序退出时破坏了 ESP 寄存器,它会让我知道发生了特定的事情,但它仍然是阳光明媚的。当我不注意并且让我的代码写入无效的内存位置时,唯一崩溃的是我自己的程序,我可以在几秒钟后立即返回编辑。在 DOS 中,这些错误总是需要重新启动。

我知道这在很大程度上是由于 Windows 具有与 DOS 不同的内存模型(虚拟/保护模式与实模式),这就是为什么容易崩溃的 Windows 程序在大多数情况下很少会造成超出其自己的执行领域。

但我仍然想知道过去或现在是否曾经存在过一个 DOS 实用程序,它充当正在进行中的可执行文件的一种安全网,从而减少了整个 DOS 环境的机会(阅读:计算机本身,或者至少是运行 DOS 的模拟器)不会因为低级开发人员错误而冻结?

【问题讨论】:

  • 我一开始就不会在 DOS 上做 ASM 并解决了问题:P,DOS 只是 QDOS 的快速改造,它并不需要很多这些东西。有一件事可以肯定的是,如果你搞砸了必须重新启动整个操作系统,那么一段时间后你一定会少犯错误。

标签: assembly dos


【解决方案1】:

您可以在编写程序时考虑使用 32 位 DOS 扩展器,例如 DOS/4G、DOS/32 等 - 它会在 DOS 周围启动保护模式包装器。这至少会捕获无效指令和大多数内存错误,打印出异常处理程序报告并将您转储回 DOS shell。

您仍然可以使用许多 DOS/BIOS 中断函数,但您实际上是在编写 32 位程序而不是 16 位程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多