汇编指令CLI/STI

您所在的位置:网站首页 sti指令目的 汇编指令CLI/STI

汇编指令CLI/STI

2023-06-12 20:29| 来源: 网络整理| 查看: 265

CLI禁止中断发生 STI允许中断发生

       这两个指令只能在内核模式下执行,不可以在用户模式下执行;而且在内核模式下执行时,应该尽可能快的恢复中断,因为CLI会禁用硬件中断,若长时间禁止中断会影响其他动作的执行(如移动鼠标等等),系统就会变得不稳定。在标志寄存器中中断标志清零的情况下,可以以“int  ××”的形式调用软中断。

       程序员可以改变段地址和偏移地址,但是在这个过程中如果需要改变段寄存器SS和SP必须禁止中断,当改变完成后再恢复中断(也就是说在cli指令后需要有与其配对的sti指令,否则计算机--最常见的反应就是崩溃)        在对 ss 和sp操作的时候,  如果有中断发生,中断的保存现场的操作是将相关寄存器值保存到ss:sp指向的地址. 如果ss 或者sp没有完成赋值操作, 这时候ss:sp指向的地址则是不期望的地方. 如果将系统或者其他应用的数据覆盖,会导致系统/应用崩溃.          比方说,下面这个程序段(没有屏蔽中断):           (1)   mov   ax,100h           (2)   mov   ss,ax           (3)   mov   sp,200h           假设在执行完指令(2)时产生了一个计时器中断。这时SS等于100h,但是SP还没有来得及改变。这样就是说堆栈的段地址正确,但偏移地址还是原先堆栈的偏移地址。        下面是两条规则:           1)在改变SS:SP之前,必须用cli指令屏蔽中断,然后等操作执行完立即用sti指令恢复           2)SS:SP需要设置在空闲的内存地址,不要建立在其他的程序(尤其是系统的)代码区           正确的写法:      cli      mov   ax,100h      mov   ss,ax      mov   sp,200h      sti ———————————————— 版权声明:本文为CSDN博主「zang141588761」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/zang141588761/article/details/52325106/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3