第8話 オタクの仕事っぷり


 プログラムは書いたそのままではコンピューターで実行できない。コンピューターが理解できる 0 と 1 だけで構成されるマシン語に変換しなくてはならないのだ。マシン語にするには、まず俺たちが C 系言語で書いたコードを変換コンパイルしてアセンブリ言語にする。アセンブリ言語はマシン語になる一歩手前の、0 と 1 に直接対応する言語だ。人間が見てわかる最もマシン語に近い言語と言える。これをアセンブラと呼ばれるプログラムで再び変換するとマシン語になる。


 俺は書き上がったコードを手動でコンパイルした。


 城崎には「キモい」と言われるが、俺はよくコンパイル後のアセンブリ言語とマシン語を目視でチェックしていた。これはマシン レベルでの処理、特に数値の処理を最適化するためだった。


 例えば、ある数値 A に 16 を掛けた結果が欲しい場合のコンピューターの動作はこんな風になる。


 まず、レジスタと呼ばれる領域 1 に A を入れ、次にレジスタ 2 に 16 を入れる。それからレジスタ 1 と 2 の掛け算をして結果をレジスタ 3 に入れる。


 これらはすべて 0 と 1 の二進数で処理される。この方法だと掛け算の処理をするときの CPU の実行サイクルが長くなる。0 と 1 を置き換える手順が増えるからだ。


 しかし、掛け算をする代わりに、レジスタ 1 に入っている二進数値を shift コマンドで四桁左送りにすると同じ結果が得られる。これだけで実行サイクルは二倍以上の早さになる。細かいことだが塵も積もれば山となるで、サクサク動くゲームを作るには、こういうちまちまとした工夫が大切なのだ。これを最適化という。


 最適化はコンパイラでもできるが、それは機械翻訳と似ている。出来上がったコードに矛盾が組み込まれてしまうこともあるし、一部のコードが消えてしまうこともある。

 もちろん、膨大なコードをすべてチェックすることはできないので、整合性を自動的にチェックしてくれる機能や、エラーを検出してくれる機能を使う。


 俺はわかるところはマシン語になったときの動作も見込んでコードを書いているが、マシン語に落とすまでは予測できないこともあるので、こうしてできる限り自分で見てチェックしていくのだ。


 トルクのテストは無事終わり、実機での動作も確認できた。試しに何度かこのシーンをプレイもしてみたが、すべての回においてトルクは無事に(?)死んだ。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る