【问题标题】:Using int 21h with inline assembly将 int 21h 与内联汇编一起使用
【发布时间】:2012-03-20 10:19:47
【问题描述】:

我在 Visual C++ 中使用内联汇编,并且几天来一直在尝试让 int 21h 与我的程序一起工作。其他中断起作用(int 3),这让我相信要么我打错了 21 小时,要么它以某种方式被阻止。我只在使用 int 21h 时出现运行时错误。如果我将其注释掉,它可以很好地移动寄存器。

到目前为止,我已经完成了这个:

int _tmain(int argc, _TCHAR* argv[])
{
    __asm {
        mov ah, 1h
        int 21h

        mov dl, al
        mov ah, 2h
        int 21h
    }
}

【问题讨论】:

  • 这是什么程序? Int21h 是一个 DOS 中断。
  • 可能是段错误。据我所知,您不能在 32 位应用程序中使用整数..
  • 如前所述,其他中断确实有效。 int 3 成功地使断点没有错误。我似乎唯一遇到问题的是 int 21h。
  • 如果你想要一个 DOS 程序,请使用 Turbo C++ 或 Open Watcom C/C++ 或 DJGPP。

标签: c++ winapi visual-c++ assembly inline-assembly


【解决方案1】:

您不能在 Windows 程序中使用 DOS 中断;他们是不同的平台

您可以使用int 1int 3 等硬件中断。

【讨论】:

  • 自从我问这个问题以来一直在阅读,这似乎是这种情况。感谢您解释为什么 int 3 有效,现在更有意义了。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多