ジャンプ・リターン命令

JMP (Jump to New Location)

オペランドで指定されたアドレスをPCに書き込むことでコードの実行位置を変えます。JSRとの違いはPCをスタックに積まず、直接指定されたアドレスにジャンプするということです。他のレジスタもスタックに積まれることはありません。
この命令で変更されうるフラグはありません。

OC 文法 アドレッシングモード バイト数 サイクル
4C JMP $???? Absolute 3 3  
6C JMP ($????) Absolute Indirect 3 5 1
7C JMP ($????,x) Absolute Indexed Indirect, X 3 6  


1:オペランドの下位バイトがFFのとき、エミュレーションモードでは不正な結果となる。

JML (Jump to New Location Long)

オペランドで指定されたアドレスをPCとPBRに書き込むことでコードの実行位置を変えます。JSLとの違いはPCとPBRをスタックに積まず、直接指定されたアドレスにジャンプするということです。他のレジスタもスタックに積まれることはありません。
この命令で変更されうるフラグはありません。

OC 文法 アドレッシングモード バイト数 サイクル
5C JML $?????? Absolute Long 4 4  
DC JML [$????] Absolute Indirect Long 3 6  

JSR (Jump to Subroutine)

PCの値をスタックに積んでからオペランドで指定されたアドレスをPCに書き込むことでコードの実行位置を変えます。
この命令で変更されうるフラグはありません。

OC 文法 アドレッシングモード バイト数 サイクル
20 JSR $???? Absolute 3 6  
FC JSR ($????,x) Absolute Indexed Indirect, X 3 8  

JSL (Jump to Subroutine Long)

PCとPBRの値をスタックに積んでからオペランドで指定されたアドレスをPCとPBRに書き込むことでコードの実行位置を変えます。
この命令で変更されうるフラグはありません。

OC 文法 アドレッシングモード バイト数 サイクル
22 JSL $?????? Absolute Long 4 8  

RTS (Return from Subroutine)

スタックに積んであったPCをプルしてPCをインクリメントすることでコードの実行位置を変えます。JSRでジャンプしたらRTSで帰るようにします。
サブルーチン内でスタック操作を行った場合、RTS命令までにスタックを元の状態に戻さなければバグの原因となります。
この命令で変更されうるフラグはありません。

OC 文法 アドレッシングモード バイト数 サイクル
60 RTS Stack 1 6  

RTL (Return from Subroutine Long)

スタックに積んであったPCとPBRをプルしてPCをインクリメントすることでコードの実行位置を変えます。JSLでジャンプしたらRTLで帰るようにします。
サブルーチン内でスタック操作を行った場合、RTL命令までにスタックを元の状態に戻さなければバグの原因となります。
この命令で変更されうるフラグはありません。

OC 文法 アドレッシングモード バイト数 サイクル
6B RTL Stack 1 6  

RTI (Return from Interrupt)

割り込みから復帰します。エミュレーションモード時はPCとステータスレジスタをプルします。
ネイティブモード時はPCとPBRとステータスレジスタをプルします。従って、割り込みの前後でEフラグの状態が同じでなければいけません。
割り込み処理内でスタック操作を行った場合、RTI命令までにスタックを元の状態に戻さなければバグの原因となります。
この命令で変更されうるフラグはすべてです。

OC 文法 アドレッシングモード バイト数 サイクル
40 RTI Stack 1 6 1


1:ネイティブモード時は1サイクル追加