郁闷死了,花了好几天写出的代码,编译也通过了,但是运行时会使dosbox当掉。通过debug,发现问题发生在跳入32位代码段的地方。下午继续研究吧。
GDTPTR fdesc<GDTLEN-1,offset GDTBegin>这里是错的,offset GDTBegin只是偏移,又不是地址
现在留空,然后在 lgdt Fword PTR GDTPTR前加入
mov ax,GDTseg
mov bx,16
mul bx
mov word ptr GDTPTR.base,ax
mov word ptr GDTPTR.base+2,dx
这样应该可以了。不过还没调试,因为这里没有dosbox可以用~