« スローブログ宣言 | メイン | イチロー語録 »
2005年09月01日
アセンブラ読本
橋本和明、leye『アセンブラ読本 for Game――ゼロからはじめるゲーム改造』(アスペクト、2005)
アセンブラというのは、機械語とかマシン語とも呼ばれる、CPUが直接読み取って実行する数字列に対応するプログラミング言語のこと。言語というより、CPUの生の命令体系といったほうが近い。アセンブラと聞くと、いまだにワクワクして鳥肌が立つ。CだのC++だのが実用上いいのはわかるし、JavaもRubyもC#もいいんだけど、やっぱり「Lispか、しからずんばアセンブラだ」っていうようなハッカーが断然カッコイイと思う。
20年以上も前の小学生のころ、NECの8ビットマイコン、PC-8801を親に買ってもらった。で、88で大ブームになった『ドアドア』とか『アルフォス』いったゲームをディスアセンブルしてデータを改造したことを思い出した。3機しかない自機の数を255機に増やしたりするんだけど、何をするかといえば、データエリアに書かれた「00 fa 03 cc」といった文字の羅列から「3機」を意味する「03」の場所を見つけて、そこを書き換えるだけ。カンが外れればプログラムは暴走し、うまくいけば自機は増える。
どんなプログラムでも初期化の場面で、必ずデータエリアから初期値を読み出してデータをセットするので、頭のほうからプログラムを読み流していくと、それらしきルーチンに、それらしきLDとかMOV命令が見つかって、それが参照しているアドレスを探っていく、というようなことをやった記憶がある。経験とともに、16進数の数字の羅列でしかないダンプリストをみているだけで、だいたい何をやっているか、単なるデータエリアなのかという区別もつくようになってくる。簡単な定型的処理や、よく呼び出されるシステムコールやIOポートであれば、ディスアセンブルすることなく、「ははぁ、キー入力を判定して画面に何か描いてるな」というように、いきなり数字を読み下せるようになってくる。F3C8というVRAMの開始アドレスを20年以上経ったいまも、なぜか覚えていたりする。
そういうのと、やってることは、いまでもまったく同じらしい。違いは、データ解析用のツールがそろっていることと、CPUがZ80かx86かの違い。x86といっても、命令セットは8086に毛が生えたようなものだし、変わらない。
しかし、この本、アセンブラ読本と銘打ってるのに、160ページ目になってようやくpushとpopの解説が出てくるって、どういうことだ(笑)
投稿者 ken : 2005年09月01日 23:09
トラックバック
このエントリーのトラックバックURL:
http://d-code.org/blog/mt-tb.cgi/122