« 技術書典2欠席します | Main | 技術書典4に申し込みました »

2017.12.17

元アセンブラプログラマの見るHuman Resource Machine その1 アーキテクチャ

皆さん、お久しぶりです。
AliceSystemのインフラエンジニアの毒舌な妹です。
今回、AliceSystemはC93 落選しました。blog更新とかしばらくさぼってたり、技術書典3で新刊が出なかったので落とされたかな?
今度の冬は0o10年記念か0x10回参加記念でタオルでも配ろうかと思っていたのですが、ままならないものです。


では、今日のお題はいつもと少し違って、ゲームの話です

今日は、最近話題のゲーム、Human Resource Machineを、とりあげることにします。
主催が元アセンブラプログラマなので、結構ノリノリで解いてました。
ソートは実装が「面倒」だけど難しいことは無かったって言ってたけど、本当かな?

どんなゲームなのかは他所で語り尽くされているところがあるので、そちらを参照してください。
ごく簡単に言えば、社畜ちゃんにアセンブラっぽく適切な命令を与えてステージごとの目的を達成するパズルゲームです。

ここでは、元アセンブラプログラマの目で、Human Resource Machineを見て行くことにします。
まずはアーキテクチャについてです。

結論言っちゃおう、これ、ハーバードアーキテクチャのアキュムレータマシンだよね。


Human Resource Machineのアーキテクチャ

コード領域とデータ領域が分離しているハーバードアーキテクチャです。メモリの内容操作は、データ領域に対してのみ行うことが可能です。
ノイマンアーキテクチャと比較したとき、コード領域はデータを含まないので、先読みキャッシュが容易になるという利点があります。
human Resource Machineでは、コードとデータの分離は徹底していて、メモリやレジスタに直接値を設定する命令が存在しません。
直値指定が必要な場合は、初期値をメモリにハードコーディングしておいてつかうというやりかたをしています。


社畜ちゃんの役割は何?

社畜ちゃんは、CPUでいうところのアキュムレータです。簡単に言うと、計算をやるための専用のレジスタをアキュムレータといいます。
床のタイルはレジスタじゃないよ。
全てのデータは、どこかにあるものを社畜ちゃんが持ち、それをどこかに置きます。
つまり、Human Resource Machineは、アキュムレータマシンでもあります。

アキュムレータマシンってなに?

全ての計算を、アキュムレータという計算用の特別なレジスタでのみ行うCPUアーキテクチャです。計算結果は、暗黙のうちにアキュムレータに上書きされます。
理論上のアキュムレータマシンは、レジスタはアキュムレータとププログラムカウンタ、フラグレジスタ
演算回路を簡単にできるという利点があり、Z80など昔のCPUは、演算に関してはアキュムレータマシンとして実装されていました。
計算はアキュムレータとメモリの中身、もしくは、このゲームでは存在しませんが、アキュムレータと他のレジスタとの間で行い、暗黙の家にアキュムレータに格納されます。

データの入出力

メモリとは別に、データの入出力を行うためのデバイスがあります。

処理すべきデータがやってくるところと、処理したデータを送り出すところは、それぞれ独立したFIFOです。
データは非同期に取り出し、送り出すことができます。

フラグ

フラグレジスタやフラグビットという形で明示されていませんが、フラグが存在します。
フラグは、ゼロフラグとネガティブフラグの二つだけです。
社畜ちゃんが今手に持っているもの、つまりアキュムレータの中身が数値の0であればゼロフラグが立ちます。
同様に、社畜ちゃんの手の中、アキュムレータの中身がマイナスの数値であれば、ネガティブフラグが立ちます。

ネガティブフラグは一般にはサインフラグと呼ばれ、直前に操作れたレジスタ(Human Resource Machineでは必ずアキュムレータ)の先頭ビットと同じ値になります。

一見足りないようですよね。特にキャリーフラグ。
多分、キャリーフラグはゲームでは使わないから省略されたと思われます。


プログラムカウンタ

明示的ではないですが存在します。ただし、PCの値を変更できるのはジャンプ命令だけです。なので、テクニックを使って悪いことをしたりはできません。


メモリ

お題によってサイズが異なります。お題に対して、あり余る領域が設定されています。といっても、20byteもなかったりするのですが。

間接アドレッシング

Human Resource Machineは間接アドレッシングをサポートしています。高級言語でいうところのポインタです。
あるメモリの中身を、メモリのアドレスと見て、その値のアドレスにアクセスすることができます。
スタックマシン以外のアーキテクチャでは、配列や文字列と言った連続したデータを眺めていくときに必要な概念です。

human Resoure Machineにはアドレスレジスタがないので、レジスタ間接アドレッシングはありません。

では、次回はこの情報をもとに、インストラクションセットを見て行くことにしましょう。


« 技術書典2欠席します | Main | 技術書典4に申し込みました »

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/21181/66167885

Listed below are links to weblogs that reference 元アセンブラプログラマの見るHuman Resource Machine その1 アーキテクチャ:

« 技術書典2欠席します | Main | 技術書典4に申し込みました »

My Photo

ブログパーツ

無料ブログはココログ
April 2018
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30