'\" t .\" Title: yasm .\" Author: Peter Johnson .\" Generator: DocBook XSL Stylesheets v1.75.2 .\" Date: April 2007 .\" Manual: The Yasm Modular Assembler .\" Source: Yasm .\" Language: English .\" .TH "YASM" "1" "April 2007" "Yasm" "The Yasm Modular Assembler" .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" yasm \- اسمبلر پیمانه‌ای Yasm .SH "خلاصه دستور (SYNOPSIS)" .HP \w'\fByasm\fR\ 'u \fByasm\fR [\fB\-f\ \fR\fB\fIformat\fR\fR] [\fB\-o\ \fR\fB\fIoutfile\fR\fR] [\fB\fIother\ options\fR\fR...] {\fIinfile\fR} .HP \w'\fByasm\fR\ 'u \fByasm\fR \fB\-h\fR .SH "توضیحات (DESCRIPTION)" .PP اسمبلر ماژولار Yasm یک اسمبلر قابل‌حمل و با قابلیت تغییر معماری مقصد (retargetable) است که تحت مجوز \(lqجدید\(rq BSD (دو یا سه بندی) نوشته شده است\&. در حال حاضر Yasm از مجموعه‌دستورالعمل‌های x86 و AMD64 پشتیبانی می‌کند، نحو‌های اسمبلر NASM و GAS را می‌پذیرد، قالب‌های شیء باینری، ELF32، ELF64، COFF، Win32 و Win64 را در خروجی تولید می‌کند و اطلاعات اشکال‌زدایی سورس‌کد را در قالب‌های STABS، DWARF 2 و CodeView 8 می‌سازد\&. .PP YASM شامل دستور \fByasm\fR، کتابخانه اصلی پس‌زمینه libyasm و شمار زیادی از ماژول‌ها است\&. در حال حاضر، libyasm و ماژول‌های قابل‌بارگذاری به‌صورت ایستا (استاتیک) درون فایل اجرایی \fByasm\fR کامپایل شده‌اند\&. .PP دستور \fByasm\fR فایل ورودی infile را اسمبل کرده و در صورت مشخص شدن، خروجی را به فایل \fIoutfile\fR هدایت می‌کند\&. اگر \fIoutfile\fR مشخص نشده باشد، \fByasm\fR نام فایل خروجی پیش‌فرض را از نام فایل ورودی استخراج می‌کند، معمولاً با افزودن \&.o یا \&.obj، یا با حذف تمام پسوندها برای یک فایل باینری خام\&. در صورت عدم موفقیت، نام فایل خروجی yasm\&.out خواهد بود\&. .PP اگر \fIinfile\fR با مقدار \(lq\-\(rq داده شود، \fByasm\fR ورودی استاندارد را اسمبل کرده و در صورت مشخص بودن، خروجی را به فایل \fIoutfile\fR، یا در صورت عدم تعیین \fIoutfile\fR به yasm\&.out هدایت می‌کند\&. .SH "گزینه‌ها (OPTIONS)" .PP بسیاری از گزینه‌ها می‌توانند به یکی از دو شکل ارائه شوند: یک خط تیره به همراه یک حرف منفرد، یا دو خط تیره به همراه نام کامل گزینه\&. گزینه‌ها به ترتیب الفبایی فهرست شده‌اند\&. .SS "گزینه‌های عمومی (General Options)" .PP \fB\-a \fR\fB\fIarch\fR\fR یا \fB\-\-arch=\fR\fB\fIarch\fR\fR: انتخاب معماری مقصد .RS 4 معماری مقصد را انتخاب می‌کند\&. معماری پیش‌فرض \(lqx86\(rq است که هم از مجموعه‌دستورالعمل‌های IA\-32 و مشتقات آن و هم از AMD64 پشتیبانی می‌کند\&. برای چاپ فهرستی از معماری‌های موجود در خروجی استاندارد، از \(lqhelp\(rq به‌عنوان \fIarch\fR استفاده کنید\&. برای مشاهده فهرستی از معماری‌های پشتیبانی‌شده به \fByasm_arch\fR(7) مراجعه کنید\&. .RE .PP \fB\-f \fR\fB\fIformat\fR\fR یا \fB\-\-oformat=\fR\fB\fIformat\fR\fR: انتخاب قالب شیء (Object) .RS 4 قالب شیء خروجی را انتخاب می‌کند\&. قالب شیء پیش‌فرض \(lqbin\(rq است که یک باینری تخت بدون قابلیت جابه‌جایی (relocation) است\&. برای چاپ فهرستی از قالب‌های شیء موجود در خروجی استاندارد، از \(lqhelp\(rq به‌عنوان \fIformat\fR استفاده کنید\&. برای مشاهده فهرستی از قالب‌های شیء پشتیبانی‌شده به \fByasm_objfmts\fR(7) مراجعه کنید\&. .RE .PP \fB\-g \fR\fB\fIdebug\fR\fR یا \fB\-\-dformat=\fR\fB\fIdebug\fR\fR: انتخاب قالب اشکال‌زدایی (Debug) .RS 4 قالب اشکال‌زدایی را برای اطلاعات دیباگ انتخاب می‌کند\&. اطلاعات اشکال‌زدایی توسط یک اشکال‌زدا (دیباگر) قابل استفاده است تا کد اجرایی را به فایل مبدأ مرتبط سازد یا اطلاعات ساختار داده و نوع را به دست آورد\&. قالب‌های اشکال‌زدایی موجود در میان قالب‌های مختلف شیء متفاوت است؛ \fByasm\fR در صورت انتخاب یک ترکیب نامعتبر خطا خواهد داد\&. قالب اشکال‌زدایی پیش‌فرض بر اساس قالب شیء انتخاب می‌شود\&. برای چاپ فهرستی از قالب‌های اشکال‌زدایی موجود در خروجی استاندارد، از \(lqhelp\(rq به‌عنوان \fIdebug\fR استفاده کنید\&. برای مشاهده فهرستی از قالب‌های اشکال‌زدایی پشتیبانی‌شده به \fByasm_dbgfmts\fR(7) مراجعه کنید\&. .RE .PP \fB\-L \fR\fB\fIlist\fR\fR یا \fB\-\-lformat=\fR\fB\fIlist\fR\fR: انتخاب قالب فایل فهرست (List) .RS 4 قالب/سبک فایل فهرست خروجی را انتخاب می‌کند\&. فایل‌های فهرست معمولاً سورس‌کد اصلی را با کد ماشین تولیدشده توسط اسمبلر در هم می‌آمیزند\&. قالب پیش‌فرض فهرست \(lqnasm\(rq است که از قالب فایل فهرست NASM الگوبرداری می‌کند\&. برای چاپ فهرستی از قالب‌های موجود فایل فهرست در خروجی استاندارد، از \(lqhelp\(rq به‌عنوان \fIlist\fR استفاده کنید\&. .RE .PP \fB\-l \fR\fB\fIlistfile\fR\fR یا \fB\-\-list=\fR\fB\fIlistfile\fR\fR: تعیین نام فایل فهرست .RS 4 نام فایل فهرست خروجی را مشخص می‌کند\&. اگر این گزینه استفاده نشود، هیچ فایل فهرستی ایجاد نخواهد شد\&. .RE .PP \fB\-m \fR\fB\fImachine\fR\fR یا \fB\-\-machine=\fR\fB\fImachine\fR\fR: انتخاب معماری ماشین مقصد .RS 4 معماری ماشین مقصد را انتخاب می‌کند\&. نوع ماشین که در اصل یک زیرنوع از معماری انتخاب‌شده است، میان زیرمجموعه‌های اصلی یک معماری تمایز قائل می‌شود\&. برای مثال، برای معماری \(lqx86\(rq، دو ماشین موجود عبارتند از \(lqx86\(rq که برای مجموعه‌دستورالعمل ۳۲ بیتی IA\-32 و مشتقات آن به کار می‌رود، و \(lqamd64\(rq که برای مجموعه‌دستورالعمل ۶۴ بیتی استفاده می‌شود\&. این تمایز برای تولید فایل شیء مناسب در قالب‌های جابه‌جایی‌پذیر (relocatable) نظیر COFF و ELF الزامی است\&. برای چاپ فهرستی از ماشین‌های موجود برای یک معماری خاص در خروجی استاندارد، از \(lqhelp\(rq به‌عنوان \fImachine\fR و معماری مورد نظر با استفاده از \fB\-a \fR\fB\fIarch\fR\fR استفاده کنید\&. برای جزئیات بیشتر به \fByasm_arch\fR(7) مراجعه کنید\&. .RE .PP \fB\-o \fR\fB\fIfilename\fR\fR یا \fB\-\-objfile=\fR\fB\fIfilename\fR\fR: تعیین نام فایل شیء .RS 4 نام فایل خروجی را مشخص کرده و جایگزین هر نام پیش‌فرضی می‌شود که توسط Yasm ایجاد شده است\&. .RE .PP \fB\-p \fR\fB\fIparser\fR\fR یا \fB\-\-parser=\fR\fB\fIparser\fR\fR: انتخاب تجزیه‌کننده (Parser) .RS 4 تجزیه‌کننده (سینتکس و نحو اسمبلر) را انتخاب می‌کند\&. تجزیه‌کننده پیش‌فرض \(lqnasm\(rq است که نحو NASM (اسمبلر Netwide) را شبیه‌سازی می‌کند\&. تجزیه‌کننده موجود دیگر \(lqgas\(rq است که نحو GNU AS را شبیه‌سازی می‌کند\&. برای چاپ فهرستی از تجزیه‌کننده‌های موجود در خروجی استاندارد، از \(lqhelp\(rq به‌عنوان \fIparser\fR استفاده کنید\&. برای مشاهده فهرستی از تجزیه‌کننده‌های پشتیبانی‌شده به \fByasm_parsers\fR(7) مراجعه کنید\&. .RE .PP \fB\-r \fR\fB\fIpreproc\fR\fR یا \fB\-\-preproc=\fR\fB\fIpreproc\fR\fR: انتخاب پیش‌پردازنده (Preprocessor) .RS 4 پیش‌پردازنده‌ای را که باید قبل از ارسال فایل ورودی به تجزیه‌کننده روی آن اعمال شود انتخاب می‌کند\&. پیش‌پردازنده‌ها اغلب قابلیت‌های ماکرویی ارائه می‌دهند که در تجزیه‌کننده اصلی گنجانده نشده است\&. پیش‌پردازنده پیش‌فرض \(lqnasm\(rq است که یک نسخه واردشده از پیش‌پردازنده اصلی NASM است\&. یک پیش‌پردازنده \(lqraw\(rq نیز در دسترس است که فرآیند پیش‌پردازش را نادیده گرفته و فایل ورودی را مستقیماً به تجزیه‌کننده ارسال می‌کند\&. برای چاپ فهرستی از پیش‌پردازنده‌های موجود در خروجی استاندارد، از \(lqhelp\(rq به‌عنوان \fIpreproc\fR استفاده کنید\&. .RE .PP \fB\-h\fR یا \fB\-\-help\fR: چاپ خلاصه گزینه‌ها .RS 4 خلاصه‌ای از گزینه‌های فراخوانی را چاپ می‌کند\&. تمام گزینه‌های دیگر نادیده گرفته شده و هیچ فایل خروجی تولید نمی‌شود\&. .RE .PP \fB\-\-version\fR: دریافت نسخه Yasm .RS 4 این گزینه باعث می‌شود Yasm شماره نسخه و خلاصه‌ای از مجوز را در خروجی استاندارد چاپ کند\&. تمامی گزینه‌های دیگر نادیده گرفته شده و هیچ فایل خروجی تولید نمی‌شود\&. .RE .SS "گزینه‌های هشدار (Warning Options)" .PP گزینه‌های \fB\-W\fR دارای دو حالت متضاد هستند: \fB\-W\fR\fB\fIname\fR\fR و \fB\-Wno\-\fR\fB\fIname\fR\fR\&. در اینجا فقط حالت‌های غیرپیش‌فرض نشان داده شده‌اند\&. .PP گزینه‌های هشدار به همان ترتیبی که در خط فرمان وارد شده‌اند پردازش می‌شوند، بنابراین اگر پس از \fB\-w\fR گزینه \fB\-Worphan\-labels\fR بیاید، تمام هشدارها خاموش می‌شوند \fIبه‌جز\fR orphan\-labels\&. .PP \fB\-w\fR: غیرفعال کردن تمامی پیام‌های هشدار .RS 4 این گزینه باعث می‌شود Yasm از نمایش تمامی پیام‌های هشدار جلوگیری کند\&. همان‌طور که در بالا اشاره شد، این گزینه می‌تواند با گزینه‌های دیگر برای فعال‌سازی مجدد هشدارهای مشخص دنبال شود\&. .RE .PP \fB\-Werror\fR: در نظر گرفتن هشدارها به عنوان خطا .RS 4 این گزینه باعث می‌شود Yasm تمامی هشدارها را به عنوان خطا در نظر بگیرد\&. در حالت عادی، هشدارها مانع از تولید فایل شیء نمی‌شوند و وضعیت خروج ناموفق از \fByasm\fR تولید نمی‌کنند، در حالی که خطاها چنین می‌کنند\&. این گزینه هشدارها را از نظر این رفتار معادل خطا قرار می‌دهد\&. .RE .PP \fB\-Wno\-unrecognized\-char\fR: عدم هشدار در مورد کاراکترهای ناشناخته ورودی .RS 4 باعث می‌شود Yasm در مورد کاراکترهای ناشناخته موجود در ورودی هشدار ندهد\&. در حالت عادی Yasm برای هر کاراکتر غیر ASCII موجود در فایل ورودی هشدار تولید می‌کند\&. .RE .PP \fB\-Worphan\-labels\fR: هشدار در مورد برچسب‌های فاقد دونقطه پایانی .RS 4 هنگام استفاده از تجزیه‌کننده سازگار با NASM، باعث می‌شود Yasm در مورد برچسب‌هایی که به تنهایی روی یک خط بدون دو‌نقطه (colon) پایانی قرار گرفته‌اند هشدار دهد\&. با وجود اینکه این برچسب‌ها در نحو NASM مجاز هستند، اما ممکن است ناخواسته و ناشی از اشتباه تایپی یا ترتیب تعریف ماکروها باشند\&. .RE .PP \fB\-X \fR\fB\fIstyle\fR\fR: تغییر شیوه گزارش خطا/هشدار .RS 4 یک قالب خروجی خاص را برای پیام‌های خطا و هشدار انتخاب می‌کند\&. پیش‌فرض قالب \(lqgnu\(rq است که خروجی \fBgcc\fR را تقلید می‌کند\&. قالب \(lqvc\(rq نیز موجود است که خروجی کامپایلر Visual C++ مایکروسافت را تقلید می‌کند\&. .sp این گزینه به منظور یکپارچگی طبیعی‌تر Yasm با محیط‌های IDE مانند Visual Studio یا Emacs فراهم شده است، تا IDE بتواند پیام‌های خطا و هشدار را به‌درستی تشخیص دهد و به خط دارای ایراد در سورس‌کد پیوند دهد\&. .RE .SS "گزینه‌های پیش‌پردازنده (Preprocessor Options)" .PP اگرچه این گزینه‌های پیش‌پردازنده از نظر تئوری روی هر پیش‌پردازنده‌ای اثر می‌گذارند، اما در حال حاضر تنها پیش‌پردازنده موجود در Yasm پیش‌پردازنده \(lqnasm\(rq است\&. .PP \fB\-D \fR\fB\fImacro[=value]\fR\fR: تعریف اولیه یک ماکرو .RS 4 یک ماکروی تک‌خطی را از پیش تعریف می‌کند\&. مقدار اختیاری است (اگر مقداری داده نشود، ماکرو همچنان تعریف می‌شود، اما با یک مقدار خالی)\&. .RE .PP \fB\-e\fR یا \fB\-\-preproc\-only\fR: فقط پیش‌پردازش .RS 4 فرآیند اسمبل را پس از مرحله پیش‌پردازش متوقف می‌کند؛ خروجی پیش‌پردازش‌شده به نام خروجی مشخص‌شده ارسال می‌شود یا در صورت عدم تعیین نام خروجی، به خروجی استاندارد هدایت می‌گردد\&. هیچ فایل شیئی تولید نمی‌شود\&. .RE .PP \fB\-I \fR\fB\fIpath\fR\fR: افزودن مسیر فایل‌های Include .RS 4 دایرکتوری \fIpath\fR را به مسیر جستجوی فایل‌های include اضافه می‌کند\&. مسیر جستجو به‌طور پیش‌فرض تنها شامل دایرکتوری است که فایل مبدأ در آن قرار دارد\&. .RE .PP \fB\-P \fR\fB\fIfilename\fR\fR: گنجاندن اولیه یک فایل (Pre-include) .RS 4 فایل \fIfilename\fR را از ابتدا ضمیمه می‌کند، به‌گونه‌ای که گویی \fIfilename\fR در ابتدای ورودی اضافه شده است\&. این گزینه برای افزودن ماکروهای چندخطی که \fB\-D\fR نمی‌تواند پشتیبانی کند مفید است\&. .RE .PP \fB\-U \fR\fB\fImacro\fR\fR: لغو تعریف یک ماکرو .RS 4 تعریف یک ماکروی تک‌خطی را لغو می‌کند (می‌تواند یک ماکروی داخلی باشد یا ماکرویی که پیش‌تر در خط فرمان با \fB\-D\fR تعریف شده است)\&. .RE .SH "مثال‌ها (EXAMPLES)" .PP برای اسمبل سورس‌کد ۳۲ بیتی x86 با نحو NASM از source\&.asm به فایل ELF source\&.o، با هشدار در مورد برچسب‌های بدون دونقطه (orphan labels): .sp .if n \{\ .RS 4 .\} .nf yasm \-f elf32 \-Worphan\-labels source\&.asm .fi .if n \{\ .RE .\} .PP برای اسمبل سورس‌کد AMD64 با نحو NASM از x\&.asm به فایل Win64 object\&.obj: .sp .if n \{\ .RS 4 .\} .nf yasm \-f win64 \-o object\&.obj x\&.asm .fi .if n \{\ .RE .\} .PP برای اسمبل سورس‌کد x86 با نحو NASM که قبلاً پیش‌پردازش شده است از y\&.asm به فایل باینری تخت (flat binary) y\&.com: .sp .if n \{\ .RS 4 .\} .nf yasm \-f bin \-r raw \-o y\&.com y\&.asm .fi .if n \{\ .RE .\} .SH "عیب‌یابی (DIAGNOSTICS)" .PP دستور \fByasm\fR در صورت موفقیت با وضعیت 0 خارج می‌شود و در صورت بروز خطا مقداری غیر صفر بازمی‌گرداند\&. .SH "سازگاری (COMPATIBILITY)" .PP اگرچه تجزیه‌کننده و پیش‌پردازنده NASM در Yasm تلاش می‌کنند تا حد امکان با NASM سازگار باشند، اما به دلیل ساختار داخلی متفاوت Yasm، ناسازگاری‌های اندکی وجود دارد\&. .PP تجزیه‌کننده و پیش‌پردازنده GAS در Yasm فاقد تعدادی از ویژگی‌های موجود در GNU AS هستند\&. .SH "محدودیت‌ها (RESTRICTIONS)" .PP از آنجا که فایل‌های شیء اغلب به معماری و نوع ماشین وابسته هستند، تمام ترکیب‌های قالب‌های شیء، معماری‌ها و ماشین‌ها مجاز نیستند؛ تلاش برای استفاده از یک ترکیب نامعتبر منجر به خطا خواهد شد\&. .PP هیچ پشتیبانی از نگاشت نمادها (symbol maps) وجود ندارد\&. .SH "همچنین ببینید (SEE ALSO)" .PP \fByasm_arch\fR(7), \fByasm_dbgfmts\fR(7), \fByasm_objfmts\fR(7), \fByasm_parsers\fR(7) .PP ابزارهای مرتبط: \fBas\fR(1), \fBld\fR(1), \fBnasm\fR(1) .SH "اشکالات (BUGS)" .PP هنگام استفاده از معماری \(lqx86\(rq، تولید کد AMD64 (با استفاده از دستورالعمل \fBBITS 64\fR) و هم‌زمان تولید یک فایل شیء ۳۲ بیتی (به دلیل عدم تعیین \fB\-m amd64\fR یا عدم انتخاب یک قالب شیء ۶۴ بیتی مانند ELF64 در خط فرمان) بسیار آسان رخ می‌دهد\&. .SH "نویسنده (AUTHOR)" .PP \fBPeter Johnson\fR <\&peter@tortall\&.net\&> .RS 4 نویسنده اصلی. .RE .SH "حق نشر (COPYRIGHT)" .br Copyright \(co 2004, 2005, 2006, 2007 Peter Johnson .br