الگو:حذف سریع اهمیت و سرشناسی

در علم کامپیوتر ، یک **NOP** ، **no-op** یا **NOOP** (بدون **هیچگونه عملی** )، دستور زبان اسمبلی (مونتاز) ، دستور زبان برنامه نویسی یا فرمان پروتکل کامپیوتری است که هیچ کاری انجام نمی‌دهد.

مجموعه جهت های ماشین
--------------------

برخی از دستورالعمل های کامپیوتری عبارتند از دستورالعملی که هدف روشن آن تغییر وضعیت هر یک از پرچم‌ها، حافظه و یا ثبت کننده هایی که برنامه نویس به آنها دسترسی دارد،نیست. برای اجرا معمولاً تعداد مشخصی از چرخه های ساعت را استفاده می‌کند. در سایر مجموعه‌ی دستورالعمل ها، یک NOP می تواند با اجرای یک دستور با عملگرهایی که همان تاثیر را دارند، شبیه سازی شود؛ *به عنوان مثال* ، در پردازنده SPARC ، دستور `sethi 0, %g0` راه حل توصیه شده است. 

NOP اغلب برای اهداف زمان بندی استفاده می شود، برای تنظیم حافظه ، جلوگیری از وقوع تغییرات ناخواسته ، ;کنترل اجراهایی که اجرای آنها تاثیری رو دستور در حال اجرا ندارد، برای خنثی کردن یک دستورالعمل موجود مانند پرش، و یابعدا در توسعه برنامه به عنوان نگهدارنده مکان با دستورالعمل های فعال جایگزین شود. (یا زمانی که سازماندهی دوباره مشکل یا وقت گیر است جایگزین دستورالعمل حذف شده می شود ). در برخی موارد، NOP می تواند عوارض جانبی جزئی داشته باشد؛ به عنوان مثال، درسری پردازنده موتورولا 68000، کد دستور (NOP (opcode باعث هماهنگ سازی خط لوله می شود. 

دستور NOP برای یک سری از معماری های پردازنده ها در زیر آورده شده است : 

از نقطه نظر طراحی سخت افزار، قسمت های ناحیه ی BUS که مورد استفاده قرار نگرفته اند اغلب طراحی شده اند تا صفر را بازگردانند؛ از آنجا که رفتار اسلایدهای NOP اغلب مطلوب است، به صورت یک طرفه زمان برنامه نویسی با کد های تمام صفر عمل میکند.

کد
--

NOP گاهی به عنوان توضیحی برای عمل انجام شده توسط یک تابع یا یک دنباله از دستورهای زبان برنامه نویسی به کار می رود، اگر تابع یا کد تاثیری نداشته باشد (همچنین ممکن است به نام کد افزوده باشد ). بهینه سازی کامپایلر رایج، تشخیص و حذف این نوع کد است. این کد ممکن است توسط دستور زبان زبان برنامه نویسی مورد نیاز باشد، وقتی که اجازه فضای کد خالی را نمی‌دهد. 

در آدا ، دستور `null` به عنوان یک NOP عمل می کند. همانطور که دستورکار دستورهای کنترلی یا تابع های خالی را اجازه نمی‌دهد، دستورالعمل `null` باید برای مشخص کردن این که هیچ اقدامی لازم نیست استفاده می‌شود. (بنابراین، اگر برنامه نویس فراموش کند که یک ترتیب از دستور ها را بنویسد، برنامه کامپایل نخواهد شد.) 

### C و مشتقات

خط دوم زیر یک نمونه از یک جمله C است که مانند NOP *رفتار می کند*. در عمل، اکثر کامپایلر ها کدی برای این دستور ایجاد نخواهند کرد: 

این دستور یک جمع انجام میدهد و نتیجه را رد می کند. در واقع، هر دستور بدون عوارض جانبی (که بر جریان کنترل تاثیر نمی‌گذارد، مانند قطع کردن، بازگشت) می تواند حذف شود، زیرا نتیجه محاسبات را نادیده می‌گیرد. 

ساده ترین دستور احتمالی در C که مانند NOP عمل می کند، به اصطلاح *دستور null است* ، که فقط یک نقطه ویرگول در زمان نیاز به یک دستور است. (کامپایلر لازم نیست که دستورالعمل NOP را در این مورد تولید کند؛ به طور معمول هیچ دستورالعملی تولید نمی‌شود.) 

```
 ؛ 
```

به طور متداول، یک بلوک خالی (دستورالعمل مرکب) ممکن است استفاده شود و ممکن است قابل خواندن باشد: 

```
 {} 
```

در برخی موارد، مانند بدنه یک تابع، یک بلوک باید استفاده شود، اما این می تواند خالی باشد. در C، دستورالعمل ها نمی‌توانند خالی باشد - دستورهای ساده باید با یک ؛ (نقطه ویرگول) تمام شوند، در حالیکه عبارات مرکب در {} (آکولاد) قرار میگیرند، که نیازی به یک نقطه ویرگول برای خود آگولاد نیست. بنابراین در مواردی که به دستوری نیاز است، Null میتواند مورد استفاده قرار بگیرد. 

دستور NULL به خودی خود بی فایده است، اما می توان آن را به نحو گسترده تری از جمله در یک حلقه استفاده کرد: 

از سوی دیگر، 

یا بیشتر: 

(توجه داشته باشید که آخرین فرم ممکن است گیج کننده باشد و به همین ترتیب یک هشدار را با برخی از کامپایلرها یا گزینه های کامپایلر ایجاد می کند؛ زیرا نقطه ویرگول معمولاً هنگامی که پس از یک پرانتز پرانتز در انتهای خط قرار می گیرد، انتهای دستور فراخوانی تابع را نشان می دهد). 

کد بالا به فراخوانی تابع *getchar ()* تا زمانی که یک کاراکتر \ n (خط جدید) را بازگرداند ادامه میدهد، اساساً موقعیت خواندن فعلی ورودی را به ابتدای خط بعدی انتقال می دهد. 

### فورتن

در Fortran، دستور `CONTINUE` در بعضی موارد مانند آخرین دستور در یک حلقه DO مورد استفاده قرار می گیرد، اگر چه می توان آن را در هر جایی استفاده کرد و هیچ کارایی نداشته باشد. 

### پاسکال

همانطور که با C ؛ به تنهایی میتواند به عنوان دستور null استفاده شود. در حقیقت، به دلیل مشخصه زبان، در بلوک BEGIN / END، نقطه ویرگول قبل از عبارت END اختیاری است. 

همچنین یک بلوک متشکل از `BEGIN END;` ممکن است به عنوان یک حفره یا سوراخ برای نشان دادن هیچ اقدام، حتی اگر قرار داده شده در یکی دیگر از بلوک BEGIN / END استفاده شود. 

### پایتون

زبان برنامه نویسی Python دارای یک پایتون دستور `pass` است که وقتی اجرا می شود تاثیری ندارد و بنابراین به عنوان یک NOP عمل می کند. به علت دستورکار محرمانه حساس پایتون این عمدتاً برای اطمینان از درست بود دستورکار استفاده می شود ؛ برای مثال دستورکار برای تعریف یک کلاس نیاز به یک بلوک فاصله دار با منطق کلاس، که به عنوان `pass` هنگامی که آن باید خالی باشد بیان می شود 

### jQuery

کتابخانه jQuery تابع `jQuery.noop()` فراهم می کند که هیچ کاری انجام نمی‌دهد. 

### زاویه ای(Angular)

چارچوب زاویه(Angular) تابع angular.noop که هیچ کاری انجام نمی‌دهد را فراهم می کند. 

### اسکریپت شل (,bash، zsh)

علامت `:` (دونقطه) یک ساختار پوسته است که دارای اثر مشابهی با "NOP" (هیچ کاری انجام نمی‌دهد) است. این به لحاظ فنی NOP نیست، زیرا پارامتر خاص ؟$ را به 0 تغییر می دهد (وضعیت خروج از آخرین دستور). این ممکن است مترادف پوسته 'true' پیش فرض در نظر گرفته شود، و وضعیت خروج آن (true (0 است.   

### Lodash

کتابخانه Lodash یک تابع `_.noop()` که undefined را باز می گرداند و هیچ کاری نمی‌کند.

دستورها پروتکل NOP
------------------

بسیاری از پروتکل های کامپیوتری مانند telnet شامل یک فرمان NOP می شوند که یک کاربر می تواند برای دریافت یک پاسخ از سرور بدون درخواست های دیگر صادر کند. چنین دستورالعمل می تواند برای اطمینان از اینکه اتصال هنوز زنده باشد یا اینکه سرور پاسخگو باشد استفاده شود. دستور NOOP بخشی از پروتکل های زیر است ( *این یک لیست جزئی است* ): 

* telnet
* FTP
* SMTP
* X11
* POP3
* NNTP
* finger
* IMAP4
* بیت تورنت
* Character encoding: the null control character

توجه داشته باشید که بر خلاف پروتکل های دیگر ذکر شده، دستور IMAP4 NOOP یک هدف خاص دارد - این اجازه می دهد که سرور هر گونه اطلاعیه های معلق را به مشتری ارسال کند. 

در حالی که اکثر سرویس دهنده های Telnet یا FTP به یک دستور NOOP با "OK" یا "+ OK" پاسخ می دهند، برخی از برنامه نویسان پاسخ های فریبنده ای را به کاربر اضافه کرده اند. به عنوان مثال، `ftpd` شبح MINIX در پاسخ به NOOP با این پیام پاسخ میدهد:

Cracking
--------

NOP ها اغلب هنگامی که نرم‌افزار cracking شماره های سریال، سخت افزار یا نرم‌افزار خاص مورد نیاز، حضور و یا عدم دانگل های سخت افزاری و غیره را بررسی می کنند استفاده می شود. این کار با تغییر توابع و زیرشاخه ها برای از بین بردن کنترل های امنیتی انجام می شود و به جای آن فقط مقدار مورد انتظار که برای آن بررسی شده را بر میگرداند. از آنجایی که اکثر دستورالعمل ها در روال کنترل امنیتی استفاده نشده اند، با استفاده از NOP ها جایگزین می شوند، بنابراین عملکرد امنیتی نرم‌افزار را بدون هیچ گونه توجهی حذف می کنند.

رفتار امنیتی
------------

کد NOP را می توان برای ایجاد اسلایدهای NOP استفاده کرد ، که اجازه می دهد تا کد زمانی اجرا شود که مقدار دقیق اشاره گر دستورالعمل نامعلوم باشد (مثلاً زمانی که یک سرریز بافر یک آدرس بازگشتی تابع را در ستون(stack) را بازنویسی کند).

منابع
-----

1. ↑  "Motorola 68000 Programmer's Reference Manual" (PDF). Archived from the original (PDF) on 24 September 2015. Retrieved 27 January 2019.
2. ↑   کتاب مرجع آدا — بیانیه های خالی. "اجرای null\_statement هیچ تاثیری ندارد."
3. ↑   jQuery.noop () از مستندات API جی کوئری
4. ↑   راهنمای پیشرفته Bash-Scribing> فصل 3. شخصیت های ویژه
5. ↑   منشا bash> COMMANDS SHELL BUILTIN COMMANDS
6. ↑   zsh manpage (zshbuiltins)> SHELL BUILTIN COMMANDS
7. ↑  "Lodash Documentation". *lodash.com* (به انگلیسی). Retrieved 2017-12-15.
8. ↑  "ftpd.c". Retrieved 2016-06-19.