NOP (کد)
در علم کامپیوتر ، یک NOP ، no-op یا NOOP (بدون هیچگونه عملی )، دستور زبان اسمبلی (مونتاز) ، دستور زبان برنامه نویسی یا فرمان پروتکل کامپیوتری است که هیچ کاری انجام نمی‌دهد.
برخی از دستورالعمل های کامپیوتری عبارتند از دستورالعملی که هدف روشن آن تغییر وضعیت هر یک از پرچم‌ها، حافظه و یا ثبت کننده هایی که برنامه نویس به آنها دسترسی دارد،نیست. برای اجرا معمولاً تعداد مشخصی از چرخه های ساعت را استفاده می‌کند. در سایر مجموعه‌ی دستورالعمل ها، یک NOP می تواند با اجرای یک دستور با عملگرهایی که همان تاثیر را دارند، شبیه سازی شود؛ "به عنوان مثال" ، در پردازنده SPARC ، دستور codice_1 راه حل توصیه شده است.
NOP اغلب برای اهداف زمان بندی استفاده می شود، برای تنظیم حافظه ، جلوگیری از وقوع تغییرات ناخواسته ، ;کنترل اجراهایی که اجرای آنها تاثیری رو دستور در حال اجرا ندارد، برای خنثی کردن یک دستورالعمل موجود مانند پرش، و یابعدا در توسعه برنامه به عنوان نگهدارنده مکان با دستورالعمل های فعال جایگزین شود. (یا زمانی که سازماندهی دوباره مشکل یا وقت گیر است جایگزین دستورالعمل حذف شده می شود ). در برخی موارد، NOP می تواند عوارض جانبی جزئی داشته باشد؛ به عنوان مثال، درسری پردازنده موتورولا 68000، کد دستور (NOP (opcode باعث هماهنگ سازی خط لوله می شود.
دستور NOP برای یک سری از معماری های پردازنده ها در زیر آورده شده است :
از نقطه نظر طراحی سخت افزار، قسمت های ناحیه ی BUS که مورد استفاده قرار نگرفته اند اغلب طراحی شده اند تا صفر را بازگردانند؛ از آنجا که رفتار اسلایدهای NOP اغلب مطلوب است، به صورت یک طرفه زمان برنامه نویسی با کد های تمام صفر عمل میکند.
NOP گاهی به عنوان توضیحی برای عمل انجام شده توسط یک تابع یا یک دنباله از دستورهای زبان برنامه نویسی به کار می رود، اگر تابع یا کد تاثیری نداشته باشد (همچنین ممکن است به نام کد افزوده باشد ). بهینه سازی کامپایلر رایج، تشخیص و حذف این نوع کد است. این کد ممکن است توسط دستور زبان زبان برنامه نویسی مورد نیاز باشد، وقتی که اجازه فضای کد خالی را نمی‌دهد.
در آدا ، دستور codice_2 به عنوان یک NOP عمل می کند. همانطور که دستورکار دستورهای کنترلی یا تابع های خالی را اجازه نمی‌دهد، دستورالعمل codice_2 باید برای مشخص کردن این که هیچ اقدامی لازم نیست استفاده می‌شود. (بنابراین، اگر برنامه نویس فراموش کند که یک ترتیب از دستور ها را بنویسد، برنامه کامپایل نخواهد شد.)
خط دوم زیر یک نمونه از یک جمله C است که مانند NOP "رفتار می کند". در عمل، اکثر کامپایلر ها کدی برای این دستور ایجاد نخواهند کرد:
این دستور یک جمع انجام میدهد و نتیجه را رد می کند. در واقع، هر دستور بدون عوارض جانبی (که بر جریان کنترل تاثیر نمی‌گذارد، مانند قطع کردن، بازگشت) می تواند حذف شود، زیرا نتیجه محاسبات را نادیده می‌گیرد.
ساده ترین دستور احتمالی در C که مانند NOP عمل می کند، به اصطلاح "دستور null است" ، که فقط یک نقطه ویرگول در زمان نیاز به یک دستور است. (کامپایلر لازم نیست که دستورالعمل NOP را در این مورد تولید کند؛ به طور معمول هیچ دستورالعملی تولید نمی‌شود.)  به طور متداول، یک بلوک خالی (دستورالعمل مرکب) ممکن است استفاده شود و ممکن است قابل خواندن باشد:  در برخی موارد، مانند بدنه یک تابع، یک بلوک باید استفاده شود، اما این می تواند خالی باشد. در C، دستورالعمل ها نمی‌توانند خالی باشد - دستورهای ساده باید با یک ؛ (نقطه ویرگول) تمام شوند، در حالیکه عبارات مرکب در {} (آکولاد) قرار میگیرند، که نیازی به یک نقطه ویرگول برای خود آگولاد نیست. بنابراین در مواردی که به دستوری نیاز است، Null میتواند مورد استفاده قرار بگیرد.
دستور NULL به خودی خود بی فایده است، اما می توان آن را به نحو گسترده تری از جمله در یک حلقه استفاده کرد:
از سوی دیگر،
یا بیشتر:
(توجه داشته باشید که آخرین فرم ممکن است گیج کننده باشد و به همین ترتیب یک هشدار را با برخی از کامپایلرها یا گزینه های کامپایلر ایجاد می کند؛ زیرا نقطه ویرگول معمولاً هنگامی که پس از یک پرانتز پرانتز در انتهای خط قرار می گیرد، انتهای دستور فراخوانی تابع را نشان می دهد).
کد بالا به فراخوانی تابع "getchar ()" تا زمانی که یک کاراکتر \ n (خط جدید) را بازگرداند ادامه میدهد، اساساً موقعیت خواندن فعلی ورودی را به ابتدای خط بعدی انتقال می دهد.
در Fortran، دستور codice_4 در بعضی موارد مانند آخرین دستور در یک حلقه DO مورد استفاده قرار می گیرد، اگر چه می توان آن را در هر جایی استفاده کرد و هیچ کارایی نداشته باشد.
همانطور که با C ؛ به تنهایی میتواند به عنوان دستور null استفاده شود. در حقیقت، به دلیل مشخصه زبان، در بلوک BEGIN / END، نقطه ویرگول قبل از عبارت END اختیاری است.
همچنین یک بلوک متشکل از codice_5 ممکن است به عنوان یک حفره یا سوراخ برای نشان دادن هیچ اقدام، حتی اگر قرار داده شده در یکی دیگر از بلوک BEGIN / END استفاده شود.
زبان برنامه نویسی Python دارای یک پایتون دستور codice_6 است که وقتی اجرا می شود تاثیری ندارد و بنابراین به عنوان یک NOP عمل می کند. به علت دستورکار محرمانه حساس پایتون این عمدتاً برای اطمینان از درست بود دستورکار استفاده می شود ؛ برای مثال دستورکار برای تعریف یک کلاس نیاز به یک بلوک فاصله دار با منطق کلاس، که به عنوان codice_6 هنگامی که آن باید خالی باشد بیان می شود
کتابخانه jQuery تابع codice_8 فراهم می کند که هیچ کاری انجام نمی‌دهد.
چارچوب زاویه(Angular) تابع angular.noop که هیچ کاری انجام نمی‌دهد را فراهم می کند.
علامت codice_9 (دونقطه) یک ساختار پوسته است که دارای اثر مشابهی با "NOP" (هیچ کاری انجام نمی‌دهد) است. این به لحاظ فنی NOP نیست، زیرا پارامتر خاص ؟$ را به 0 تغییر می دهد (وضعیت خروج از آخرین دستور). این ممکن است مترادف پوسته 'true' پیش فرض در نظر گرفته شود، و وضعیت خروج آن (true (0 است.
کتابخانه Lodash یک تابع codice_10 که undefined را باز می گرداند و هیچ کاری نمی‌کند.
بسیاری از پروتکل های کامپیوتری مانند telnet شامل یک فرمان NOP می شوند که یک کاربر می تواند برای دریافت یک پاسخ از سرور بدون درخواست های دیگر صادر کند. چنین دستورالعمل می تواند برای اطمینان از اینکه اتصال هنوز زنده باشد یا اینکه سرور پاسخگو باشد استفاده شود. دستور NOOP بخشی از پروتکل های زیر است ( "این یک لیست جزئی است" ):
توجه داشته باشید که بر خلاف پروتکل های دیگر ذکر شده، دستور IMAP4 NOOP یک هدف خاص دارد - این اجازه می دهد که سرور هر گونه اطلاعیه های معلق را به مشتری ارسال کند.
در حالی که اکثر سرویس دهنده های Telnet یا FTP به یک دستور NOOP با "OK" یا "+ OK" پاسخ می دهند، برخی از برنامه نویسان پاسخ های فریبنده ای را به کاربر اضافه کرده اند. به عنوان مثال، codice_11 شبح MINIX در پاسخ به NOOP با این پیام پاسخ میدهد:
NOP ها اغلب هنگامی که نرم‌افزار cracking شماره های سریال، سخت افزار یا نرم‌افزار خاص مورد نیاز، حضور و یا عدم دانگل های سخت افزاری و غیره را بررسی می کنند استفاده می شود. این کار با تغییر توابع و زیرشاخه ها برای از بین بردن کنترل های امنیتی انجام می شود و به جای آن فقط مقدار مورد انتظار که برای آن بررسی شده را بر میگرداند. از آنجایی که اکثر دستورالعمل ها در روال کنترل امنیتی استفاده نشده اند، با استفاده از NOP ها جایگزین می شوند، بنابراین عملکرد امنیتی نرم‌افزار را بدون هیچ گونه توجهی حذف می کنند.
کد NOP را می توان برای ایجاد اسلایدهای NOP استفاده کرد ، که اجازه می دهد تا کد زمانی اجرا شود که مقدار دقیق اشاره گر دستورالعمل نامعلوم باشد (مثلاً زمانی که یک سرریز بافر یک آدرس بازگشتی تابع را در ستون(stack) را بازنویسی کند).