当前位置: 代码迷 >> 汇编语言 >> TSS中栈切换的有关问题
  详细解决方案

TSS中栈切换的有关问题

热度:8652   发布时间:2013-02-26 00:00:00.0
TSS中栈切换的问题
Assembly code
;tr已经初始化,esp0已经赋值;时钟中断处理程序;8259A时钟中断处理程序      pushad      push ds      push es      push fs      push gs      mov al , EOI      out NIT_M_CTL,al      ;中断处理结束;;;;;;;这里没有保存esp0,当发生下次时钟中断时候,使用的esp0是什么值?此时tss中的以前保存的esp0不能在使用么?      pop gs      pop fs      pop es      pop ds      popad      iretd


没有保存esp0,当发生下次时钟中断时候,使用的esp0是什么值?此时tss中的以前保存的esp0不能在使用么?不是没有改变tss中esp0的值么。

------解决方案--------------------------------------------------------
TSS中的静态字段只是用于发生了由外层向内层特权级变换的转移的时候,CPU会用静态字段也就是内层栈保存区的三组栈寄存器中的一组来初始化目标特权级层。


但是如果这个特权级变换的转移是由任务切换导致的,就不会使用那三组内层栈寄存器组,而是使用通用寄存器esp字段来初始化目标特权级层。
  相关解决方案