メモ > 技術 > プログラミング言語: Assembly > アセンブリ言語 実践
アセンブリ言語 実践
$ vi test.s
… アセンブリ言語ソースファイルを作成。
.data # ここから文字列
msg: # ラベル
.string "Hello,world!\n" # 「.string」は「文字列を置く」という宣言(「asciz」と書いても同じ)
.text # ここから機械語
.globl main # 「main」ラベルを外部から参照できるようにする(コンパイラGASはmainラベルから実行する)
main: # ラベル
movl $4, %eax # writeシステムコール
movl $1, %ebx # 標準出力
movl $msg, %ecx # 出力するデータの先頭アドレス
movl $13, %edx # 出力バイト数
int $0x80 # システムコール実行
movl $1, %eax # exitシステムコール
movl $0, %ebx # 正常終了
int $0x80 # システムコール実行
$ gcc -o test test.s
… 実行ファイルを作成。
$ ll
… 実行ファイルを確認。
合計 12
-rwxrwxr-x 1 refirio refirio 6267 10月 22 14:47 2017 test
-rw-rw-r-- 1 refirio refirio 162 10月 22 14:47 2017 test.s
$ ./test
… プログラムを実行。
Hello,world!
参考までに、C言語からwriteシステムコールを呼び出す場合は以下のようになる。
引数の意味は、アセンブリ言語でシステムコールを呼び出す場合と同じになっている。
$ vi test.c
… C言語ソースファイルを作成。
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char msg[] = "Hello,world!\n";
write(1, msg, sizeof(msg));
return 0;
}
Advertisement