'\" t .\" Title: nasm .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 06/28/2026 .\" Manual: The Netwide Assembler Project .\" Source: NASM .\" Language: English .\" .TH "NASM" "1" "06/28/2026" "NASM" "The Netwide Assembler Project" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" nasm \- اسمبلر Netwide، یک اسمبلر قابل‌حمل 80x86 .SH "خلاصه دستور (SYNOPSIS)" .sp \fBnasm\fR [\fB\-@\fR response file] [\fB\-f\fR format] [\fB\-o\fR outfile] [\fB\-l\fR listfile] [\fIoptions\fR\&...] filename .SH "توضیحات (DESCRIPTION)" .sp دستور \fBnasm\fR فایل \fIfilename\fR را اسمبل کرده و در صورت مشخص شدن، خروجی را به فایل \fIoutfile\fR هدایت می‌کند. اگر \fIoutfile\fR مشخص نشده باشد، \fBnasm\fR نام فایل خروجی پیش‌فرض را از نام فایل ورودی خود به دست می‌آورد، معمولاً با افزودن «\&.o» یا «\&.obj»، یا با حذف تمامی پسوندها برای فایل باینری خام. در غیر این صورت، نام فایل خروجی «nasm\&.out» خواهد بود. .SH "گزینه‌ها (OPTIONS)" .PP \fB\-@\fR \fIfilename\fR .RS 4 باعث می‌شود \fBnasm\fR گزینه‌ها را از filename به‌گونه‌ای پردازش کند که گویی مستقیماً در خط فرمان وارد شده‌اند. .RE .PP \fB\-a\fR .RS 4 باعث می‌شود \fBnasm\fR فایل ورودی داده‌شده را بدون اعمال اولیه پیش‌پردازنده ماکرو اسمبل کند. .RE .PP \fB\-D\fR|\fB\-d\fR \fImacro[=value]\fR .RS 4 یک ماکروی تک‌خطی را از پیش تعریف می‌کند. .RE .PP \fB\-E\fR|\fB\-e\fR .RS 4 باعث می‌شود \fBnasm\fR فایل ورودی داده‌شده را پیش‌پردازش کرده و خروجی را در \fIstdout\fR (یا نام فایل خروجی مشخص‌شده) بنویسد، و عملاً فرایند اسنبل را انجام ندهد. .RE .PP \fB\-f\fR \fIformat\fR .RS 4 قالب فایل خروجی را مشخص می‌کند. برای مشاهده فهرستی از قالب‌های خروجی معتبر، از گزینه \fB\-hf\fR استفاده کنید. .RE .PP \fB\-F\fR \fIformat\fR .RS 4 قالب اطلاعات اشکال‌زدایی (دیباگ) را تعیین می‌کند. برای مشاهده فهرستی از قالب‌های معتبر، از گزینه \fB\-y\fR استفاده کنید (به عنوان مثال \fB\-felf \-y\fR). .RE .PP \fB\-g\fR .RS 4 باعث می‌شود \fBnasm\fR اطلاعات اشکال‌زدایی تولید کند. .RE .PP \fB\-g\fR\fIformat\fR .RS 4 معادل گزینه \fB\-g \-F\fR\fI format\fR است. .RE .PP \fB\-h\fR .RS 4 باعث می‌شود \fBnasm\fR پس از نمایش خلاصه‌ای از گزینه‌های فراخوانی، بلافاصله خارج شود. .RE .PP \fB\-hf\fR .RS 4 مشابه \fB\-h\fR است، اما تمامی قالب‌های خروجی معتبر را نیز فهرست می‌کند. .RE .PP \fB\-I\fR|\fB\-i\fR \fIdirectory\fR .RS 4 یک پوشه را به مسیر جستجوی فایل‌های گنجانده‌شده (include) اضافه می‌کند. مشخصات پوشه باید شامل اسلش پایانی باشد، زیرا مستقیماً به ابتدای نام فایل گنجانده‌شده الصاق می‌شود. .RE .PP \fB\-l\fR \fIlistfile\fR .RS 4 باعث هدایت فهرست اسمبل به فایل مشخص‌شده می‌شود، که در آن سورس اصلی در سمت راست (به علاوه سورس فایل‌های گنجانده‌شده و بسط ماکروهای چندخطی) و کد تولیدشده به صورت هگزادسیمال در سمت چپ نمایش می‌یابد. .RE .PP \fB\-M\fR .RS 4 باعث می‌شود \fBnasm\fR وابستگی‌ها را به سبک Makefile در خروجی استاندارد بنویسد؛ خروجی معمولی غیرفعال می‌شود. .RE .PP \fB\-MG\fR \fIfile\fR .RS 4 مشابه \fB\-M\fR است، اما فرض می‌کند که وابستگی‌های ناموجود در Makefile تولید شده و بدون پیشوند به فهرست وابستگی‌ها اضافه می‌شوند. .RE .PP \fB\-MF\fR \fIfile\fR .RS 4 وابستگی‌ها را به سبک Makefile در فایل مشخص‌شده خروجی می‌دهد. .RE .PP \fB\-MD\fR \fIfile\fR .RS 4 مشابه ترکیبی از گزینه‌های \fB\-M\fR و \fB\-MF\fR عمل می‌کند. .RE .PP \fB\-MT\fR \fIfile\fR .RS 4 نام پیش‌فرض هدف وابستگی را بازنویسی می‌کند. این نام معمولاً همان نام فایل خروجی مشخص‌شده توسط گزینه \fB\-o\fR است. .RE .PP \fB\-MQ\fR \fIfile\fR .RS 4 مشابه \fB\-MT\fR است، با این تفاوت که تلاش می‌کند نویسه‌های دارای معنای خاص در نحو Makefile را در گیومه قرار دهد. این کار بی‌نقص نیست، زیرا همه نویسه‌های دارای معنای خاص در Make قابل قرارگیری در گیومه نیستند. .RE .PP \fB\-MP\fR .RS 4 یک هدف ساختگی (phony target) منتشر می‌کند. .RE .PP \fB\-O\fR \fInumber\fR .RS 4 بهینه‌سازی آفست‌های انشعاب (branch offsets). .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-O0\fR: بدون بهینه‌سازی .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-O1\fR: حداقل بهینه‌سازی .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-Ox\fR: بهینه‌سازی چندگذره (پیش‌فرض) .RE .RE .PP \fB\-o\fR \fIoutfile\fR .RS 4 نام دقیقی برای فایل خروجی مشخص می‌کند، و روش پیش‌فرض تعیین نام توسط \fBnasm\fR را بازنویسی می‌نماید. .RE .PP \fB\-P\fR|\fB\-p\fR \fIfile\fR .RS 4 فایلی را برای گنجاندن اولیه، پیش از شروع پردازش فایل منبع اصلی، مشخص می‌کند. .RE .PP \fB\-s\fR .RS 4 باعث می‌شود \fBnasm\fR پیام‌های خطای خود و/یا متن راهنما را به جای stderr به stdout بفرستد. .RE .PP \fB\-t\fR .RS 4 باعث می‌شود \fBnasm\fR در حالت سازگار با SciTech TASM اسمبل کند. .RE .PP \fB\-U\fR|\fB\-u\fR \fImacro\fR .RS 4 تعریف یک ماکروی تک‌خطی را حذف و لغو می‌کند. .RE .PP \fB\-v\fR .RS 4 باعث می‌شود \fBnasm\fR پس از نمایش شماره نسخه خود، بلافاصله خارج شود. .RE .PP *\-W[no\-]foo\*(Aq .RS 4 باعث می‌شود \fBnasm\fR دسته‌های خاصی از پیام‌های هشدار را به سبک gcc فعال یا غیرفعال کند، برای مثال \fB\-Wlabel\-orphan\fR یا \fB\-Wno\-orphan\-labels\fR. .RE .PP \fB\-w\fR\fI[+\-]foo\fR .RS 4 باعث می‌شود \fBnasm\fR دسته‌های خاصی از پیام‌های هشدار را فعال یا غیرفعال کند، برای مثال \fB\-w+label\-orphan\fR یا \fB\-w\-macro\-params\fR. .RE .PP \fB\-X\fR \fIformat\fR .RS 4 قالب گزارش خطا را مشخص می‌کند (gnu یا vc). .RE .PP \fB\-y\fR .RS 4 باعث می‌شود \fBnasm\fR قالب‌های اشکال‌زدایی پشتیبانی‌شده را فهرست کند. .RE .PP \fB\-Z\fR \fIfilename\fR .RS 4 باعث می‌شود \fBnasm\fR پیام‌های خطا را به \fIfilename\fR تغییر مسیر دهد. این گزینه برای پشتیبانی از سیستم‌عامل‌هایی است که تغییر مسیر stderr در آن‌ها به آسانی انجام نمی‌گیرد. .RE .PP \-\-prefix, \-\-postfix .RS 4 آرگومان داده‌شده را (به ترتیب) به ابتدای تمامی متغیرهای سراسری (global) یا خارجی (extern) اضافه می‌کند یا به انتهای آن‌ها می‌افزاید. .RE .SH "سینتکس (SYNTAX)" .sp این صفحه راهنما نحو زبان اسمبلی \fBnasm\fR را به‌طور کامل تشریح نمی‌کند، اما خلاصه‌ای از تفاوت‌های آن با سایر اسمبلرها را ارائه می‌دهد\&. .sp برخلاف \fBgas\fR، \fIثبات‌ها\fR (رجیسترها) علامت «%» در ابتدا ندارند و به ثبات‌های پشته ممیز شناور با عنوان‌های \fIst0\fR، \fIst1\fR و غیره اشاره می‌شود\&. .sp \fIدستورالعمل‌های ممیز شناور\fR می‌توانند از قالب تک‌عملوندی یا دو‌عملوندی استفاده کنند\&. کلمه کلیدی \fITO\fR ارائه شده است؛ بنابراین، می‌توان به این صورت نوشت: .sp .if n \{\ .RS 4 .\} .nf fadd st0,st1 fadd st1,st0 .fi .if n \{\ .RE .\} .sp یا می‌توان از قالب‌های تک‌عملوندی جایگزین استفاده کرد: .sp .if n \{\ .RS 4 .\} .nf fadd st1 fadd to st1 .fi .if n \{\ .RE .\} .sp \fIحافظه مقداردهی‌نشده\fR با استفاده از شبه‌دستورهای \fIRESB\fR، \fIRESW\fR، \fIRESD\fR، \fIRESQ\fR، \fIREST\fR و \fIRESO\fR رزرو می‌شود که هرکدام یک پارامتر برای تعیین تعداد بایت‌ها، کلمه‌ها (words)، دابل‌وردها، کوادوردها یا کلمات ده‌بایتی جهت رزرو دریافت می‌کنند\&. .sp \fIتکرار\fR اقلام داده مانند اسمبلرهای DOS با کلمه کلیدی \fIDUP\fR انجام نمی‌شود، بلکه با استفاده از پیشوند \fITIMES\fR به این صورت صورت می‌گیرد: .sp .if n \{\ .RS 4 .\} .nf message: times 3 db \*(Aqabc\*(Aq times 64\-$+message db 0 .fi .if n \{\ .RE .\} .sp که رشته abcabcabc را تعریف می‌کند و در ادامه آن تعداد مناسبی بایت صفر قرار می‌دهد تا طول کل به ۶۴ بایت برسد\&. .sp \fIارجاع به نمادها\fR همواره به عنوان مقادیر بی‌واسطه (یعنی آدرس نماد) تلقی می‌شود، مگر اینکه از قلاب‌ها (کروشه‌ها) استفاده شود که در آن صورت محتوای آن مکان حافظه استفاده خواهد شد\&. بنابراین: .sp .if n \{\ .RS 4 .\} .nf mov ax,wordvar .fi .if n \{\ .RE .\} .sp آدرس متغیر wordvar را در AX بارگذاری می‌کند، در حالی که: .sp .if n \{\ .RS 4 .\} .nf mov ax,[wordvar] mov ax,[wordvar+1] mov ax,[es:wordvar+bx] .fi .if n \{\ .RE .\} .sp همگی به \fIمحتوای\fR مکان‌های حافظه اشاره دارند\&. نحوهای زیر: .sp .if n \{\ .RS 4 .\} .nf mov ax,es:wordvar[bx] es mov ax,wordvar[1] .fi .if n \{\ .RE .\} .sp به هیچ وجه مجاز نیستند، هرچند استفاده از نام ثبات سگمنت به عنوان پیشوند دستور معتبر است و می‌توان از آن با دستوراتی مانند \fILODSB\fR که به هیچ روش دیگری نمی‌توان آن‌ها را بازنویسی کرد استفاده نمود\&. .sp \fIثابت‌ها\fR را می‌توان از نظر عددی در اکثر قالب‌ها بیان کرد: پسوند H، Q یا B به ترتیب نشان‌دهنده هگزادسیمال، هشت‌هشتی (octal) یا دودویی (باینری) است، و پیشوند «0x» یا «$» نیز نشان‌دهنده هگزادسیمال است\&. با صفرهای ابتدایی به هیچ وجه به شکل خاصی رفتار نمی‌شود\&. ثابت‌های نویسه‌ای می‌توانند در گیومه تکی یا دوتایی محصور شوند؛ هیچ نویسه گریزی (escape) وجود ندارد\&. ترتیب بایت‌ها به صورت کم‌ارزش‌ترین‌بایت‌اول (little-endian) است، به طوری که ثابت نویسه‌ای \fI\*(Aqabcd\fR\*(Aq نشان‌دهنده مقدار 0x64636261 است نه 0x61626364\&. .sp برچسب‌های محلی با یک نقطه آغاز می‌شوند و «محلی بودن» آن‌ها توسط اسمبلر با افزودن نام نماد غیرمحلی قبلی به ابتدای آن‌ها اعمال می‌شود\&. بنابراین اعلان یک برچسب «\&.loop» پس از برچسب «label» در واقع نمادی به نام «label\&.loop» تعریف کرده است\&. .SH "رهنمودها (DIRECTIVES)" .sp دستور \fISECTION\fR \fIname\fR یا \fISEGMENT\fR \fIname\fR باعث می‌شود \fBnasm\fR تمام کدهای بعدی را به بخش (section) نام‌برده هدایت کند\&. نام بخش‌ها با توجه به قالب فایل خروجی متفاوت است، هرچند بیشتر قالب‌ها از نام‌های \fI\&.text\fR، \fI\&.data\fR و \fI\&.bss\fR پشتیبانی می‌کنند\&. (استثنا قالب \fIobj\fR است که در آن تمام سگمنت‌ها توسط کاربر قابل تعریف هستند\&.) .sp دستور \fIABSOLUTE\fR \fIaddress\fR باعث می‌شود \fBnasm\fR نقطه اسمبل فرضی خود را در یک آدرس مطلق قرار دهد: بنابراین هیچ کد یا داده‌ای تولید نمی‌شود، اما می‌توانید از \fIRESB\fR، \fIRESW\fR و \fIRESD\fR برای جلو بردن نقطه اسمبل استفاده کنید، و می‌توانید برچسب‌ها را تعریف نمایید\&. بنابراین از این رهنمود می‌توان برای تعریف ساختارهای داده استفاده کرد\&. هنگامی که اسمبل مطلق را به پایان رساندید، برای بازگشت به اسمبل عادی باید یک رهنمود \fISECTION\fR دیگر صادر کنید\&. .sp دستور \fIBITS\fR \fI16\fR، \fIBITS\fR \fI32\fR یا \fIBITS\fR \fI64\fR حالت پیش‌فرض پردازنده را که \fBnasm\fR برای آن کد تولید می‌کند تغییر می‌دهد: این معادل با \fIUSE16\fR یا \fIUSE32\fR در اسمبلرهای DOS است\&. .sp دستورهای \fIEXTERN\fR \fIsymbol\fR و \fIGLOBAL\fR \fIsymbol\fR به ترتیب تعاریف نمادها را از سایر ماژول‌ها وارد (import) یا به آن‌ها صادر (export) می‌کنند\&. توجه داشته باشید که رهنمود \fIGLOBAL\fR باید قبل از تعریف نمادی که به آن ارجاع دارد ظاهر شود\&. .sp دستورهای \fISTRUC\fR \fIstrucname\fR و \fIENDSTRUC\fR هنگامی که برای احاطه کردن تعدادی از دستورات \fIRESB\fR، \fIRESW\fR یا مشابه آن‌ها استفاده شوند، یک ساختار داده را تعریف می‌کنند\&. این سازه علاوه بر تعریف آفست‌های اعضای ساختار، نمادی نیز برای اندازه ساختار تعریف می‌کند که به سادگی همان نام ساختار است که کلمه \fIsize\fR به انتهای آن الصاق شده است\&. .SH "رهنمودهای وابسته به قالب (FORMAT\-SPECIFIC DIRECTIVES)" .sp دستور \fIORG\fR \fIaddress\fR توسط قالب خروجی باینری خام \fIbin\fR استفاده می‌شود و آدرسی را که کد خروجی در نهایت در آن بارگذاری خواهد شد مشخص می‌کند\&. .sp دستور \fIGROUP\fR \fIgrpname\fR \fIseg1\fR \fIseg2\fR\&... توسط قالب خروجی obj (مایکروسافت ۱۶ بیتی) استفاده می‌شود و گروه‌های سگمنت را تعریف می‌کند\&. این قالب همچنین از \fIUPPERCASE\fR استفاده می‌کند که دستور می‌دهد تمام نام‌های سگمنت، گروه و نمادهای خروجی به فایل شیء باید با حروف بزرگ باشند\&. توجه داشته باشید که عمل اسمبل واقعی همچنان به بزرگی و کوچکی حروف حساس است\&. .sp دستور \fILIBRARY\fR \fIlibname\fR توسط قالب خروجی \fIrdf\fR استفاده می‌شود و باعث می‌شود یک رکورد وابستگی در فایل خروجی نوشته شود که نشان می‌دهد برنامه برای اجرا به یک کتابخانه خاص نیاز دارد\&. .SH "پیش‌پردازنده ماکرو (MACRO PREPROCESSOR)" .sp ماکروهای تک‌خطی با استفاده از دستورات \fI%define\fR یا \fI%idefine\fR به شیوه‌ای مشابه پیش‌پردازنده C تعریف می‌شوند\&. آن‌ها را می‌توان با توجه به تعداد پارامترها سربارگذاری (overload) کرد، هرچند تعریف یک ماکرو بدون پارامتر مانع از تعریف هر ماکروی هم‌نام دیگری با پارامتر می‌شود، و بالعکس\&. دستور \fI%define\fR ماکروهایی را تعریف می‌کند که تطبیق نام آن‌ها حساس به حروف کوچک و بزرگ است، در حالی که \fI%idefine\fR ماکروهای غیرحساس به بزرگی و کوچکی حروف را تعریف می‌نماید\&. .sp ماکروهای چندخطی با استفاده از \fI%macro\fR و \fI%imacro\fR تعریف می‌شوند (تفاوت آن‌ها دقیقاً مانند تفاوت بین \fI%define\fR و \fI%idefine\fR است) که نحوه نگارش آن‌ها به صورت زیر است: .sp .if n \{\ .RS 4 .\} .nf %macro name minprm[\-maxprm][+][\&.nolist] [defaults] %endmacro .fi .if n \{\ .RE .\} .sp مجدداً، این ماکروها را نیز می‌توان سربارگذاری کرد\&. علامت مثبت انتهایی نشان می‌دهد که هر پارامتری پس از آخرین مورد، همراه با کاماهای جداکننده در آخرین پارامتر ادغام می‌شود\&. بخش \fIdefaults\fR می‌تواند برای تعیین مقادیر پیش‌فرض برای پارامترهای مشخص‌نشده ماکرو بعد از \fIminparam\fR استفاده شود\&. دستور \fI%endm\fR مترادفی معتبر برای \fI%endmacro\fR است\&. .sp برای ارجاع به پارامترهای ماکرو درون بسط ماکرو، از \fI%1\fR، \fI%2\fR و غیره استفاده می‌کنید\&. شما همچنین می‌توانید با استفاده از \fI%+1\fR اجبار کنید که یک پارامتر ماکرو باید حاوی یک کد شرطی باشد، و می‌توانید کد شرط را با استفاده از \fI%\-1\fR معکوس کنید\&. همچنین می‌توانید با قرار دادن دو علامت «%» در ابتدا، برچسبی اختصاصی برای یک فراخوانی ماکرو تعریف نمایید\&. .sp فایل‌ها را می‌توان با استفاده از رهنمود \fI%include\fR اضافه کرد که عملکردی مشابه C دارد\&. .sp پیش‌پردازنده دارای یک «پشته بافت» (context stack) است که می‌تواند توسط یک ماکرو برای ذخیره اطلاعاتی که ماکروهای بعدی بازیابی خواهند کرد استفاده شود\&. می‌توانید با استفاده از \fI%push\fR یک بافت را روی پشته قرار دهید، با \fI%pop\fR آن را بردارید، و با استفاده از \fI%repl\fR نام بافت بالایی را (بدون دستکاری تعاریف مرتبط) تغییر دهید\&. برچسب‌ها و ماکروهای \fI%define\fR مخصوص بالاترین بافت را می‌توان با افزودن %$ به ابتدای نام آن‌ها تعریف کرد، و موارد مربوط به بافت بعدی را با %$$، و به همین ترتیب\&. .sp اسمبل شرطی به وسیله \fI%ifdef\fR، \fI%ifndef\fR، \fI%else\fR و \fI%endif\fR مشابه C انجام می‌شود\&. (با این تفاوت که \fI%ifdef\fR می‌تواند چندین نام ماکروی مفروض را بپذیرد، و در صورت تعریف هر یک از آن‌ها مقدار TRUE را ارزیابی کند\&.) علاوه بر این، می‌توان از رهنمودهای \fI%ifctx\fR و \fI%ifnctx\fR برای شرط‌گذاری بر اساس نام بالاترین بافت موجود در پشته بافت استفاده کرد\&. مجموعه مشخصی از رهنمودهای «else\-if» شامل \fI%elifdef\fR، \fI%elifndef\fR، \fI%elifctx\fR و \fI%elifnctx\fR نیز پشتیبانی می‌شوند\&. .SH "اشکالات (BUGS)" .sp لطفاً گزارش اشکالات را از طریق بخش ردیاب باگ در \m[blue]\fBhttp://nasm\&.us\fR\m[] ارسال کنید\&. .SH "همچنین ببینید (SEE ALSO)" .sp \fBas\fR(1), \fBld\fR(1)\&.