据我所知,写入组件什么,或添加组件以任何程序损害其携带性。但是,怎么不好?我的意思是,基本上所有的PC都是x86或x64这些天来,对不对?所以,如果我嵌入组装成一个C程序,为什么不它仍然编译不管它去了哪里?

请问这个概念未便携性只是指当你的真正的挖掘到特定处理器的特殊怪癖,挤出从一段代码的性能每一滴水?

在PC游戏“过山车大亨”如果我没有记错写几乎完全用汇编语言。所以......如何取消可移植性可能真的是?

有帮助吗?

解决方案

除了处理器本身,还有,当然,总是其他方面的考虑:什么是你的目标平台上调用约定? struct值是如何传递给其他的(比如:API)的功能呢?这寄存器可以由被调用方打一顿?这些都保证要保留的来电?如何做一个系统调用?什么是通过在过程开始的OS为您准备的内存布局?

其他提示

移植组件,还存在的ABI的问题,即从OS变化到OS。移植从Unix C程序到Windows(或者甚至是从Linux到OpenBSD的)可能是一个简单的重新编译,但是对于一个汇编程序,你可能会发现一些被调用者保存寄存器变成调用者保存,或浮点参数通过不同。

和这不仅是理论上的,即Linux和Mac OS X的版本的PowerPC在实践中,问题可能不是太糟糕的寄存器r2,例如AMD在同一时间为64位指令集出版了“推荐” ABI。

如果你认为“PC ==窗口”,然后添加汇编一个C程序不痛了。如果你进入Unix世界中,你将有许多不同的CPU:PPC在PS3或Xbox,旧Mac和许多功能强大的服务器。对于许多小型设备,你就会有ARM。嵌入式设备(占当今绝大多数安装的CPU),通常使用自己定制的CPU具有特殊指令集。

因此,虽然许多电脑今天将能够运行英特尔的代码,即仅考虑所有CPU的一小部分在那里。

这就是说,x86代码是并不总是相同的,无论是。有用于汇编代码主要有两个原因:你需要使用特殊功能(如中断寄存器),或者你想要优化的代码。在第一种情况下,该代码是相当便携。在后一种情况下,每个CPU是有点不同。他们中有些人 SSE 。但上交所很快就与用SSE3和SSE4更换SSE2取代。 AMD有自己的品牌。不久,将有AVX。操作码的水平,他们每个人都有的CPU上的各种版本略有不同的定时。

要使事情更糟的是,一些操作码具有被固定在一个CPU的特定步进错误。最重要的是,一些操作码快得多的CPU上比在其他的某些版本。

接下来,我们将需要的接口这个汇编代码与C部分。这通常意味着你要么需要处理 ABI 的问题。

所以,你可以看到,这可以成为任意复杂的。

组件被用于特定的处理器,这意味着如果yeaah在x86永生代码是某种便携式直接写入指令。

但即使是现在的ARM处理器都回来了(即下一代账面净值),我相信,如果处理器不会在明年发生变化。

我想说的汇编语言是由设计不便于携带。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top