私は ARM7 アセンブリ言語のコースでラボを手伝っていましたが、今日、学生が次の式を入力したという問題に遭遇しました。
MUL R0, R0, R1
コードはコンパイルされませんでした。解決策は、式を次のように変更することです。
MUL R0, R1, R0
つまり、MUL の最初の 2 つの引数を同じレジスタにすることはできません。これはARMのドキュメントの一部であるため、既に知っていました。
生徒は問題が修正されたことに十分満足していましたが、 ARM7 で引数をこのように渡す必要がある理由がわからないことに私はかなり不満を感じています。乗算器がシフトして加算している間にレジスタの1つが中間値を格納するために使用されていることに関係があるのではないかと思いましたが、それがARMでの乗算の仕組みであるかどうかさえわかりません(実際、私はかなり確かにそうではありません)。ここで引数の順序が重要なのはなぜですか?