アセンブラかるたを極めたい。

 SECCON2013 横浜大会にて「アセンブラかるた」というものが扱われました。詳しくはリンク先を見てほしいのですが、一言でいうと"x86の1バイト命令を使ったかるた"です。例えば、表が0x90なら裏はNOPとか、そんな感じ。

 このアセンブラかるた、極めるのは実はそんなに難しくありません。1バイト命令である以上、扱われる命令は最大でも256個しかないわけです(実際はもっとずっと少ない)。
 f:id:b07c00:20130827005649p:plain

 つまり、これを全部覚えればOK!

 最初に覚えるポイントとしては、まず0x4Xはincとdec、0x5Xはpushとpopを覚えましょう。そして0x9Xの前半はxchg。これだけでとりあえず初心者には勝てるようになります。レジスタの順番は固定なので暗記するところも少ないです。

 それらを覚えたら、次は全体的な配置です。似たような命令はだいたい同じところに固まっていますので"こういう命令はこの辺にある"みたいなざっくりとした全体図を覚えておけば、それだけで推測できます。これは1バイト命令に限らず、2バイト以上の命令でも同じです。全体的な雰囲気がつかめれば、たとえすぐには分からなくとも思い出しやすくなります。

 そしてもちろん、全部覚えてしまったら完璧です。あとは速度だけの問題になるでしょう。というより、1バイト命令をすべて覚えてしまうのはそれほど難しくなく、かつ、覚えてしまった同士の対決だと普通の"かるた"と同じです。なので、極めた同士の対決だとただのかるた勝負になりそうですがw、それはそれでまた楽しいんじゃないかと思います。

 そしてこれ、2バイト命令版とか3バイト命令版とかも作れそうですが、2バイト命令ならまだしも3バイト以上になるとかなり厳しい勝負になるんじゃないかというか、そもそもぼく2バイトすらろくに覚えてないからきっと実際やるとなったらまったく勝てないと思います。いまのうちに覚えておこうかなw