不同x86操作/数据类型之间的区别?

时间:2012-12-19 12:42:02

标签: c++ c assembly x86 cpu

各种x86指令有多少不同的操作周期时间,具体取决于所涉及的数据是float,double,int,short,long等?

我希望能够确定是否避免对特定数据类型的特定指令。

3 个答案:

答案 0 :(得分:4)

处理器实际执行 x86指令的日子早已不复存在。 486处理器是第一个开始将它们转换为微操作系统的处理器。这可以通过各种方式重新排序和组合,以实现具有多个执行单元的超标量执行。

这使得通过循环计数分解x86指令是一次危险的冒险。英特尔处理器手册只是给出提示,您将在第4卷中找到它们。

答案 1 :(得分:2)

  

我希望能够确定是否要特别避免   有关特定数据类型的说明。

您必须避免在任何其他数据类型或大小上使用任何处理特定数据类型和大小的指令,因为这会导致意外行为。例如,在典型的x86实现中,DWORD具有与float相同的大小,但它们的编码方式不同:分别为小尾数与尾数/指数。

在汇编级语言中,机器没有“类型”的概念,并且将基于从当前指令指针处的操作码推断的大小/编码信息对内存块进行操作。

另一方面,如果你真的知道自己在做什么,将一种类型视为另一种类型并将其修改为极少数情况下会产生特殊效果 - Fast inverse square root

答案 2 :(得分:0)

避免分裂(包括剩余/残留)。自然地使用其余的基本操作和类型。