上の例のように、非拡張asm文を使ってC言語の関数を作るときは、asm文中に関数名にしたいラベルを書き、リターンしたい値を%eax(浮動小数点数は%st)に置いた後、retをする。その後改めて関数をexternで宣言する。名はラベルと同じにする。return命令であると思って差し支えない。●整数もしくはポインタを返す場合は、その値を%eaxに入れてからretする。数点レジスタスタックの先頭(%st(0)。%stと記述しても良い。)に積んでからretする。(古いプロセッサでFPUがないときは%eaxを使う。)ここで浮動小数点数を返す例を示す。引数については後述する。一組の引用符の中に命令を全て書いたり、上の例のように括弧の中に"\n\t"を用いてつらつら記述する方が良い。命令毎にasm文を書いた場合、意図したように動かないことが多い。ンラインアセンブリの最初に退避させ、最後に元に戻しておくべきである。これを怠るとまともに動かない。スタックに積もうとしてもうまくいかないことがある。このときは、後述のグローバル変数に退避させてごまかす方法もあるが、最良の方法は拡張インラインアセンブリの構文で書いてコンパイラ任せにすることであろう。命令末尾を使い分けること。■8:グローバル変数■グローバル変数は、asm文の中からもそのまま簡単に使用できる。foo_global,%eax");などなど。■9:ローカル変数■ローカル変数は、x86系では、%ebpを用いてアクセスする。通常、変数を使う際の労力を減らす為に拡張インラインアセンブリを使う。付けるとまともに動かないことがある。■10:関数の引数■x86系では関数の引数は、スタックポインタ(%esp)やフレームポインタ(%ebp)を用いてアクセスできる。プログラムの中でスタックの状態を意識しつつコーディングせねばならない。骨が折れるので、普通は拡張インラインアセンブリを使う。詳しくは、参考文献やインテルの配布しているpdfマニュアルを参照されたし。ここで敢えて非拡張asm文を用いた整数の掛け算の例を示す。