| YASM(1) | The Yasm Modular Assembler | YASM(1) |
نام (NAME)
yasm - اسمبلر پیمانهای Yasm
خلاصه دستور (SYNOPSIS)
yasm [-f format] [-o outfile] [other options...] {infile}
yasm -h
توضیحات (DESCRIPTION)
اسمبلر ماژولار Yasm یک اسمبلر قابلحمل و با قابلیت تغییر معماری مقصد (retargetable) است که تحت مجوز “جدید” BSD (دو یا سه بندی) نوشته شده است. در حال حاضر Yasm از مجموعهدستورالعملهای x86 و AMD64 پشتیبانی میکند، نحوهای اسمبلر NASM و GAS را میپذیرد، قالبهای شیء باینری، ELF32، ELF64، COFF، Win32 و Win64 را در خروجی تولید میکند و اطلاعات اشکالزدایی سورسکد را در قالبهای STABS، DWARF 2 و CodeView 8 میسازد.
YASM شامل دستور yasm، کتابخانه اصلی پسزمینه libyasm و شمار زیادی از ماژولها است. در حال حاضر، libyasm و ماژولهای قابلبارگذاری بهصورت ایستا (استاتیک) درون فایل اجرایی yasm کامپایل شدهاند.
دستور yasm فایل ورودی infile را اسمبل کرده و در صورت مشخص شدن، خروجی را به فایل outfile هدایت میکند. اگر outfile مشخص نشده باشد، yasm نام فایل خروجی پیشفرض را از نام فایل ورودی استخراج میکند، معمولاً با افزودن .o یا .obj، یا با حذف تمام پسوندها برای یک فایل باینری خام. در صورت عدم موفقیت، نام فایل خروجی yasm.out خواهد بود.
اگر infile با مقدار “-” داده شود، yasm ورودی استاندارد را اسمبل کرده و در صورت مشخص بودن، خروجی را به فایل outfile، یا در صورت عدم تعیین outfile به yasm.out هدایت میکند.
گزینهها (OPTIONS)
بسیاری از گزینهها میتوانند به یکی از دو شکل ارائه شوند: یک خط تیره به همراه یک حرف منفرد، یا دو خط تیره به همراه نام کامل گزینه. گزینهها به ترتیب الفبایی فهرست شدهاند.
گزینههای عمومی (General Options)
-a arch یا --arch=arch: انتخاب معماری مقصد
-f format یا --oformat=format: انتخاب قالب شیء (Object)
-g debug یا --dformat=debug: انتخاب قالب اشکالزدایی (Debug)
-L list یا --lformat=list: انتخاب قالب فایل فهرست (List)
-l listfile یا --list=listfile: تعیین نام فایل فهرست
-m machine یا --machine=machine: انتخاب معماری ماشین مقصد
-o filename یا --objfile=filename: تعیین نام فایل شیء
-p parser یا --parser=parser: انتخاب تجزیهکننده (Parser)
-r preproc یا --preproc=preproc: انتخاب پیشپردازنده (Preprocessor)
-h یا --help: چاپ خلاصه گزینهها
--version: دریافت نسخه Yasm
گزینههای هشدار (Warning Options)
گزینههای -W دارای دو حالت متضاد هستند: -Wname و -Wno-name. در اینجا فقط حالتهای غیرپیشفرض نشان داده شدهاند.
گزینههای هشدار به همان ترتیبی که در خط فرمان وارد شدهاند پردازش میشوند، بنابراین اگر پس از -w گزینه -Worphan-labels بیاید، تمام هشدارها خاموش میشوند بهجز orphan-labels.
-w: غیرفعال کردن تمامی پیامهای هشدار
-Werror: در نظر گرفتن هشدارها به عنوان خطا
-Wno-unrecognized-char: عدم هشدار در مورد کاراکترهای ناشناخته ورودی
-Worphan-labels: هشدار در مورد برچسبهای فاقد دونقطه پایانی
-X style: تغییر شیوه گزارش خطا/هشدار
این گزینه به منظور یکپارچگی طبیعیتر Yasm با محیطهای IDE مانند Visual Studio یا Emacs فراهم شده است، تا IDE بتواند پیامهای خطا و هشدار را بهدرستی تشخیص دهد و به خط دارای ایراد در سورسکد پیوند دهد.
گزینههای پیشپردازنده (Preprocessor Options)
اگرچه این گزینههای پیشپردازنده از نظر تئوری روی هر پیشپردازندهای اثر میگذارند، اما در حال حاضر تنها پیشپردازنده موجود در Yasm پیشپردازنده “nasm” است.
-D macro[=value]: تعریف اولیه یک ماکرو
-e یا --preproc-only: فقط پیشپردازش
-I path: افزودن مسیر فایلهای Include
-P filename: گنجاندن اولیه یک فایل (Pre-include)
-U macro: لغو تعریف یک ماکرو
مثالها (EXAMPLES)
برای اسمبل سورسکد ۳۲ بیتی x86 با نحو NASM از source.asm به فایل ELF source.o، با هشدار در مورد برچسبهای بدون دونقطه (orphan labels):
yasm -f elf32 -Worphan-labels source.asm
برای اسمبل سورسکد AMD64 با نحو NASM از x.asm به فایل Win64 object.obj:
yasm -f win64 -o object.obj x.asm
برای اسمبل سورسکد x86 با نحو NASM که قبلاً پیشپردازش شده است از y.asm به فایل باینری تخت (flat binary) y.com:
yasm -f bin -r raw -o y.com y.asm
عیبیابی (DIAGNOSTICS)
دستور yasm در صورت موفقیت با وضعیت 0 خارج میشود و در صورت بروز خطا مقداری غیر صفر بازمیگرداند.
سازگاری (COMPATIBILITY)
اگرچه تجزیهکننده و پیشپردازنده NASM در Yasm تلاش میکنند تا حد امکان با NASM سازگار باشند، اما به دلیل ساختار داخلی متفاوت Yasm، ناسازگاریهای اندکی وجود دارد.
تجزیهکننده و پیشپردازنده GAS در Yasm فاقد تعدادی از ویژگیهای موجود در GNU AS هستند.
محدودیتها (RESTRICTIONS)
از آنجا که فایلهای شیء اغلب به معماری و نوع ماشین وابسته هستند، تمام ترکیبهای قالبهای شیء، معماریها و ماشینها مجاز نیستند؛ تلاش برای استفاده از یک ترکیب نامعتبر منجر به خطا خواهد شد.
هیچ پشتیبانی از نگاشت نمادها (symbol maps) وجود ندارد.
همچنین ببینید (SEE ALSO)
yasm_arch(7), yasm_dbgfmts(7), yasm_objfmts(7), yasm_parsers(7)
اشکالات (BUGS)
هنگام استفاده از معماری “x86”، تولید کد AMD64 (با استفاده از دستورالعمل BITS 64) و همزمان تولید یک فایل شیء ۳۲ بیتی (به دلیل عدم تعیین -m amd64 یا عدم انتخاب یک قالب شیء ۶۴ بیتی مانند ELF64 در خط فرمان) بسیار آسان رخ میدهد.
نویسنده (AUTHOR)
Peter Johnson <peter@tortall.net>
حق نشر (COPYRIGHT)
Copyright © 2004, 2005, 2006, 2007 Peter Johnson
| April 2007 | Yasm |