ROR 命令 (Rotate Memory Right)
アキュムレータまたはメモリの値を右ローテートします。
ROR オーバーロード
| オペコード | 構文 | アドレッシングモード | バイト数 | 命令サイクル | 注 |
|---|---|---|---|---|---|
| 6A | ROR A | Acc. | 1 | 2 | |
| 66 | ROR dp | DP. | 2 | 5 | 1, 2 |
| 76 | ROR dp, X | DP. Idx X | 2 | 6 | 1, 2 |
| 6E | ROR abs | Abs. | 3 | 6 | 1 |
| 7E | ROR abs, X | Abs. Idx X | 3 | 7 | 1 |
注
- メモリモードフラグクリア時は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 ; キャリー(符号)を最上位に入れながら右へずらす