可双击后提示 
内存不足  无法运行16位程序 请教 
谢谢

解决方案 »

  1.   

    386以后就是32位寻址了,现在也是正在向64位过度,过度时间比较长,如果64位处理器不支持32位程序,那这么多32位经典程序可就惨了.所以AMD推出的64位处理器兼容32位,Intel也兼容,同时也研发高端的64位处理器.,16位程序对于WINDOWS OS来说一般是指Windows 3.11以前的. 在16位到32位中, KERNEL、USER和 GDI等版本已经发生了改变.
    对于16/32位混合代码是这样的:
            (1)32位代码使用32位线性寻址,而16位代码使用 16位段选择器加 16位偏移量来寻址。要使代码混合使用,必须在两种寻址方式之间有一种转换。解决这个问题的方法,包含一种称为“贴瓦”*ilin护的技术,即系统分配一个新的16位段选择子,它描述的存储器能覆盖此时存储器包含的参数。
      (2)在C语言中,基于Win 32的应用中整型是32位,而在16位的应用中是16位的。当调用16位代码时,32位的整数参数必须转换成16位,返回时扩展成32位。如果参数在寄存器中,这种转换就容易些。但许多Windows函数把参数放在堆叠中。
      (3)返回32位值(如指针)的16位代码要用DX:AX这对寄存器,而32位代码希望返回值放人EAX寄存器中。
      (4)32位代码用386的SS:ESP寄存器对为堆叠寻址,而 16位代码用 SS:SP寄存器对。这就必须进行反覆的寄存器交换,可能还要进行参数拷贝。  解决以上问题的“设备”称为thunk程序,从32位的代码调用16位代码,或反过来,都需要thunk,无论何时调用API都需要先执行thunk。如果thunk速度很慢,应用程序的性能就会降低。因此实现thunk的关键是,占用内存储器最小,执行时间要尽可能短,所以,hunk用汇编语言编写。在不同代码转换期间,系统通过建立一个新的堆叠结构来处理 
    堆叠管理出口。混合代码调用时,在把参数压人新的堆叠时,要转换格式。  必须指出,在设计thunk时,Microsoft的一些工作已经文档化为其产品的一部分。Windows NT用了“genetic thunk”方法,其细节在Win32 SDR中。Windows 3.1中的Win32用了“universalthunk”方法,它已成为Win 32子系统的组成部分,在Windows 95中,为了提高执行速度,使用“interation”方法来设计thunk。这种速度的提高,一是由于在 thunk层尽可能用 32位代码;二是由于在 thunk处理器部分编码十分细致,特别是减少了选择子装人的数目,因为在Intel处理器中装人选择子是十分费时的。现在能见到的16位程序比较少了,你可以看一下Intel提供的用CPUID指令(PIII明确支持,但其他处理器不一定支持该指令)检测Intel CPU参数的关于的16位的程序.