3

我在网上冲浪时发现了 512 字节的操作系统竞赛。

一切都安装在引导扇区中。

在阅读了其中一些源文件后,

cli我发现在开始例行程序之前总是有说明。(组装中)

use16
org 7c00h
jmp 0:start
start:
  cli
  do something here..(this section sometimes include int 10h)

我想知道的是

  1. 为什么cli在开始例行程序之前是必要的。

  2. 之后cli,有时,他们使用中断!就像int 10h我想知道为什么他们cli会在正常之后使用中断?

4

2 回答 2

6

1)唯一需要cli在引导扇区初始化之前(或之内)的情况是引导扇区可能在 8086 上运行。对于以后的 CPU 加载会导致中断被禁用(推迟)直到下一条指令之后,这足够长加载并获得一个有效的供潜在的 IRQ 处理程序使用。ssspss:sp

2) 软件中断(例如int 0x10)不是 IRQ,也不会被cli. 为了避免弄乱 IRQ,在 asti之后不久执行 a 是正常的。cli当您尝试将某些内容压缩为 512 字节时,通常会做一些没有理智的程序员会考虑允许的愚蠢事情(例如禁用中断),只是为了压缩一个额外的代码字节。

于 2012-05-21T03:01:05.380 回答
4

cli仅当我们现在不希望处理硬件中断时才需要。

如果没有看到实际代码,很难说出为什么在您所指的代码中使用它,但通常可能有多种原因:

  • 避免中断服务程序的竞争条件(访问共享可变数据时)
  • 以原子方式更改中断向量表(与上述非常相似)
  • 原子地改变SS:SP(与上面非常相似)
  • 避免在切换 CPU 模式时由 ISR 引起的异常(真实<->受保护)
  • 更精确地测量时间,避免 ISR 贡献
  • ETC

基本上,只要硬件 ISR 可能以某些不希望的方式干扰主代码,您就禁用中断。

哦,与int 10h来自硬件的中断请求无关。只是一些 ISR 用于处理硬件中断(例如来自键盘或网络),而另一些则用作各种辅助例程或具有方便接口的系统调用(您不需要知道 ISR 的确切位置,向量数字(10h)就足够了)。BIOSint 10h功能可让您更改显示模式并在屏幕上写入文本。

于 2012-05-21T03:02:28.517 回答