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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: برنامه نویسی اسمبلی با nasm  (دفعات بازدید: 2885 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین Mehrdad Dolatkhah

  • Full Member
  • *
  • ارسال: 208
  • جنسیت : پسر
  • Impossible Impossible
    • غیرممکن غیرممکنه !!!
برنامه نویسی اسمبلی با nasm
« : 22 آبان 1393، 10:24 ق‌ظ »
سلام به همه عزیزان
بنده به تازگی به دنیای لینوکس وارد شدم و سوال های زیادی برام بوجود امده . یکی از این سوال ها اینه که چطوری یه برنامه اسمبلی ساده رو با nasm یا emacs بنویسم و اجراش کنم .
http://mskm.ir/
Imagination is more important than science

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19724
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : برنامه نویسی اسمبلی با nasm
« پاسخ #1 : 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به همین راحتی
« آخرین ویرایش: 23 آبان 1393، 02:48 ق‌ظ توسط دانیال بهزادی »
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین mohsen-rashidi

  • High Sr. Member
  • *
  • ارسال: 646
  • جنسیت : پسر
  • Hacker`s Emblem
    • اینجا خانه محسن است
پاسخ : برنامه نویسی اسمبلی با nasm
« پاسخ #2 : 23 آبان 1393، 06:09 ب‌ظ »
البته as از سینتکس AT&T بهره می گیره.
برای کار با سینتکس اینتل همون nasm رو نصب کن.

ویرایش: این خود آموز می تونه مفید باشه:
http://docs.cs.up.ac.za/programming/asm/derick_tut/
« آخرین ویرایش: 23 آبان 1393، 06:37 ب‌ظ توسط mohsen-rashidi »

آفلاین Mehrdad Dolatkhah

  • Full Member
  • *
  • ارسال: 208
  • جنسیت : پسر
  • Impossible Impossible
    • غیرممکن غیرممکنه !!!
پاسخ : برنامه نویسی اسمبلی با nasm
« پاسخ #3 : 25 آبان 1393، 08:36 ب‌ظ »
درود و شاد باش
دوستان بابت اطلاعاتی که به بنده دادید ازتون ممنونم.واقعا دنیای جالبیه !‌
خیلی خوشحالم که به این دنیا جالب امدم  و در کنار شما عزیزانم .

دوستان برای شروع برنامه نویسی با اسمبلی چه منبعی رو استفاده کنم ؟  (سابقه برنامه نویسی بصورت کاملا مبتدی رو دارم ) و سطح دانشم هم در سطح همون دانشگاه هستش !‌ (متوجه شدید که منظورم چیه دیگه ؟!)
http://mskm.ir/
Imagination is more important than science