一种新处理器的流行,离不开相应软件的支持。开发新的处理器可能会因为失去相应软件的支持而影响其推广应用和市场前景;另一方面,得不到广泛应用和一定市场份额的处理器也很难得到丰富的软件支持。这种处理器和支持软件之间相互钳制的关系,既使得新处理器的设计不得不考虑兼容老处理器,也阻碍了新处理器的推出。在这种情况下,研究如何把支持老处理器的软件移植到新的处理器上,使新的处理器从诞生之初就有丰富的软件,不仅对软件重用有重大意义,更可以开阔处理器研发的思路,促进新处理器的创新。
一般有三种方法可以把老处理器上的代码移植到新处理器上[1]:
1. 在新处理器上提供专门的运行模式来执行老代码,如英特尔的安腾(Itanium)处理器专门设计了执行x86代码的硬件。
2. 把源程序重新编译到新的指令集。
3. 使用软件方法,解释或翻译应用程序。
第一种方法,显然无法利用新处理器的一些先进特性,失去了开发新处理器的意义,并且增加了新处理器的硬件复杂度,甚至还会影响原有代码的执行效率;第二种方法可以达到很好的效率,但并不总是可行,因为有些程序已经没有源代码,有些程序依赖于共享代码库,而这些共享代码以目标代码形式出现,不一定能得到源码,有些源程序语言没有编译到新指令集的编译器,此外操作系统的差异还可能使得只有修改源代码才能重新编译这些例程(比如与图形相关的代码)。
因此第三种方法,称之为二进制翻译(Binary Translation)应运而生。它是一种直接翻译可执行二进制程序的技术,能够把一种处理器上的二进制程序翻译到另外一种处理器上执行。它使得不同处理器之间的二进制程序可以很容易地相互移植,扩大了硬件/软件的适用范围,有助于打破前面提到的处理器和支持软件之间互相掣肘影响创新的局面。