在x32机器上运行的应用程序具有仅在x32机器上工作的汇编程序命令。ARM机器还有其他命令。为什么我不能从应用程序转换“汇编程序命令”以使其在其他体系结构上运行?
从理论上讲,这很容易:任何一个图灵完备的系统都可以计算任何其他图灵完备的系统可以计算的任何东西。实际上,它要复杂得多。
最大的是软件环境。几乎所有的程序都假定它将与提供广泛功能的操作系统进行交互:抽象出硬件访问的详细信息,将程序与同一台计算机上运行的其他程序隔离开来,提供通用的代码库,等等。在。在将程序转换为新的指令集之后,您仍然需要提供支持软件。
另一个主要的是硬件。计算机不只是CPU,而且程序会对其他部分做出某些显式或隐式假设。例如,将字节组合成更大的数据类型的顺序会有所不同,并且,如果程序从大字节序的计算机转换为小字节序的计算机,则执行位级操作的程序将会遇到麻烦,反之亦然。内存访问也可能受到限制,例如。目标系统可能需要将内存读取对齐为四个字节的倍数,而原始系统则没有这样的要求。还有一些更细微的问题,例如,x86 FPU对所有浮点计算都使用80位精度,即使在精度较低的数字上也是如此。依靠这种额外内部精度的程序将在具有64位FPU的系统上失败。
特别是x86体系结构具有使转换程序变得困难的功能:指令的大小和对齐方式各不相同。这意味着,在一般情况下,您无法查看程序并立即告诉它所包含的指令。在假定的指令对齐方式和实际的指令对齐方式之间相差一字节(例如您可能会在反盗版陷阱或紧凑编码演示中发现)可能意味着程序的工作方式发生了巨大变化。
有些程序可以让您将程序从一种体系结构转换为另一种体系结构,但是它们通常要么在运行时使用动态重新编译来重新编写该程序,要么它们完全模拟原始系统,并在出现每个指令时对其进行重新解释。执行。在这两种情况下,用户都需要提供运行该程序的软件环境。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句