アセンブリ言語
機械語よりはるかに人間にとって読みやすい
例えば、『実行可能ファイルの16進数表現「55」が、「pushl %ebp」に対応する』などと予め定義しておくことで、そういった利用ができている 拡張子は.s
アセンブリ→機械語の変換も「コンパイル」だが、わかりやすくあえて「アセンブルする」と言ったりもする
記法
gcc -S -masm=intel <input-file>
読みやすい
第一オペランドがdestination
第二オペランドがsource
レジスタの名前はそのまま表記
レジスタの値が指すアドレスを表すときは[]で囲む
gccやobjdumpのデフォルトの出力
第一オペランドがsource
第二オペランドがdestination
レジスタの名前に%を付ける
レジスタの値が指すアドレスを表すときは()で囲む
gccでCコードからアセンブリを出力する
-Sオプションを付ける
$ gcc -S hoge.c
gccでアセンブリを機械語にコンパイルする
$ gcc -o hoge hoge.s
$ ./hoge
構文
<Mnemonic> <Destination>, <Source>
Mnemonic: 命令
Destination: 値を受け取る領域のアドレス
Source: Destinationに作用する値、または値の入っている領域のアドレス
命令の例
Cコードをアセンブリにリアルタイム変換するサイト
参考
本を見つけた