درود بر تو. به دنیای آزاد خوش اومدی.
نخستین راهنمایی که میتونم بهش بکنم اینه که اسم این سیستمعامل زیبای ما لینوکس نیست. لینوکس تنها یکی از برنامههاییه که ما روی این سیستمعامل داریم. اسم درست اون گنو/لینوکسه که یعنی سیستمعامل گنو به اضافهی لینوکس به عنوان کرنل. حالا با توجّه به این نکته به سراغ پاسخ پرسشت میریم.
اسمبلر گنو (GNU assembler) بخشی از بستهی GNU Bin-utils هست که به صورت پیشفرض در توزیعهای گنو/لینوکس مثل اوبونتو نصبه. برای اجرای اون میتونی از عبارت as که مخفّف assembler استفاده کنی. برای یاد گرفتن کار با این برنامه مثل همهی برنامههای دیگه میتونی از برنامهی man که مخفّف manual هست استفاده کنی. کافیه ترمینال رو باز کنی و بنویسی:
$ man as
تا راهنمای ۱۳۹۸ خطی اون رو ببینی. خلاصهای اون به این صورته که fه فرض اگه اسم پروندهای که توش اسمبلی نوشتی باشه hello.s و محتویاتش این باشه:
.data
.globl hello
hello:
.string "Hello, world!"
.text
.global main
main:
pushq %rbp
movq %rsp, %rbp
movq $hello, %rdi
call puts
movq $0, %rax
leave
ret
ایتدا باید بزنی:
$ as hello.s -o hello.o
تا as کدت رو تبدیل به آبجکت hello.o کنه. در مرحلهی بعد باید از لینکر گنو (GNU linker) استفاده کنی که اون هم توی همون بستهاست و با دستور ld میشه اجراش کرد. یعنی بنویسی:
$ ld hello.o -o hello
تا ld آبجکت hello.o رو تبدیل به پروندهی اجرای hello کنه.
البته استفاده از این روش به صورت خام ممکنه برات سخت باشه. در این صورت میتونی از فرانتاند GCC که سرنام GNU Compiler Collection هست برای این کار استفاده کنی. طبق نمونهی بالا میتونی با این دستور از کدت خروجی بگیری:
$ gcc hello.s -o hello
این دستور gcc رو اجرا میکنه و بهش میگه پروندهی hello.s رو کامپایل (در اینجا اسمبل) کن و خروجی اون رو در قالب پروندهی اجرایی به نام hello بهم بده.
حالا میتونی hello رو اجرا کنی، ولی قبل از هرچیز باید بهش دسترسی اجرایی بدی. اینجوری:
$ chmod +x hello
حالا میتونی اون رو اجرا کنی:
$ ./hello
به همین راحتی