我在网上冲浪时发现了512字节的os竞赛。
一切都安装在bootsector中。
阅读其中一些源文件后,
我发现在启动例程之前总是有cli
指令。
(在集会中)
use16
org 7c00h
jmp 0:start
start:
cli
do something here..(this section sometimes include int 10h)
我想知道的是
为什么在开始例程之前需要cli
。
在cli
之后,有时他们会使用中断!像int 10h
我想知道为什么他们在cli
之后使用中断会不正常呢?
答案 0 :(得分:6)
1)引导扇区初始化之前(或之内)cli
必需的唯一情况是引导扇区可能在8086上运行。以后的CPU加载ss
导致中断被禁用(推迟)直到下一条指令之后,该指令足以加载sp
并获得有效ss:sp
以供潜在的IRQ处理程序使用。
2)软件中断(例如int 0x10
)不是IRQ,并且未被cli
禁用。在sti
之后很快做cli
以避免弄乱IRQ是正常的。当你试图以512字节的方式挤压某些东西时,做一些没有理智的程序员会考虑允许的愚蠢的事情是正常的(比如让中断禁用)只是为了挤压一个额外的代码字节。
答案 1 :(得分:4)
cli
。
在没有看到实际代码的情况下,很难说明为什么它会在你所指的代码中使用,但通常会有多种原因:
SS:SP
(非常类似于上述内容)基本上,只要硬件ISR以某种不期望的方式干扰主代码,就会禁用中断。
哦,int 10h
与来自硬件的中断请求无关。只是有些ISR用于处理硬件中断(例如键盘或网络),而其他ISR用作各种辅助程序或系统调用,具有方便的接口(您不需要知道ISR的确切位置,矢量数字(10h)就足够了)。 BIOS int 10h
功能允许您更改显示模式并在屏幕上写入文本。