加法运算与乘法运算

时间:2012-09-24 16:44:24

标签: theory multiplication

我知道,加法运算比乘法运算更简单。但123456 * 3123456 + 123456 + 123456

的执行时间是否有任何差异?

如何正确地进行乘法?

不同编程语言的乘法算法是否有所不同?

乘法在低级别上看起来如何(即汇编代码)?

2 个答案:

答案 0 :(得分:2)

在x86汇编语言中,加法和乘法运算如下所示:

ADD [operand1],[operand2] 其中operand1可以注册,操作数2可以是寄存器,常量或存储器地址 它需要1到7个时钟,具体取决于处理器型号和操作数2类型

MUL [操作数];用于无符号乘法 将累加器寄存器(AL,AX,EAX)的内容与操作数相乘,操作数可以是寄存器或存储器地址。而且,根据操作数和处理器型号的类型,它需要12-38个时钟 还有一个版本的MUL可以进行符号乘法。

这是核心汇编语言,没有SSE等现代SIMD扩展。如上所述,真正的速度取决于编译器的优化。

智能编译器很可能会将您的123456 + 123456 + 123456替换为3 * 123456

答案 1 :(得分:1)

过早优化是所有邪恶的根源:)

你给编译器的东西不是你在优化步骤后得到的东西,所以虽然在理论上加法更快,但在现实条件下你永远无法确定结果会是什么(更不用说你何时考虑到了编译器可能使用的SSE或其他处理器指令。