1

我知道,加法运算比乘法运算更简单。123456 * 3但是和的执行时间会有什么不同123456 + 123456 + 123456吗?

乘法到底是如何工作的?

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

乘法在低级(即汇编代码)上的表现如何?

4

2 回答 2

2

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

ADD [operand1], [operand2] 其中操作数 1 可以是寄存器,操作数 2 可以是寄存器、常量或内存地址 根据处理器型号和操作数 2 类型,需要 1 到 7 个时钟

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

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

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

于 2012-09-24T17:09:29.327 回答
1

过早的优化是万恶之源:)

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

于 2012-09-24T16:52:13.570 回答