CMP、CMN

比較命令と比較否定命令です。

Show/hide構文

CMP{cond} Rn, Operand2
CMN{cond} Rn, Operand2

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

cond

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

Rn

第 1 オペランドを保持する ARM レジスタを指定します。

Operand2

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

Show/hide使用法

これらの命令は、レジスタ内の値と Operand2 を比較します。結果に基づいて条件フラグを更新しますが、結果はどのレジスタにも入れません。

CMP 命令は、Rn の値から Operand2 の値を減算します。結果が破棄されることを除けば、SUBS 命令と同じです。

CMN 命令は Operand2 の値を Rn の値に加算します。結果が破棄されることを除けば、ADDS 命令と同じです。

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

Show/hideA32 および T32 命令での PC の使用

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

レジスタ制御シフトを行わないこれらの A32 命令での PC(R15)の使用は非推奨です。 

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

これらの T32 命令では、オペランドに PC は使用できません。

Show/hideA32 および T32 命令での SP の使用

A32 および T32 命令では、Rn に SP を使用できます。

A32 命令では、Rm での SP の使用は非推奨です。

16 ビット T32 CMP Rn, Rm 命令では Rm で SP を使用できますが、これは非推奨です。他の Rm での SP の使用は、T32 では許可されていません。

Show/hide条件フラグ

これらの命令は、演算結果に基づいて N、Z、C、および V の各フラグを更新します。

Show/hide16 ビット命令

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

CMP Rn, Rm

Lo レジスタの制約は適用されません。

CMN Rn, Rm

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

CMP Rn, #imm

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

Show/hide

    CMP     r2, r9
    CMN     r0, #6400
    CMPGT   sp, r7, LSL #2

Show/hide誤用例

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

Show/hide関連項目

Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814