80x86 16 位汇编中的 cli 和 sti 指令的工作示例

问题描述 投票:0回答:0

我想要一个 80x86 16 位汇编中的 cli 和 sti 指令的实际示例,即用这种语言编写的代码示例 这使我能够通过实践了解这些说明的用途,并且比理论更进一步

我知道文档说 cli 禁用中断标志而 sti 启用它并且中断标志不影响 不处理 INT 指令生成的不可屏蔽中断 (NMI) 或软件中断

在我遵循的教程中,我有这段代码:

    mov ax, 0x8000
    cli
    mov ss, ax
    mov sp, 0xF000
    sti
  • 我的测试让我说 cli 和 sti 在课程中给出的示例中没有用,经过多次测试 我能够验证无论我放置 cli 和 sti 还是删除这些指令,结果总是相同的。

  • 讲者针对课程中给出的例子针对不同主题对cli和sti的用处进行了解释 纯粹是理论上的。也就是说,为了安全,你必须把 cli 和 sti 放在一起,以避免错误/崩溃。不和谐的演讲者 说当我初始化段和堆栈偏移时出现问题的可能性为百万分之一。 这意味着他永远无法自己验证他的理论解释,他只是接受这个理论, 没有好奇心去进一步和自己做实验,不可能 要通过实践来验证,因为有百万分之一的机会出现问题

  • 在各种文档/站点上,严格来说没有其他实际示例可以真正演示 cli 和 sti 的作用以及方式 它很有用,只是复制并粘贴了没有示例代码的文档,即 cli 将中断标志设置为 0,并且 sti 将它设置为 1,当它被禁用时,硬件中断将被忽略。 0个使用示例,只是理论句子和 在实践中没有什么可以测试这种东西,法语文档中确实有一个例子,但这个例子也是 比我真正理解的教程的例子没用。也就是说,一个例子初始化了一个段并把 代码行前后的 cli 和 sti,如果我们删除 cli 和 sti,无论如何结果都是一样的(也许我们 如果我们删除 cli 和 sti,我们有百万分之一的机会出现问题,这很好,它让我永远不会检查 实践中的理论)

  • discord 上的另一位演讲者告诉我,他对这一切进行了一些实验,他用汇编程序编码了一段时间,然后在他的 经验他理解为什么你必须把 cli 和 sti,因为否则它会导致问题所以你必须把它和 就是这样,当我让他给我一个实际的例子时(自从他练习以来,这应该是他的拿手好戏) 他不这样做是因为他不在家,但另一方面又给了我一个理论垫,向我解释它有什么用,所以 显然我们可以非常详细地解释它有多么有用,但永远不会证明 实用程序和 80x86 16 位汇编程序中的实际示例。

我说明我对硬件中断不熟悉,我只测试了可以用int调用的软件中断

我在内核模式下,我想要一个导致代码遇到硬件中断问题的实际示例,然后是另一个可以解决问题的 cli 和 sti 示例

assembly x86 interrupt
© www.soinside.com 2019 - 2024. All rights reserved.