アセンブラの違いで混乱しないために

  MASM GAS(AT&T) GAS(Intel)
instruction mov mov mov
comment # comment # comment @ comment
literal 29 $29 #29
register reg %reg reg

まず、書式が AT&T 方式と Intel 方式で二通りあること。MASMIntel 記法で、GAS は元々 AT&T 記法だったんだけど、後から Intel 記法もサポートされた(ため混乱に拍車がかかる)。

本当によく間違えるのが、オペランドの順序で、何故間違えるかというと、両方の書式で書かれたコードを同時にメンテナンスしているからだ(何とかならないものか)。

次に面倒くさいのが '#' の扱い。GAS は AT&T 記法ではコメント、Intel 記法だと数値を表すのに使用され、さらに C のプリプロセスも書かれているので、意味がごちゃごちゃだ。

MASM は最初に勉強したアセンブラで、当時は AT&T 記法が冗長に感じて MASM を選んだんだけど、今でも MASM がもっとも記述がすっきりしていると感じる。ただし、悲しいかなターゲットプラットフォームが Windows だけなので、いまいち使いにくい(というか使う用途がない。だって C で十分じゃん)。

ついでに(表は作らないけど)x86 と ARM を比較すると、ARM の方がコードを書きやすい。いや、どっちもほぼ同じなんだけど、ARM の方が命令が豊富なので、コード量が少なくて済む、というのが書きやすい理由だ。その分、その豊富な命令を覚えなきゃならないという代償はあるんだけど、これは高級言語プログラマも標準クラスライブラリの API、というケースで同じ経験があるはずだ(x86 と ARM は C と C++ のようなそこまで大きな違いはないけれど)。