MOV、MVN

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

Show/hide構文

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

各パラメータには以下の意味があります。

S

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

cond

任意の条件コードを指定します。

Rd

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

Operand2

フレキシブル第 2 オペランドを指定します。

imm16

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

Show/hide使用法

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

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

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

Show/hide32 ビット Thumb MOV および MVN での PC および SP の使用

PC(R15)は、32 ビット Thumb MOV または MVN 命令では Rd または Operand2 に使用できません。次の例外を除き、SP(R13)は Rd または Operand2 に使用できません。

  • MOV{cond}.W Rd, SPRd に SP は使用不可

  • MOV{cond}.W SP, RmRm に SP は使用不可

Show/hide16 ビット Thumb での PC および SP の使用

16 ビット Thumb MOV{cond} Rd, Rm 命令では PC と SP を使用できますが、RdRm の両方に SP または PC を指定したこれらの命令の使用は、ARMv6T2 以降で非推奨です。

他の MOV{S} または MVN{S} 16 ビット Thumb 命令では、PC または SP は使用できません。

Show/hideARM MOV と MVN での PC および SP の使用

レジスタ制御シフトを行うデータ処理命令の場合は、Rd やオペランドに PC は使用できません。

レジスタ制御シフトを行わない命令では、PC の使用は以下の場合を除き、非推奨です。

  • MOVS PC, LR

  • MOV PC, RmRm に PC または SP は使用不可

  • MOV Rd, PCRd に PC または SP は使用不可

SP は Rd または Rm で使用できます。ただし、次の場合を除き、これらは非推奨です。

  • MOV SP, RmRm に PC または SP は使用不可

  • MOV Rd, SPRd に PC または SP は使用不可

Note

  • #imm16 値が、許可された Operand2 値でない場合の MOV Rd, #imm16 、Rd には PC は使用できません。レジスタ制御シフトなしの Operand2 を使う形式では PC を使用できます。

  • ARM 命令での PC と SP の非推奨は、ARMv6T2 以降のみが該当します。

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

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

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

  • S 接尾文字を使用する場合は、SUBS pc,lr 命令を参照して下さい。

Show/hide条件フラグ

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

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

  • Operand2 の計算中に C フラグを更新することが可能です。

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

Show/hide16 ビット命令

これらの命令は、Thumb コード内では次の形式で使用できます。これらは 16 ビット命令です。

MOVS Rd, #imm

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

MOVS Rd, Rm

RdRm は共に Lo レジスタである必要があります。

MOV Rd, Rm

ARMv6 以前のアーキテクチャでは、RdRm のいずれか一方または両方が Hi レジスタである必要があります。ARMv6 以降のバージョンに、この制限は適用されません。

Show/hideアーキテクチャ

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

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

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

Show/hide

    MVNNE   r11, #0xF000000B ; ARM のみ。このイミディエート値は
                             ; T2 では使用不可

Show/hide誤用例

    MVN     pc,r3,ASR r0     ; PC とレジスタ制御シフトは一緒に使用できない

Show/hide関連項目

概念:

『ARM プロセッサをターゲットとしたソフトウェア開発』

参照:
Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0489EJ
Non-ConfidentialID081711