موضوع مقاله: NOP (کد) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # NOP (کد) | مقدمه: در علم کامپیوتر ، یک NOP ، no-op یا NOOP (بدون هیچگونه عملی )، دستور زبان اسمبلی (مونتاز) ، دستور زبان برنامه نویسی یا فرمان پروتکل کامپیوتری است که هیچ کاری انجام نمی‌دهد. | ## بخش 1: NOP (کد) | مجموعه جهت های ماشین برخی از دستورالعمل های کامپیوتری عبارتند از دستورالعملی که هدف روشن آن تغییر وضعیت هر یک از پرچم‌ها، حافظه و یا ثبت کننده هایی که برنامه نویس به آنها دسترسی دارد،نیست. در سایر مجموعه‌ی دستورالعمل ها، یک NOP می تواند با اجرای یک دستور با عملگرهایی که همان تاثیر را دارند، شبیه سازی شود؛ به عنوان مثال ، در پردازنده SPARC ، دستور sethi 0, %g0 راه حل توصیه شده است. NOP اغلب برای اهداف زمان بندی استفاده می شود، برای تنظیم حافظه ، جلوگیری از وقوع تغییرات ناخواسته ، ;کنترل اجراهایی که اجرای آنها تاثیری رو دستور در حال اجرا ندارد، برای خنثی کردن یک دستورالعمل موجود مانند پرش، و یابعدا در توسعه برنامه به عنوان نگهدارنده مکان با دستورالعمل های فعال جایگزین شود. (یا زمانی که سازماندهی دوباره مشکل یا وقت گیر است جایگزین دستورالعمل حذف شده می شود ). در برخی موارد، NOP می تواند عوارض جانبی جزئی داشته باشد؛ به عنوان مثال، درسری پردازنده موتورولا 68000، کد دستور (NOP (opcode باعث هماهنگ سازی خط لوله می شود. دستور NOP برای یک سری از معماری های پردازنده ها در زیر آورده شده است : از نقطه نظر طراحی سخت افزار، قسمت های ناحیه ی BUS که مورد استفاده قرار نگرفته اند اغلب طراحی شده اند تا صفر را بازگردانند؛ از آنجا که رفتار اسلایدهای NOP اغلب مطلوب است، به صورت یک طرفه زمان برنامه نویسی با کد های تمام صفر عمل میکند. کد NOP گاهی به عنوان توضیحی برای عمل انجام شده توسط یک تابع یا یک دنباله از دستورهای زبان برنامه نویسی به کار می رود، اگر تابع یا کد تاثیری نداشته باشد (همچنین ممکن است به نام کد افزوده باشد ). | ## بخش 2: NOP (کد) | این کد ممکن است توسط دستور زبان زبان برنامه نویسی مورد نیاز باشد، وقتی که اجازه فضای کد خالی را نمی‌دهد. (بنابراین، اگر برنامه نویس فراموش کند که یک ترتیب از دستور ها را بنویسد، برنامه کامپایل نخواهد شد.) C و مشتقات خط دوم زیر یک نمونه از یک جمله C است که مانند NOP رفتار می کند. در عمل، اکثر کامپایلر ها کدی برای این دستور ایجاد نخواهند کرد: این دستور یک جمع انجام میدهد و نتیجه را رد می کند. در واقع، هر دستور بدون عوارض جانبی (که بر جریان کنترل تاثیر نمی‌گذارد، مانند قطع کردن، بازگشت) می تواند حذف شود، زیرا نتیجه محاسبات را نادیده می‌گیرد. ساده ترین دستور احتمالی در C که مانند NOP عمل می کند، به اصطلاح دستور null است ، که فقط یک نقطه ویرگول در زمان نیاز به یک دستور است. (کامپایلر لازم نیست که دستورالعمل NOP را در این مورد تولید کند؛ به طور معمول هیچ دستورالعملی تولید نمی‌شود.) ؛ به طور متداول، یک بلوک خالی (دستورالعمل مرکب) ممکن است استفاده شود و ممکن است قابل خواندن باشد: در برخی موارد، مانند بدنه یک تابع، یک بلوک باید استفاده شود، اما این می تواند خالی باشد. در C، دستورالعمل ها نمی‌توانند خالی باشد - دستورهای ساده باید با یک ؛ (نقطه ویرگول) تمام شوند، در حالیکه عبارات مرکب در (آکولاد) قرار میگیرند، که نیازی به یک نقطه ویرگول برای خود آگولاد نیست. | ## بخش 3: NOP (کد) | دستور NULL به خودی خود بی فایده است، اما می توان آن را به نحو گسترده تری از جمله در یک حلقه استفاده کرد: از سوی دیگر، یا بیشتر: (توجه داشته باشید که آخرین فرم ممکن است گیج کننده باشد و به همین ترتیب یک هشدار را با برخی از کامپایلرها یا گزینه های کامپایلر ایجاد می کند؛ زیرا نقطه ویرگول معمولاً هنگامی که پس از یک پرانتز پرانتز در انتهای خط قرار می گیرد، انتهای دستور فراخوانی تابع را نشان می دهد). کد بالا به فراخوانی تابع getchar تا زمانی که یک کاراکتر \ n (خط جدید) را بازگرداند ادامه میدهد، اساساً موقعیت خواندن فعلی ورودی را به ابتدای خط بعدی انتقال می دهد. این به لحاظ فنی NOP نیست، زیرا پارامتر خاص ؟$ را به 0 تغییر می دهد (وضعیت خروج از آخرین دستور). دستورها پروتکل NOP بسیاری از پروتکل های کامپیوتری مانند telnet شامل یک فرمان NOP می شوند که یک کاربر می تواند برای دریافت یک پاسخ از سرور بدون درخواست های دیگر صادر کند. چنین دستورالعمل می تواند برای اطمینان از اینکه اتصال هنوز زنده باشد یا اینکه سرور پاسخگو باشد استفاده شود. این کار با تغییر توابع و زیرشاخه ها برای از بین بردن کنترل های امنیتی انجام می شود و به جای آن فقط مقدار مورد انتظار که برای آن بررسی شده را بر میگرداند. از آنجایی که اکثر دستورالعمل ها در روال کنترل امنیتی استفاده نشده اند، با استفاده از NOP ها جایگزین می شوند، بنابراین عملکرد امنیتی نرم‌افزار را بدون هیچ گونه توجهی حذف می کنند. | ## جمع‌بندی | رفتار امنیتی کد NOP را می توان برای ایجاد اسلایدهای NOP استفاده کرد ، که اجازه می دهد تا کد زمانی اجرا شود که مقدار دقیق اشاره گر دستورالعمل نامعلوم باشد (مثلاً زمانی که یک سرریز بافر یک آدرس بازگشتی تابع را در ستون(stack) را بازنویسی کند).