2

私は ARM7 アセンブリ言語のコースでラボを手伝っていましたが、今日、学生が次の式を入力したという問題に遭遇しました。

MUL R0, R0, R1

コードはコンパイルされませんでした。解決策は、式を次のように変更することです。

MUL R0, R1, R0

つまり、MUL の最初の 2 つの引数を同じレジスタにすることはできません。これはARMのドキュメントの一部であるため、既に知っていました。

生徒は問題が修正されたことに十分満足していましたが、 ARM7 で引数をこのように渡す必要がある理由がわからないことに私はかなり不満を感じています。乗算器がシフトして加算している間にレジスタの1つが中間値を格納するために使用されていることに関係があるのではないかと思いましたが、それがARMでの乗算の仕組みであるかどうかさえわかりません(実際、私はかなり確かにそうではありません)。ここで引数の順序が重要なのはなぜですか?

4

2 に答える 2

1

私の推測では、これは 1 つ以上のコアの IP のバグです。

特にarm7の時代には、ソースコードではなくアームからコアまでのレイアウトが与えられていたので、バグを修正し、すべてのユニットをリコールし、進行中のものを廃棄するよりも、コンパイラにIPバグを回避させる方がはるかに簡単です。 、ベンダーがマスクに投資した後、またはすでに生産を開始した後にバグが見つかった場合。

時間が経つにつれて、アーム (およびその他) は、読み取って特定のコアを判断できるものが増え、エラッタに従って (Linux のようなソフトウェアはこれで恐ろしい仕事をしますが、間違ったエラッタを間違ったコアに適用します)、どのバグを避けるべきかを知ることができます。

いくつかの「予測不可能な結果」は、実際には壊れたばかりで予測可能であり、これがクローンまたは盗まれた IP であるかどうかを判断するためにアームによって使用される可能性があります。

于 2015-10-09T21:18:23.870 に答える