アセンブラ短歌のページ
(0) はじめに
- さてそもそもアセンブラ短歌とは何か?
- アセンブラ短歌とは、坂井弘亮先生が発明した非常に高度で文化的な遊びです(これはきっと10年後のテストに出ます!)。
- 好きなCPUを選んで、そのCPU向けに5+7+5+7+7=31バイトのプログラムを作ります。
- そしてそのプログラムについて、バイトの並びなどを人間が鑑賞するのです。
- http://kozos.jp/documents/LT_asm_tanka.pdf ← 将来重要文化財に指定される予定の資料ですので丁寧に扱ってください。
- いくつか細かいルールがあります。それは以下で補足します。
- (1) アプリケーションヘッダ的なものは基本的に31バイトに加算されない。OSECPUでいえば、最初の 05 E1 はノーカウント。
- (2) 31バイトはすべてCPUによって詠まれる(=実行される)必要がある。
- つまり文字列データを31バイト内のどこかに置いて、それを1バイトずつ読みながら文字表示するなんていうのはルール違反。
- メモリを確保して、そこへ機械語でデータを書き込んで、そのデータを使って表示させるのはOK。
- (3) 機械語命令は、5,7,5,7,7の区切りで切れなければいけない。つまり8バイト命令とかは使用不能。
- アセンブラ短歌では文字表示が特に好まれていますが、Kの独自の解釈によれば(=川合派)、これはアセンブラ短歌にとって必須の要素ではありません。文字表示にこだわるのは、もはや古典と言ってもいいかもしれません。
- しかしそれゆえに正統派とも言えます。
- なんにせよ、まずは基本である正統派を理解していただきます。
- [基本]
- 上記のPDFにあるとおり、x86(32bit)のLinux向けのアセンブラ短歌では、13バイトの任意のアルファベットを出力することができます。すごいですね。
- しかしこれはもう限界を極めてしまった感があって、この記録は越えられそうにないので、この方面で競ってもあまり面白くはありません(それでも基本は大切なので、タイ記録を作って遊ぶことはできます)。
- アセンブラ短歌では、みんなが知らないマニアックな命令(たとえばJECXZとか)をうまく混ぜてみたり、もしくは何度か同じバイトで終わって「韻を踏んで」みたり、まあそんな感じで、鑑賞に値する何かをやればいいのです。
- なんかえらく複雑で、逆アセンブルしても(実行してみるまで)結局何が表示されるのかさっぱりわからない、なんていう、超難読化プログラムも面白そうです。
- 僕たちはOS屋なので、ブートセクタ用にBIOSを叩いて面白いことをやることもできそうです。
- 結局問われているのは、プログラミングテクニックではなく、機械語に対する愛なのです。
- [発展]
- さて僕たちにはOSECPUがあります。OSECPUだって立派なアーキテクチャだと思うので、これで短歌を詠むことができます。
- というかx86はすでに時代遅れですよね。これからはOSECPUですよ。10年後の教科書には、x86は古文として紹介されると思います。
- で、OSECPUの機械語でアセンブラ短歌すると、22バイトの任意のアルファベットを出力することができます。
- というか5+7+5の17バイトだけでも12バイト出力できちゃいます。グラデーションも11バイト(ヘッダは数えないから)で書けるので、これを5+7+5に収めることはできそうです。
- ただまあ、OSECPUは機能密度において世界最強なのは当たり前なので、これで圧倒しても圧倒されないかもしれません。
- だとすると、人間を面白がらせるためには何をしたらいいんでしょうかねえ・・・。
(1) OSECPUの実力
- アセンブラ短歌においてOSECPUがどれほどすごいかを分かってもらうために、いろいろなプログラム例を紹介しようと思います。