我知道,加法运算比乘法运算更简单。但123456 * 3
和123456 + 123456 + 123456
如何正确地进行乘法?
不同编程语言的乘法算法是否有所不同?
乘法在低级别上看起来如何(即汇编代码)?
答案 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或其他处理器指令。