4.3.7. MOV、MVN

データ代入命令とデータを代入してビット反転させる命令です。

構文

MOV{S}{cond} Rd, Operand2
MOV{cond} Rd, #imm16
MVN{S}{cond} Rd, Operand2

各項目には以下の意味があります。

S

任意に指定できる接尾文字です。 S が指定されている場合は、演算結果に基づいて条件コードフラグが更新されます(条件実行を参照)。

cond

任意の条件コードを指定します(条件実行を参照)。

Rd

デスティネーションレジスタを指定します。

Operand2

フレキシブル第 2 オペランドを指定します。 このオプションの詳細については、フレキシブル第 2 オペランドを参照して下さい。

imm16

0 ~ 65535 の範囲の値を指定します。

使用法

MOV 命令は Operand2 の値を Rd にコピーします。

MVN 命令は Operand2 の値を取得し、その値にビットごとの論理 NOT 演算を実行して、結果を Rd に返します。

状況によっては、アセンブラによって MVNMOV に、MOVMVN に置換できる場合があります。 逆アセンブルリストを参照するときは、この点に注意して下さい。 詳細については、命令置換を参照して下さい。

Thumb-2 の MOV と MVN での pc の使用

pc (r15)は Thumb-2 の MOVMVN 命令では Rd または Operand2 に使用できません。

ARM MOV と MVN での pc の使用

Note

MOV Rd,Rm 構文は Rd または Rn が pc の場合に使用できますが、両方を pc にすることはできません。 その他のケースでは非推奨です。

Rd に pc を指定している場合、使用される値は「命令のアドレス + 8」となります。

Rd に pc を指定した場合、以下のようになります。

  • 演算結果に対応するアドレスへの分岐が実行されます。

  • 接尾文字 S を指定している場合は、現在のモードの SPSR が CPSR にコピーされます。 この動作を利用して、例外から復帰することができます(『デベロッパガイド』の第 6 章 プロセッサ例外処理を参照)。

Caution

ユーザモードまたはシステムモードで Rd に pc を使用する場合は、接尾文字 S を使用しないで下さい。 このような命令による影響は予測不可能なうえ、アセンブル時にアセンブラによる警告が生成されません。

レジスタ制御シフトを行うデータ処理命令の場合は、Rd やオペランドに pc は使用できません(フレキシブル第 2 オペランドを参照)。

条件フラグ

S が指定されている場合、これらの命令では、以下のようになります。

  • 結果に応じて N フラグおよび Z フラグを更新します。

  • Operand2 の計算中に C フラグを更新することが可能です(フレキシブル第 2 オペランドを参照)。

  • V フラグは更新しません。

16 ビット命令

これらの命令は、Thumb-2 以前の Thumb コード内では次の形式で使用できます。また、Thumb-2 コード内で使用するときは 16 ビット命令になります。

MOVS Rd, #imm

Rd は Lo レジスタである必要があります。 imm 範囲 0 ~ 255。

MOVS Rd, Rm

Rd および Rm は共に Lo レジスタである必要があります。

MOV Rd, Rm

ARMv5 以前のバージョンでは、Rd または Rm の一方、または両方が Hi レジスタである必要があります。 ARMv6 以降のバージョンに、この制限は適用されません。

アーキテクチャ

#imm16 形式の ARM 命令は、ARMv6T2 以降で使用できます。 その他の形式の ARM 命令は ARM アーキテクチャのすべてのバージョンで使用できます。

これらの 32 ビット Thumb 命令は、ARMv6T2 以降で使用できます。

これらの 16 ビット Thumb 命令は、ARM アーキテクチャのすべての T バリアントで使用できます。

    MVNNE   r11, #0xF000000B ; ARM only. This constant is not available in T2.

誤用例

    MVN     pc,r3,ASR r0     ; pc not permitted with register controlled shift
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IJ
Non-Confidential