今天早上解决了VM86在VPC上运行总是出现Debug异常的问题,原因是我自以为无关紧要,漏写了一句对eflags的有效性进行校验。我还google VALID_FLAG的值,后来发现文档是有给出的。
#define VALID_FLAG 0xDFF
r->eflags = (stack32[0]&VALID_FLAGS)|EFLAG_VM|EFLAG_IF;
VPC和我的上网本是同一个主板厂商的。本以为在真机上也可以正常运行了,但经测试还是原来的现象——黑屏,很干脆,等了较长时间后才听到Speaker发出声音,似乎是程序暂停了一下又能运行了,但是屏幕还是黑屏。
然后我怀疑到是in和out的模拟问题,会不会是这个在文档上没有给出,而我自以为是却模拟了错误的做法呢?于是赶紧开启TSS的iomap功能,关掉IOPL=3的做法,重启一试,惊现与虚拟机一样的结果!!!
唉,模拟io操作既没效率又麻烦,怎么我当初这么笨啊。。。
If you are smart enough, you will understand that I'm not a simple boy!
没有评论:
发表评论