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

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

アセンブラ(17)

簡単なプログラムは実行できるようになりました。

実行例(加算)

以下のような C++ のプログラムを考えます。

int add(int x, int y) {
	return x + y;
}

これをコンパイルすると以下のようなアセンブリ言語のコードが得られます。

_Z3addii:
	move.l 4(%sp),%d0
	add.l 8(%sp),%d0
	rts

これは実行できるようになりました。

実行例(減算)

以下のような C++ のプログラムを考えます。

int sub(int x, int y) {
	return x - y;
}

これをコンパイルすると以下のようなアセンブリ言語のコードが得られます。

_Z3subii:
	move.l 4(%sp),%d0
	sub.l 8(%sp),%d0
	rts

これは実行できるようになりました。

コマンドの追加

このように関数をコンパイルしたコードを実行するため、以下のようなコマンドを追加します。

  • call ラベル 引数...

ラベルに「0」を指定すると先頭から実行します。

関数ではない普通のプログラムを実行するため、以下のようなコマンドを追加します。

  • run ラベル

これはラベルの位置からプログラムを実行します。ラベルを省略すると先頭から実行します。

コマンド

コマンド全体は以下のようになります。

  • exit
    • 終了
  • step
    • ステップ実行
  • continue
    • 実行再開
  • breakpoint 行番号
  • output 行番号
  • list 開始行番号 終了行番号
    • プログラムの表示
  • load
  • run ラベル
    • ラベルの位置からプログラムを実行
  • call ラベル 引数...
    • 関数を実行
    • ラベルに「0」を指定すると先頭から実行
  • reglist レジスタリストの文字列 または #数値
    • レジスタリストを転送する movem 命令のレジスタリストの解析
    • プッシュ時
    • 文字列または数値(パターンを表す2進数)で指定
  • rreglist レジスタリストの文字列 または #数値
    • レジスタリストを転送する movem 命令のレジスタリストの解析
    • ポップ時
    • 文字列または数値(パターンを表す2進数)で指定
  • sample
    • サンプルを実行
  • help
    • コマンドのリストを表示