素人プログラマがアセンブラでHello worldに挑戦してみた。
C言語入門→アセンブラ入門
最近、もっとコンピュータをちゃんと理解できるようになりたいと思ってC言語の勉強を始めました。「コンピュータやOSと直に会話している世界」に触れられるかもしれないと勝手に想像していたのですが、実際やってみたら予想と違って「PHP/Perlと似たようなもう一つの言語」を勉強している感覚に襲われました。
PHPもPerlもC言語も、あくまで「変数に値を代入する」という感覚であって、「メモリという物体にデータを書き込む」という感覚ではないんですよね。
そこで、毒を食らわば皿までもということで、アセンブラに入門してみました。
(環境はUbuntu9.10 32bitです。)
アセンブラ処理系NASMをインストールする
sourceforgeのサイトから、処理系(コンパイラ?)のソースコードをダウンロードできます。$ wget "http://sourceforge.net/projects/nasm/files/nasm%20sources/2.07/nasm-2.07.tar.gz/download"
$ tar xvfz nasm-2.07.tar.gz
$ cd nasm-2.07
$ ./configure
$ make
$ su
# make install
サンプルコードHello World
下記コードを ファイル名hello.asm で保存します。section .text
global _start ;リンカのための宣言
_start: ;リンカに開始ポイントを伝える
mov edx,len ;メッセージの長さ
mov ecx,msg ;メッセージ
mov ebx,1 ;標準出力を指定
mov eax,4 ;システムコール番号 (sys_write)
int 0x80 ;システムコール
mov eax,1 ;システムコール番号 (sys_exit)
int 0x80 ;システムコール
section .data
msg db 'Hello, world!',0xa ;メッセージ文字列
len equ $ - msg ;文字列の長さ
実行する。
$ nasm -f elf hello.asm && ld -s -o hello hello.o && ./hello
hello, world
できた!!感動した!!
参考:Linux でアセンブリプログラミング
カテゴリ: