1

你怎么知道什么时候执行'mul ecx'。ECX 会与 EAX 相乘吗?而不是 EBX 或 EDX?

mul ecx, eax

不过会更有意义。

4

1 回答 1

4

指令集就是这样定义的。

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

借口可以说是在将各种乘法指令添加到 CPU 的指令集(我认为是 8086 年代)时,现有指令没有任何明显的地方可以将乘法放在可以共享一般解码的地方方案可用于其他指令(例如,mov、add、xor 等),没有很多可用的晶体管来执行花哨的解码方案以启用其他方式来编码通用操作数,并且任何可用的晶体管都更好专用于乘法/除法逻辑。

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

浮点/向量算术是完全不同的事情。

于 2013-07-24T00:24:53.470 回答