REP 命令 (Reset Processor Status Flag)

指定されたステータスフラグをクリアします。

REPオーバーロード

オペコード構文アドレッシングモードバイト数命令サイクル注
C2REP #constImm23

フラグ変化

nvmxdizc

nvmxdizc: オペランドで指定されたフラグはクリアされ、そのほかは変更されない。

解説

REP命令は、オペランドに指定された値のうち、1になっているビットに対応するステータスフラグをクリアします。
メモリモードフラグおよびインデクスフラグを直接クリアする命令はこれだけです(PLP命令やRTI命令でスタックから復帰した場合にも変化します)。したがって通常はレジスタ幅の変更のために使用されます。
なお、エミュレーションモードではメモリモードフラグおよびインデクスフラグは常に1となり、この命令でクリアすることはできません。

使用例

REP命令とSEP命令は、処理の途中でレジスタの幅を切り替えるのに使います。

    REP #$20        ; Aを16ビットにする
    LDA.w #$1234
    STA $00         ; $00に$34、$01に$12が書き込まれる
    SEP #$20        ; Aを8ビットに戻す
    LDA.b #$56
    STA $02         ; $02に$56が書き込まれる
    REP #$30        ; A・X・Yを16ビットにする
    SEP #$20        ; Aだけを8ビットに戻す(X・Yは16ビットのまま)

即値(#)を使う命令のバイト数は、実行時のmフラグ・xフラグによって変わります。多くのアセンブラはREP・SEPによるフラグの変化を追いかけないため、例のように.b・.wを付けて即値の大きさを明示する必要があります。フラグの状態と即値の大きさが食い違うと、CPUは命令の区切りを誤って読むため、以降のプログラムが正しく実行されません。

参照

フラグ操作命令
CLC命令
CLD命令
CLI命令
CLV命令
SEP命令
SEC命令
SED命令
SEI命令
XCE命令