このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

4. 論理演算・ビット演算命令

4.1. この文書の表記規則

表記: Rd, Rn は ARM のレジスタ R0〜R7 を表します。ただし特殊命令の場合は R0〜R15 が使えます。 Rn<a-b> は、内容が a <= 内容 <= b の範囲になければならない ARM のレジスタを表します。レジスタ引数を2つ取る命令では、それらが同一であっても構いません。たとえば次の例は、R0 の初期の内容にかかわらず R0 をゼロにします(Python の R0 ^= R0 )。

  • eor(r0, r0)

これらの命令は、特に記載がない限り条件フラグに影響します。

4.2. 論理演算命令

  • and_(Rd, Rn) Rd &= Rn

  • orr(Rd, Rn) Rd |= Rn

  • eor(Rd, Rn) Rd ^= Rn

  • mvn(Rd, Rn) Rd = Rn ^ 0xffffffff つまり Rd = Rn の1の補数

  • bic(Rd, Rn) Rd &= ~Rn Rn のマスクを使って Rd のビットをクリア

「and」は Python の予約キーワードなので、「and」ではなく「and_」を使っている点に注意してください。

4.3. シフト命令とローテート命令

  • lsl(Rd, Rn<0-31>) Rd <<= Rn

  • lsr(Rd, Rn<1-32>) Rd = (Rd & 0xffffffff) >> Rn 論理右シフト

  • asr(Rd, Rn<1-32>) Rd >>= Rn 算術右シフト

  • ror(Rd, Rn<1-31>) Rd = rotate_right(Rd, Rn) Rd を右に Rn ビット回転します。

たとえば3ビットの回転は次のように働きます。Rd に最初 b31 b30..b0 のビットが入っている場合、回転後は b2 b1 b0 b31 b30..b3 になります

4.4. 特殊命令

これらの命令は条件コードに影響しません。

  • clz(Rd, Rn) Rd = count_leading_zeros(Rn)

count_leading_zeros(Rn) は、Rn の中で最初の 1 のビットより前にある 0 のビットの数を返します。

  • rbit(Rd, Rn) Rd = bit_reverse(Rn)

bit_reverse(Rn) は、Rn の内容のビットを逆順にしたものを返します。Rn に b31 b30..b0 のビットが入っている場合、Rd は b0 b1 b2..b31 に設定されます

末尾のゼロを数えるには、clz を実行する前にビットの反転を行います。