Memo

メモ > 技術 > プログラミング言語: 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