10

在不同的汇编语言中,MUL (x86)/MULT (mips) 指的是乘法。它是程序员的黑匣子。无论架构如何,我都对 CPU 实际如何完成乘法感兴趣。假设我的寄存器中有两个 16 位值,并且我是 CPU,所以我必须使用我拥有的其他位摆弄指令(and、or、xor、not、shl、shr 等)来实现 MUL。我该怎么办?

4

2 回答 2

9

Wikipedia 上的http://en.wikipedia.org/wiki/Multiplication_ALU列出了在数字电路中进行乘法运算的不同方法。

早在大学时,当我在 Verilog 中为一个类似 DEC Alpha 的处理器添加 SIMD 指令的项目时,我们实现了一个华莱士树乘法器,主要原因是它以固定数量的周期运行并且易于流水线化。

显然Dadda 乘法器(几乎?)普遍用于现实生活中的 CPU ALU,包括现代 x86。与华莱士乘法器一样,它也可以以固定延迟进行流水线化。


编辑:您提到使用其他位摆弄指令,在现代处理器上乘法不会像这样被微编码;这会变慢,处理器会在基准测试中被宰杀。

于 2009-03-28T03:00:27.687 回答
4

此页面显示 4 * 4 组合多路器的逻辑门。你可以从那里开始工作。

这是某人的实验室,他们描述了从 4 个 4 位乘法器构建一个 16 位乘法器,每个乘法器都带有与门和全加器。完整的设计、芯片布局和仿真波形。

于 2009-03-28T03:07:56.933 回答