ROR 命令 (Rotate Memory Right)

アキュムレータまたはメモリの値を右ローテートします。

ROR オーバーロード

オペコード構文アドレッシングモードバイト数命令サイクル注
6AROR AAcc.12
66ROR dpDP.251, 2
76ROR dp, XDP. Idx X261, 2
6EROR absAbs.361
7EROR abs, XAbs. Idx X371

注

  1. メモリモードフラグクリア時は2サイクル追加
  2. ダイレクトページの開始アドレスがページ境界になっていない場合1サイクル追加

フラグ変化

n-----zc

n: 結果のMSBが格納される。
z: 結果が0の場合にセットされ、それ以外の場合はクリアされる。
c: 演算前のメモリまたはアキュムレータの値のLSBがセットされる。

解説

ROR命令はオペコードによって指定されたアドレッシングモードに従って、アキュムレータまたはメモリの値を右回転シフトしてアキュムレータまたはメモリに返します。
シフト操作はキャリーフラグを含めた9ないし17ビットで実行され、キャリーフラグの値は結果のMSBとなり、演算前のLSBはキャリーフラグへ押し出されます。
アキュムレータが16ビット幅の場合は16ビットで計算を行い、8ビットの場合は8ビットで計算を行います。

使用例

複数バイトの値を右へずらす

    ; $10~$13 の32ビット値を半分にする(Aは16ビット)
    LSR $12         ; 上位ワードから右へずらし、あふれたビットはキャリーへ
    ROR $10         ; キャリーを受け取って下位ワードをずらす

符号付きの値を半分にする

    ; Aの符号付きの値を2で割る(負の方向へ丸める)
    CMP.w #$8000    ; 負ならキャリーがセットされる
    ROR A           ; キャリー(符号)を最上位に入れながら右へずらす

参照

AND命令
ASL命令
EOR命令
LSR命令
ORA命令
ROL命令