非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

アセンブラ(4)

前回のプログラムを改造して 68000 アセンブリ言語インタープリターを作ります。以下のような仕様とします。

デバッガーのコマンド

exit

終了

step

ステップ実行

continue

実行再開

breakpoint 行番号

ブレークポイント設定・解除

output

デバッグ出力設定・解除

list 開始行番号 終了行番号

プログラムの表示

実行できる命令

MOVE 系命令
  • MOVE src, dst
  • MOVEA src, dst
  • MOVEQ src, dst
MOVEM
  • MOVEM src, dst
JMP
  • JMP ラベル
J~ (条件分岐命令)
  • JE ラベル
  • JNE ラベル
  • JG ラベル
  • JGE ラベル
  • JL ラベル
  • JLE ラベル
  • JA ラベル
  • JAE ラベル
  • JB ラベル
  • JBE ラベル
  • JS ラベル
  • JNS ラベル
  • JO ラベル
  • JNO ラベル
JSR
  • JSR ラベル
LEA
  • LEA src, dst
PEA
  • PEA src, dst
  • LINK src, dst
UNLK
  • UNLK src, dst
ADD 系命令
  • ADD src, dst
  • ADDA src, dst
  • ADDQ src, dst
  • ADDX src, dst
SUB 系命令
  • SUB src, dst
  • SUBA src, dst
  • SUBQ src, dst
  • SUBX src, dst
CMP
  • CMP src, dst
NEG 系命令
  • NEG dst
  • NEGX dst
TST
  • TST dst
AND
  • AND src, dst
OR
  • OR src, dst
EOR
  • EOR src, dst
NOT
  • NOT dst
シフト系命令
  • LSL src, dst
  • LSR src, dst
  • ASL src, dst
  • ASR src, dst
  • ROL src, dst
  • ROR src, dst
  • ROXL src, dst
  • ROXR src, dst

オペランド

オペランドがアドレスを表す場合
オペランドが値を表す場合のデータのサイズ

命令の後に

  • .B が付く → 1 バイト
  • .W が付く → 2 バイト
  • .L が付く → 4 バイト
オペランドが値を表す場合(取得)
  • ラベル → ラベルが表すアドレスから指定したサイズの値を取得
  • #数値 → その数値を取得
  • レジスタレジスタの値を(指定したサイズにして)取得
  • (レジスタ) → レジスタが表すアドレスから指定したサイズの値を取得
  • 数値(レジスタ) → レジスタの値 + 数値が表すアドレスから指定したサイズの値を取得
オペランドが値を表す場合(設定)
  • ラベル → ラベルが表すアドレスから指定したサイズに値を設定
  • レジスタレジスタの値(指定したサイズ)を設定
  • (レジスタ) → レジスタが表すアドレスから指定したサイズに値を設定
  • 数値(レジスタ) → レジスタの値 + 数値が表すアドレスから指定したサイズに値を設定