NOP (کد)

در علم کامپیوتر ، یک 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) را بازنویسی کند).

منابع 

دستورالعمل‌های اکس۸۶
زبان ماشین
صفحات با ترجمه بازبینی‌نشده