توسعهدهنده(ها) | GNU Project |
---|---|
انتشار پایدار | 2.29.1
/ ۲۵ سپتامبر ۲۰۱۷ |
نوشتهشده با | C |
پلتفرم | Cross-platform |
نوع | Assembler |
مجوز | GNU General Public License v3 |
وبگاه |
اسمبلر گنو که به اختصار GAS یا AS شناخته میشود، اسمبلر است که توسط پروژه GNU استفاده شدهاست. گنو اسمبلر، back-end پیش فرض گنو کامپایلر(gcc) است. این برای اسمبل کردن سیستم عامل گنو و هسته لینوکس و نرمافزارهای دیگر مورد استفاده قرار میگیرد. گنو اسمبلر بخشی از بسته GNU Binutils است.
کد اجراییas , GAS نامیده میشود که نام استاندارد یک اسمبلر یونیکس است. GAS یک برنامه چند سکویی است (روی سیستم عاملهای مختلف کار میکند) و هر دو (GAS و AS)در تعدادی از معماریهای کامپیوتری مختلف کار میکنند. GAS تحت مجوز عمومی GNU منتشر شدهاست، GAS نرمافزار آزاد است (نرمافزاری که بتوان روی آن تغییر ایجاد و به نام خود منتشر کرد).
اولین نسخه GAS در سال ۱۹۸۶–۱۹۸۷ منتشر شد. دین السنر آن را برنامهنویسی کرد و از معماری VAX پشتیبانی میکرد.[۱]
GAS از یک سینتکس کلی استفاده میکند که برای تمام معماریهای پشتیبانی شده کار میکند. سینتکس کلی شامل سینتکسهای اسمبلر و یک روش برای کامنت گذاری است.
GAS از دستورالعملهای اسمبلر استفاده میکند (که با نام ops pseudo شناخته میشود)، که نام هر دستور کلید کلمه عملکرد آن است که مشابه دستورالعملهای preprocessor در زبان برنامهنویسی C رفتار میکنند. در حالی که اکثر دستورالعملهای اسمبلر بدون توجه به معماری هدف کار میکنند، برخی از دستورهای وابسته به معماری که در آن اجرا میشوند هستند.[۲]
GAS از دو سبک کامنت گذاری پشتیبانی میکند:[۳]
مشابه کامنت گذاری چند خطی در C کامنت با اسلش -ستاره آغاز و پایان مییابد:
/*
comment
*/
کامنتهای تک خط چند فرمت مختلف دارند که در معماریهای مختلف متفاوت است.
GNU Assembler به عنوان back-end برای یک مجموعه کامپایلر محبوب یعنی GCC، در کامپایل نرمافزارهای open source بسیار کاربرد دارد. GAS اغلب به عنوان اسمبلر در سیستم عاملهای گنو / لینوکس در کنار سایر نرمافزارهای GNU استفاده میشود. نسخه اصلاح شده GAS همچنین میتواند در بستههای برنامهنویسی و توسعه Macintosh ازسیستم عامل MacOS پیدا شود.
یک برنامه "Hello, world!" برای لینوکس در IA-32 با استفاده از دستورات AT & T بهطور پیش فرض:
.global _start
.text
_start:
movl $4, %eax
movl $1, %ebx
movl $msg, %ecx
movl $len, %edx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
.data
msg:
.ascii "Hello, world!\n"
len = . - msg
برنامه نویسانی که بیشتر به سینتکس اینتل عادت کردهاند این که اسمبلر در معماری x86 و x86-64، همانند بسیاری از اسمبلرهای دیگر، از این سینتکس پشتیبانی نمیکند را یک نقص میدانند.
[ <span title="The material near this tag may use weasel words or too-vague attribution.<nowiki/> (سپتامبر ۲۰۱۶)">بر اساس کدام
با این حال، از نسخه ۲٫۱۰، سینتکس اینتل را میتوان از طریق استفاده از دستورالعمل .intel_syntax
استفاده کرد.[۴][۵][۶]