Memory management 16位和32位应用程序之间的最大区别是什么?

Memory management 16位和32位应用程序之间的最大区别是什么?,memory-management,x86,32-bit,16-bit,Memory Management,X86,32 Bit,16 Bit,32位x86是16位x86的超集。假设我用16位x86编写代码。理想情况下,它可以在具有32位x86的系统上正常工作。但事实并非如此。兼容性是这里的一个问题。但究竟为什么呢?是因为32位x86机器上安装的32位操作系统在内存中加载程序的方式不同,对内存的管理也不同吗? 不同的内存管理要求是16位和32位应用程序之间的真正区别吗 在Windows中: 在32位操作系统中运行16位程序的主要问题是,大多数16位程序都是在实模式下运行的,而现在(操作系统)不再支持实模式。这些模式根本不同,因此需要软件

32位x86是16位x86的超集。假设我用16位x86编写代码。理想情况下,它可以在具有32位x86的系统上正常工作。但事实并非如此。兼容性是这里的一个问题。但究竟为什么呢?是因为32位x86机器上安装的32位操作系统在内存中加载程序的方式不同,对内存的管理也不同吗? 不同的内存管理要求是16位和32位应用程序之间的真正区别吗

在Windows中:

在32位操作系统中运行16位程序的主要问题是,大多数16位程序都是在实模式下运行的,而现在(操作系统)不再支持实模式。这些模式根本不同,因此需要软件仿真。此外,由于所有16位API存根、DOS函数和BIOS调用都不可用,程序将无法真正与操作系统交互,因此,如果没有某种模拟,程序将无法使用。对于Windows,NTVDM从Windows NT3.1开始执行所有仿真


当然,如果您的程序不需要与操作系统进行任何交互,您应该能够运行它。就操作码和指令集而言,32位x86确实是16位x86的超集。只是代码通常运行的环境完全不同。

superuser上有一个相关的(64位操作系统上的16位)讨论

32位和16位addressmode之间唯一的区别是操作数大小前缀和addresssize前缀的含义和用法


关于16位和32位代码之间的兼容性,您得到了错误的信息。他们非常不同。