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

| 32位x86是16位x86的超集。假设我用16位x86编写了一个代码。理想情况下,它应该在具有32位x86的系统上正常运行。但事实并非如此。兼容性是这里的问题。但是为什么呢?是否因为在32位x86机器上安装的32位OS在内存中加载程序的方式不同以及对内存的管理方式不同? 16位和32位应用程序之间的真正区别是不同的内存管理要求吗?     
已邀请:
在Windows中: 在32位操作系统中运行16位程序的主要问题是,大多数16位程序用于在实模式下运行,而该模式已不再受OS支持。这些模式根本不同,因此需要软件仿真。同样,由于所有16位API存根,DOS函数和BIOS调用都不可用,因此程序将无法真正与操作系统进行交互,因此如果没有某种仿真,它们将无法使用。对于Windows,NTVDM从Windows NT3.1开始执行所有仿真。 当然,如果您的程序不需要与操作系统进行任何交互,则应该可以运行它。就操作码和指令集而言,确实是32位x86是16位x86的超集。只是代码通常在其中运行的环境是完全不同的。     
32位和16位地址模式之间的唯一区别是那些操作数大小和地址大小前缀的含义和用法。 32位应用程序意味着什么? 16位模式下的操作数大小前缀     
这里超级用户有一个相关的讨论(在64位OS上为16位)。     

要回复问题请先登录注册