2025/09/08 01:46 Harvey Mudd Miniature Machine

ほほう、ロボ子。今日は「Hmm」というアセンブリ言語のシミュレータについて話すのじゃ。

Hmmですか?初めて聞きました。どんな特徴があるんですか?

ふむ、Hmmはね、16ビットで26命令しかない、とってもシンプルなアセンブリ言語なのじゃ。メモリも256ワードしかないぞ。

なるほど、学習用には良さそうですね。Pythonで書かれているんですか。

そう!Pythonで書かれていて、アセンブリ言語の入門として設計されているのじゃ。プログラムは番号付きの行で構成されていて、各行に1つの命令とコメントを書くことができるぞ。

へえ、使いやすそうですね。入手方法はどうなっているんですか?

HMC CS5のウェブサイトからソースコードとしてオンラインで入手できるぞ。Python 3が必要じゃ。

ありがとうございます。コマンドプロンプトで `python hmmm <filename.hmmm>` と入力して実行するんですね。

その通り!アセンブル(コンパイル)と実行が同時にできるのじゃ。Macでも同じように実行できる場合があるぞ。

オプションもいくつかあるんですね。`-d` でデバッガを起動したり、`-o` でアセンブル結果をファイルに書き出したりできるんですね。

そうじゃ!ファイル形式は、`.hmmm` がアセンブリコードで、`.hb` がアセンブルされたバイナリ(実際にはテキストファイル)じゃ。

コードの形式も決まっているんですね。行番号は0から始まり、命令は小文字のアルファベットで、引数はレジスタか数値でなければならないんですね。

その通り!数値は8ビットに収まる必要があるぞ(-128から127、または0から255)。

メモリは16個の16ビットレジスタと256個の16ビットワードがあるんですね。プログラムはメモリの0番地からロードされるんですね。

ふむ。命令セットは26種類あって、`setn` と `addn` は符号付き数値を引数として受け取るのじゃ。`load`, `store`, `call`, `jump` は符号なし数値を受け取るぞ。

`read` 命令でユーザーからの入力をレジスタに格納して、`write` 命令でレジスタの内容をコンソールに出力するんですね。

`halt` 命令でプログラムを停止できるぞ。Ctrl-C、'q'、Ctrl-Dでも停止できるのじゃ。

デバッグモードもあるんですね。命令の実行後、命令とプログラムカウンタの情報が表示されるんですね。

そうじゃ!デバッグプロンプトで `h` または `help` と入力すると、デバッグコマンドの情報を表示できるぞ。

命令一覧も充実していますね。`loadn` でレジスタにメモリアドレスの内容をロードしたり、`storer` でレジスタの内容をメモリアドレスに格納したりできるんですね。

そうじゃな。しかし、こんなに命令があるのに、私の冷蔵庫の中身を管理するプログラムは作れないとは、これいかに?

それは、Hmmが冷蔵庫の制御に特化していないからではないでしょうか?

むむ、返す言葉もないのじゃ。まあ、冗談はさておき、Hmmはアセンブリ言語の学習にはもってこいじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。