我对Microchip PIC微控制器中的汇编编程有所了解,但我不是专家。
有人可以从以下3个陈述中解释我,这些陈述在汇编时效率最高(即耗时较少)。
x++
x = x + 1
x += 1
我对C#和Java都非常熟悉,我确信当我们考虑高级编程语言时,上述3个语句的效率没有差别。但是当我们考虑装配时效率是否存在差异?
谢谢
答案 0 :(得分:3)
那些不是汇编语句,你的工作处于错误的抽象层次。
确定哪些C类语句更快将需要将它们编译成程序集然后检查那个。
任何非脑卒中编译器都会为所有三种情况提供完全相同的代码。
如果你拥有脑卒中编译器那么,是的,几乎可以肯定会有以下几点之间存在差异:
inc [memloc]
和
lod r1, [memloc]
inc r1
sto [memloc], r1
答案 1 :(得分:2)
当我们考虑高级编程语言时,上述3个语句的效率没有差异
这取决于您对“高级别”的定义。在Python或Ruby等脚本语言中,我希望x++
优于x += 1
和x = x + 1
,因为x
有最小符号表查找,并且没有标量必须“取消装箱”(将脚本语言1
转换为程序集1
)。
对于像C这样的编译语言,我希望所有三个语句都会产生类似的汇编代码,因此它们应该同样有效。但是,这取决于您的编译器及其配置,例如,如果您正在执行“调试”或“发布”构建。
答案 2 :(得分:0)
编译器现在足够聪明,可以找到最佳解决方案,所以实际上所有都是相同的。编译器会将它们转换为最快的汇编命令。所以不要考虑这一点。如果您正在编写C#或Java代码,这是您应该考虑的最后一件事。
答案 3 :(得分:0)
如果你问,如果在高级语言中使用它们同样有效:它们将是,假设你使用任何相当不错的编译器。
如果你问,如果使用与上述陈述类似的三种不同的汇编指令同样快,那么可能不会。如果你的CPU有特殊的“inc”指令,那么它可能比其他指令快一点,如果没有别的(现代CPU通常只需要一个周期用于这样的简单指令),因为指令可能更短,这需要CPU传输更少的代码。从长远来看。要确定,您应该检查指令集手册,其中通常指定时间。对于某些体系结构,您还可以获得周期精确的模拟器,应该能够回答这些问题。