当前位置: 代码迷 >> 汇编语言 >> 保护模式返回实模式出现的有关问题
  详细解决方案

保护模式返回实模式出现的有关问题

热度:10009   发布时间:2013-02-26 00:00:00.0
保护模式返回实模式出现的问题
Assembly code
    mov ax , cs    mov ds , ax    mov es , ax    mov ss , ax    in al , 92h    and al ,11111101b    out 92h , al        ;sti 如果sti放在这里我单步调试问什么下面的代码就不能这确的执行了,而且cs的值也变了    mov ax , 0b800h    mov es , ax    mov si , (80 * 6  + 11 ) * 2    mov byte [es:si] , 'm'    inc si     mov byte [es:si] , 01101100b    sti  ;sti放在这里为什么就一切正常    mov ax , 4c00h    int 21h


纠结中。。。。

------解决方案--------------------------------------------------------
STI是开中断,在模式转换前应该关中断,因为中断会打断模式的切换
------解决方案--------------------------------------------------------
进了保护模式,中断会切换ss:esp,push esp,ss,cs,eip,eflags,加载tss的esp :ss,cs:eip你滴明白的干活?
------解决方案--------------------------------------------------------
那个cs:eip 不是tss 的啊,是intr_gate或者trap_gate或者system_gate里面的
------解决方案--------------------------------------------------------
正是因为你没有设置啊,CPU只管从TSS取,PC上电开始,要么0要么1,所以TR里面就是随机数,TR不合法,所以 常规错误,但是你的常规错误没有handle,所以bochs 会提示CPU HLT WITH IF!=0
------解决方案--------------------------------------------------------
应该不是常规错误,应当是INVALIDATE TSS才对