这个模式最初是 amd 设计的,有兴趣的可以查看当年 amd k8 cpu 的技术文档,里面有非常详细的描述。——从某种意义上说,intel 的 ia64 之所以失败,就是因为没有象 amd 一样设计出一种在 64 位下运行 32 位程序的 cpu 模式。所以后来只得跟风 amd 设计出 em64t。
Windows 通过 wow64 来支持这种 cpu 模式,这意味着 Win64 本身就带有了 32 位相关的运行库,虽然这一套库很可能是直接把 32 位系统调用转换成对 64 位 winapi 的系统调用。
Linux 也直接支持这个模式,当然一般需要安装 multilib 之类的一些库才可以在 64 位 Linux 下跑 32 位 Linux 程序。
当然,操作系统支持这个模式只能在用户层,内核态还是必须 64 位,因而驱动程序都需要 64 位。
顺便说一下,事实上,对于 amd64/em64t 架构的 cpu ,不但能够在 64 位模式下运行 32 位应用程序,还可以在 32 位模式下运行 64 位程序。这一点至少目前 Linux 是可以做到的(当然,要做到这一点你需要在你的 32 位Linux下安装64位相关的运行库)。