0
私は2つのレジスタの値を追加しようと、それで8 によってそれらを法だ、Cのコードでは、ARMアセンブリでは、このような動作を行うにはどのようにこのARMアセンブリでモジュロ演算を実行するにはどうすればよいですか?
a = a + b;
c = a % 8;
ようなものです。
私は2つのレジスタの値を追加しようと、それで8 によってそれらを法だ、Cのコードでは、ARMアセンブリでは、このような動作を行うにはどのようにこのARMアセンブリでモジュロ演算を実行するにはどうすればよいですか?
a = a + b;
c = a % 8;
ようなものです。
すべてのARMプロセッサが除算またはモジュロの直接命令を持っているわけではないため、ほとんどの場合、モジュロ演算の呼び出しは、たとえば、関数呼び出しとして終了します。 ___modsi3
。
この場合、8を法とするとき、値が負でないと仮定できる場合、% 8
の部分を& 7
とすることができます。その場合、あなたのケースのアセンブリは次のようになります:
add rA, rA, rB
and rC, rA, #7
これは特定の値では失敗するため、これはどのような場合ですか。例えば71 mod 15 = 6 test = 11である。私が何かを逃していない限り。 – InfinitelyManic
モジュロ8は7であり、8は8の累乗であるため、モジュロ15は基本2を使用することとはまったく異なるもので、実際に分けなければならない演算です。 –
@old_timer、そうですね。減算ベースのmod関数を使用しました。しかし、これは、ループのためにmod関数に基づくdiv(利用可能な場合)よりもはるかに遅いです。 – InfinitelyManic