在不同的汇编语言中,MUL (x86)/MULT (mips) 指的是乘法。它是程序员的黑匣子。无论架构如何,我都对 CPU 实际如何完成乘法感兴趣。假设我的寄存器中有两个 16 位值,并且我是 CPU,所以我必须使用我拥有的其他位摆弄指令(and、or、xor、not、shl、shr 等)来实现 MUL。我该怎么办?
问问题
5407 次
2 回答
9
Wikipedia 上的http://en.wikipedia.org/wiki/Multiplication_ALU列出了在数字电路中进行乘法运算的不同方法。
早在大学时,当我在 Verilog 中为一个类似 DEC Alpha 的处理器添加 SIMD 指令的项目时,我们实现了一个华莱士树乘法器,主要原因是它以固定数量的周期运行并且易于流水线化。
显然,Dadda 乘法器(几乎?)普遍用于现实生活中的 CPU ALU,包括现代 x86。与华莱士乘法器一样,它也可以以固定延迟进行流水线化。
编辑:您提到使用其他位摆弄指令,在现代处理器上乘法不会像这样被微编码;这会变慢,处理器会在基准测试中被宰杀。
于 2009-03-28T03:00:27.687 回答