- 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才对