【问题标题】:Addition operation versus multiplication operation加法运算与乘法运算
【发布时间】:2012-09-24 16:44:24
【问题描述】:

我知道,加法运算比乘法运算更简单。但是123456 * 3123456 + 123456 + 123456的执行时间会有区别吗?

乘法究竟是如何工作的?

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

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

【问题讨论】:

  • 整数还是浮点数?它有所作为。

标签: theory multiplication


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 实际上,我只是想知道这些算术运算的内幕,并没有什么关于优化的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2016-11-15
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多