انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: Mehrdad Dolatkhah در 22 آبان 1393، 10:24 ق‌ظ

عنوان: برنامه نویسی اسمبلی با nasm
ارسال شده توسط: Mehrdad Dolatkhah در 22 آبان 1393، 10:24 ق‌ظ
سلام به همه عزیزان
بنده به تازگی به دنیای لینوکس وارد شدم و سوال های زیادی برام بوجود امده . یکی از این سوال ها اینه که چطوری یه برنامه اسمبلی ساده رو با nasm یا emacs بنویسم و اجراش کنم .
عنوان: پاسخ : برنامه نویسی اسمبلی با nasm
ارسال شده توسط: دانیال بهزادی در 23 آبان 1393، 02:39 ق‌ظ
درود بر تو. به دنیای آزاد خوش اومدی.
نخستین راهنمایی که می‌تونم بهش بکنم اینه که اسم این سیستم‌عامل زیبای ما لینوکس نیست. لینوکس تنها یکی از برنامه‌هاییه که ما روی این سیستم‌عامل داریم. اسم درست اون گنو/لینوکسه که یعنی سیستم‌عامل گنو به اضافه‌ی لینوکس به عنوان کرنل. حالا با توجّه به این نکته به سراغ پاسخ پرسشت می‌ریم.
اسمبلر گنو (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به همین راحتی
عنوان: پاسخ : برنامه نویسی اسمبلی با nasm
ارسال شده توسط: mohsen-rashidi در 23 آبان 1393، 06:09 ب‌ظ
البته as از سینتکس AT&T بهره می گیره.
برای کار با سینتکس اینتل همون nasm رو نصب کن.

ویرایش: این خود آموز می تونه مفید باشه:
http://docs.cs.up.ac.za/programming/asm/derick_tut/ (http://docs.cs.up.ac.za/programming/asm/derick_tut/)
عنوان: پاسخ : برنامه نویسی اسمبلی با nasm
ارسال شده توسط: Mehrdad Dolatkhah در 25 آبان 1393، 08:36 ب‌ظ
درود و شاد باش
دوستان بابت اطلاعاتی که به بنده دادید ازتون ممنونم.واقعا دنیای جالبیه !‌
خیلی خوشحالم که به این دنیا جالب امدم  و در کنار شما عزیزانم .

دوستان برای شروع برنامه نویسی با اسمبلی چه منبعی رو استفاده کنم ؟  (سابقه برنامه نویسی بصورت کاملا مبتدی رو دارم ) و سطح دانشم هم در سطح همون دانشگاه هستش !‌ (متوجه شدید که منظورم چیه دیگه ؟!)