命令セットの詳細
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/18 09:45 UTC 版)
基本的なアドレッシングモードは以下の通りである。 レジスタ直接データレジスタ、例 "D0" アドレスレジスタ、例 "A6" レジスタ間接単純アドレス、例 (A0) ポストインクリメント付アドレス、例 (A0)+ プレデクリメント付アドレス -(A0) 16ビット符号付オフセット、例 16(A0) 実際のインクリメントやデクリメントのサイズはオペランドの指定によって変わる。バイトリード命令ではインクリメントすると、アドレスに1を加算し、ワード(16ビット)では2を、ロング(32ビット)では4を加算する。 インデックス付レジスタ間接8ビット符号付オフセット、例 8(A0, D0) または 8(A0, A1) プログラムカウンタ相対16ビット符号付オフセット、例 16(PC). このモードは非常に便利 インデックス付8ビット符号付オフセット、例 8(PC, D2) 絶対アドレス指定"$4000"のような数値や、アセンブラが翻訳するシンボリックな名前。 68000のアセンブリ言語では16進数を表すのに "0x" ではなく "$" を使うものが多い。 イミディエート値命令内に埋め込み、例 "#400". 追加:ステータスレジスタへのアクセス。後のモデルでは他の特殊レジスタも同様。 多くの命令にはドットに続くサフィックスが付き、処理単位を8ビット (".b")、 16ビット (".w")、32ビット (".l") で指定する。 多くの命令は入力(ソース)と出力(デスティネーション)を持ち、デスティネーションに変更を加える。主な命令は以下の通りである。 算術演算:ADD, SUB, MULU(符号なし掛け算), MULS(符号あり掛け算), DIVU, DIVS, NEG(否定加算), CMP(減算の一種だが、ステータスビットにのみ結果を反映し、実際の減算結果は格納しない) 二進化十進演算:ABCD, SBCD 論理演算:EOR(排他的論理和), AND, NOT(論理否定) シフト演算:論理シフト、つまり右シフトで最上位ビットをゼロにする: LSL, LSR 算術シフト、つまり最上位ビットを符号拡張する: ASR, ASL ローテート、eXtendを使う命令と使わない命令: ROXL, ROXR, ROL, ROR メモリ内のビット操作:BSET(1にする), BCLR(0にする), and BTST(SRのZeroビットをセット) マルチプロセッサ制御:TAS(テストアンドセット、1命令でビットテストのためのリードとその結果のライトの2つのメモリアクセスを割り込みなどで中断されない不可分なバスサイクルで行うことによりメモリ共有型マルチプロセッサでのセマフォを実現) フロー制御:JMP(ジャンプ), JSR(サブルーチンコール), BSR(相対アドレスでのサブルーチンコール), RTS(サブルーチンからの復帰), RTE(例外や割り込みからの復帰), TRAP(ソフトウェア割り込みに似たソフトウェア例外を発生), CHK(条件付きソフトウェア割り込み) 分岐:Bcc("cc"は分岐条件として16種類のステータスレジスタのチェック方法を記述:equal(等しい), greater than(大きい), less-than(小さい), carry, これらの組み合わせや論理否定) デクリメント付き分岐:DBcc("cc"は分岐命令と同じ意味)指定したデータレジスタをデクリメントした後、指定された条件が真で、デクリメント結果が-1でないなら分岐する。0ではなく-1でチェックするのは、ループを記述する場合にコードを単純化するためである。ループカウンタとして最初から0が指定された場合、デクリメントされて-1になるので分岐しない。したがって0かどうかをループに入る前にチェックする必要がない。
※この「命令セットの詳細」の解説は、「MC68000」の解説の一部です。
「命令セットの詳細」を含む「MC68000」の記事については、「MC68000」の概要を参照ください。
- 命令セットの詳細のページへのリンク