異なるアセンブリ言語では、MUL (x86)/MULT (mips) は乗算を参照します。プログラマにとってはブラックボックスです。アーキテクチャに関係なく、CPU が実際にどのように乗算を実行するかに興味があります。レジスタに 2 つの 16 ビット値があり、私が CPU であるとしましょう。そのため、他のビット操作命令 (および、または、xor、not、shl、shr など) を使用して MUL を実装する必要があります。何をすればよいでしょうか?
5407 次
2 に答える
9
ウィキペディアのhttp://en.wikipedia.org/wiki/Multiplication_ALUには、デジタル回路で乗算を行うためのさまざまな方法がリストされています。
大学時代に、Verilog の DEC Alpha のようなプロセッサに SIMD 命令を追加するプロジェクトに取り組んだとき、Wallace ツリー乗算器を実装しました。主な理由は、一定のサイクル数で実行され、パイプライン化が容易だったからです。
どうやら、Dadda 乗数は (ほぼ?) 現代の x86 を含む実際の CPU ALU で広く使用されています。Wallace 乗算器と同様に、固定レイテンシでパイプライン化することもできます。
編集:他のビット操作命令を使用すると述べましたが、最新のプロセッサでは、乗算はこのようにマイクロコード化されません。それは遅くなる方法であり、プロセッサはベンチマークで虐殺されます.
于 2009-03-28T03:00:27.687 に答える