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