インラインアセンブリ基礎の基礎
こんにちは。
簡単なインラインアセンブリのコードを書きます。
入力された値nまでの和sを求めます。
#include<stdio.h> int main(void){ int n; int s; printf("put a number:"); scanf("%d",&n); __asm__ volatile( " movl %1,%%eax ;" " movl %1,%%ebx ;" "L: decl %%ebx ;" " addl %%ebx,%%eax ;" " cmpl $0,%%ebx ;" " ja L ;" " movl %%eax,%0 ;" :"=r"(s) :"r"(n)); printf("sum = %d\n",s); return 0; }
コンパイル、実行はターミナルで
$ gcc -o <出力ファイル名> <入力ファイル名>
$ ./<出力ファイル名>
で大丈夫です。
このインラインアセンブリは拡張インラインアセンブリというもので、Cのコード内で宣言した変数に簡単にアクセスできる仕様になっています。非拡張インラインアセンブリではアドレッシングで変数の領域を指定してやらねばなりません。
あと、アセンブリにはループなぞという甘ったれた構文もないのでジャンプ命令(Cで言うとgoto)を使います。
このコードが何のためになるかと言われたらもう無いとしか答えられませんが、ただ、アセンブリはパズルみたいで楽しいです。
最近アセンブラ関連の書籍をチラホラ見るようになっていて若干のブームを感じています。
- 作者: 坂井弘亮
- 出版社/メーカー: 秀和システム
- 発売日: 2014/09/30
- メディア: 単行本
- この商品を含むブログを見る
Raspberry PiもあるのでARMアセンブラをやってみたいと思ってます。
次はシステムコールあたりを書きたいと思います。