英特尔指令集:与EAX,EBX,ECX或EDX相乘?

时间:2013-07-24 00:22:48

标签: assembly intel

你怎么想知道'mul ecx'被执行的时候。 ECX将与EAX相乘?而不是EBX或EDX?

mul ecx, eax

会更有意义。

1 个答案:

答案 0 :(得分:4)

指令集就是这样定义的。

英特尔可以通过其他方式对其进行定义,包括允许您完全指定输入和输出寄存器的方式,但它们没有。

借口可以说是当时各种乘法指令被添加到CPU的指令集中(我认为是8086年份),现有的指令没有任何明显的位置可以放在它可以共享的地方其他指令(例如,mov,add,xor等)可用的通用解码方案,没有很多可用的晶体管来做奇特的解码方案,以便能够通过其他方式对一般操作数进行编码,以及任何晶体管都是可用的更好地专用于乘法/除法逻辑。

最后,需要乘法指令而不是一般指令(mov,add,xor),因此将操作数移动到固定位置/结果的努力不会导致大量代码膨胀或影响表现很多。设计者确实找到了一种包含源操作数的方法。您应该认为幸运的是,它不是简单地定义为将EAX和EDX相乘以生成EDX:EAX,这是许多早期计算机体系结构中使用的历史悠久的方案。从那以后,x86指令集中的整数乘法的需求没有太大变化。

浮点/向量算法完全不同。

相关问题