百科问答小站 logo
百科问答小站 font logo



64位操作系统(CPU)如何兼容32位程序/软件?请看详情。? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

要保证64位兼容性,无非就是两点:

1. 硬件兼容(指令层面上);

2. 软件兼容(操作系统);

因为以上两点都能保证,所以自然32位程序能在兼容32位程序的操作系统+CPU上跑。

具体的形式:

1. 硬件兼容

现有的x86架构的CPU,操作系统进入64位的工作模式都是兼容32位的,即使在long-mode模式下,汇编指令的默认操作数大小不全是64位的,实际上多数都是32位的。所以硬件指令直接平移过来就可以了。

比如汇编指令TEST EAX,EAX;
在32位下编码是 0x85 0xC0
在64位下编码也是 0x85 0xC0

硬件兼容提供了软件兼容的基础。

2. 软件兼容

Windows和Linux都提供了32位的用户态运行库,所以用户调用各种系统API都可以直接兼容。

系统调用方面,虽然系统内核是64位的,但因为CPU对32位程序发起系统调用时处理的流程不同,所以操作系统能感知到系统调用是从什么状态发起的,剩下的工作就是专门对32位做一下处理即可。

-------------------------------------------

实际应用中,还有一些特殊的情况,比如:

1. 硬件不提供对早期指令的支持,或者操作系统不想用这种方式,那么操作系统也可以采用虚拟机的方式用软件模式,比如Win2000-WinXP时代里的控制台(cmd)在运行16位程序时就是完全模拟出来的(比如debug命令)

2. 绝大多数64位操作系统对32位的兼容仅仅做到了应用程序,而不是驱动(内核态),因为在内核态提供32位支持是一个很麻烦并且有风险的事情,而且内核态程序对CPU拥有完整的控制权,很容易让系统崩溃,所以64位Windows和Linux所谓的兼容性仅仅体现在用户态。




  

相关话题

  AMD、英特尔会不会采用那种高性能库,高密度库共用方式生产CPU(类似855的1+3两种大核)? 
  为何 Linus 一个人就能写出这么强的系统,中国却做不出来? 
  为什么 MIUI 不能叫 MIOS? 
  4bit处理器能做什么? 
  为什么学校电脑课室的e5cpu那么水,我怀疑有阴谋? 
  windows有更方便的IDE进行开发, 为什么互联网公司的服务器还是用linux? 
  龙芯处理器还在发展吗? 
  在嵌入式商用里面哪款RTOS(实时操作系统)比较多人用? 
  在你心目中,2021 年芯片领域最具代表性的热门事件有哪些? 
  一个CPU内核包含几个加法器? 

前一个讨论
为什么显卡在内存中的映射是0b8000H?
下一个讨论
如何看待男子坐火车突发心脏病晕倒请求停车遭拒后死亡?





© 2025-06-26 - tinynew.org. All Rights Reserved.
© 2025-06-26 - tinynew.org. 保留所有权利