2012-04-03 73 views
0

我对Microchip PIC微控制器中的汇编编程有所了解,但我不是专家。x ++在装配中比x = x + 1和x + = 1更有效吗?

有人可以从以下3条语句中解释我,这条语句在装配中是最有效的(即耗时较少)。

x++ 
x = x + 1 
x += 1 

我相当熟悉C#和Java和我知道肯定有效率在上述3个语句没有区别,当我们考虑的一个高级编程语言。但是当我们考虑组装时,效率会有差异吗?

谢谢

+8

取决于您如何将它们翻译为程序集? – Mat 2012-04-03 06:11:49

+3

为什么不尝试反汇编你的代码并检查你自己?在gcc上使用'-S'选项 – 2012-04-03 06:12:18

+0

如果您只知道一些关于PIC汇编的知识,那么您已经足够了解它:它是使用最少代码行的代码。 – hplbsh 2012-04-03 06:32:14

回答

3

那些不是汇编语句,你工作在错误的抽象层次。

找出哪些类似C语句更快需要将它们编译为程序集,然后检查

任何非braindead编译器都会为您提供所有三种情况下完全相同的代码。

如果一个新空房禁地编译器的话,是的,有几乎肯定会是一些类似的差异:

inc [memloc] 

和:

lod r1, [memloc] 
inc r1 
sto [memloc], r1 
+0

谢谢paxdiablo ..我明白你的观点..效率真的取决于编译器以及微控制器或处理器的指令集。 – 2012-04-03 06:41:01

0

编译器现在都足够聪明到找到最好的解决方案,所以实际上都是一样的。编译器会将它们转换成最快的汇编命令。所以不要这样想。如果你正在编写C#或Java代码,这是你应该考虑的最后一件事。

2

有效率在上述3个语句没有区别,当我们考虑的一个高级编程语言

这取决于你的“高层次”的定义。在诸如Python或Ruby之类的脚本语言中,我认为x++优于x += 1x = x + 1,因为x有最小符号表查找,并且没有标量必须“拆箱”(将脚本语言1转换为程序集1)。对于C这样的编译语言,我期望所有这三条语句都会产生类似的汇编代码,所以它们应该同样有效。但是,这取决于您的编译器及其配置,例如,如果您正在执行“调试”或“发布”构建。

0

如果您问,如果这些在高级语言中使用时效率相同:假设您使用任何相当不错的编译器,它们将会是。

如果你问,如果使用三个不同的汇编指令类似于上述语句将同样快,那么可能不会。如果你的CPU有特殊的“inc”指令,那么如果没有其他的东西(现代的CPU通常只需要一个周期来完成这样简单的指令),那么它可能比别人快一点,因为指令可能更短,这就要求CPU从长期记忆。可以肯定的是,您应该检查指令集手册,其中经常指定时间。对于某些体系结构,您还可以获得周期精确的模拟器,这应该能够回答这些类型的问题。