एनओपी (कोड)

From alpha
Jump to navigation Jump to search

कंप्यूटर विज्ञान में, एनओपी, नो-ऑप, या एनओओपी (उच्चारण नो ऑप; बिना ऑपरेशन का संक्षिप्त रूप) एक मशीन कोड निर्देश और इसकी असेंबली भाषा निमोनिक, प्रोग्रामिंग भाषा स्टेटमेंट, या प्रोटोकॉल (कंप्यूटिंग) कमांड है जो कुछ भी नहीं करता है।

मशीन भाषा निर्देश

कुछ कंप्यूटर अनुदेश सेटों में एक निर्देश सम्मिलित होता है जिसका स्पष्ट उद्देश्य प्रोग्रामर-सुलभ प्रोसेसर रजिस्टर, प्रक्रिया स्थिति या मुख्य मेमोरी में से किसी की स्थिति को बदलना एनओपी है। इसे निष्पादित करने के लिए अक्सर घड़ी चक्रों की एक अच्छी तरह से परिभाषित संख्या की आवश्यकता होती है। अन्य निर्देश सेटों में, कोई स्पष्ट एनओपी निर्देश एनओपी है, लेकिन असेंबली भाषा मेमोनिक एनओपी एक निर्देश का प्रतिनिधित्व करता है जो एनओपी के रूप में कार्य करता है; उदाहरण के लिए, एसपीएआरसी पर, सेठी 0, %जी0.

किसी एनओपी को मेमोरी तक एनओपी पहुंचना चाहिए, क्योंकि इससे मेमोरी में खराबी या पेज में दुर्दशा हो सकती है।

एनओपी का उपयोग प्रायः समय निर्धारण उद्देश्यों के लिए किया जाता है, डेटा संरचना संरेखण को मजबूर करने के लिए, खतरे (कंप्यूटर वास्तुकला) को रोकने के लिए, एक शाखा विलंब स्लॉट पर कब्जा करने के लिए, एक प्रचलित निर्देश जैसे जंप को शून्य करने के लिए, एक निष्पादन निर्देश के लक्ष्य के रूप में , या प्रोग्राम विकास में बाद में सक्रिय निर्देशों द्वारा प्रतिस्थापित किए जाने वाले प्लेस-होल्डर के रूप में (या जब पुनर्संगठित करना समस्याग्रस्त या समय लेने वाला होगा तो हटाए गए निर्देशों को प्रतिस्थापित करना)। कुछ घटनाओं में, एनओपी के अप्रौढ दुष्प्रभाव हो सकते हैं; उदाहरण के लिए, मोटोरोला 68000 श्रृंखला के प्रोसेसर पर, एनओपी ऑपकोड पाइपलाइन (कंप्यूटिंग) के तादात्म्य का कारण बनता है।[1]

कुछ सीपीयू वास्तुकला के लिए एनओपी निर्देश नीचे सूचीबद्ध हैं:

सीपीयू आर्किटेक्चर अनुदेश स्मरणीय बाइट्स ऑपकोड टिप्पणियाँ
इंटेलl एक्स86 सीपीयू परिवार एनओपी 1; 1–9 के लिए आई686 और एक्स86-64 0एक्स90[2] 0एक्स90 लंबे मोड को छोड़कर सभी मोड में एक्ससीएचजी ईएएक्स, ईएएक्स को डिकोड करता है, जहां ऑपकोड 0एक्स90 का अभी भी कोई प्रभाव एनओपी है। इंटेल के मैनुअल में लंबी एन्कोडिंग का वर्णन किया गया है।
इंटेलl 8051 / एमसीएस-51 परिवार एनओपी 1 0एक्स00
एआरएम ए32 एनओपी 4 0एक्स00000000 यह अंडेक आर0, आर0, आर0 के लिए है। असेंबली निर्देश एनओपी संभवतः मोव आर0, आर0 तक विस्तारित होगा जो 0एक्सE1ए00000 (लिटिल-एंडियन आर्किटेक्चर) एन्कोड किया गया है।
एआरएम टी32 (16 बिट) एनओपी 2 0एक्सb000 एडीडी एसपी के लिए ऑपकोड, #0 - स्टैक पॉइंटर में शून्य जोड़ें (कोई ऑपरेशन एनओपी)। असेंबली निर्देश एनओपी संभवतः mov आर8, आर8 तक विस्तारित होगा जो 0एक्स46सी0 एन्कोडेड है।
एआरएम टी32 (32 बिट) एनओपी 4 0एक्सF3एएफ 8000
एआरएम ए64 (64 बिट) एनओपी 4 0एक्सD503201एफ
एवीआर एनओपी 2 0एक्स0000 एक घड़ी चक्र
आईबीएम सिस्टम/360, आईबीएम सिस्टम/370, आईबीएम सिस्टम/390, जेड/आर्किटेक्चर, यूनिवैक सीरीज 90 एनओपी 4 0एक्स47000000 or 0एक्स470एनएनएनएनएन or 0एक्स47एन0एनएनएनएन where "एन" is कोई भी 4-बिट वैल्यू. एनओपी ("नो-ऑप") और एनओपीआर ("नो-ऑप रजिस्टर") क्रमशः "ब्रांच ऑन कंडीशन" या "ब्रांच ऑन कंडीशन रजिस्टर" निर्देशों का एक उपसमूह हैं; दोनों संस्करणों में एनO-OP उत्पन्न करने के लिए दो विकल्प हैं।

एनओपी और एनओपीआईआर दोनों निर्देशों के मामले में, दूसरे बाइट में पहला 0 "मास्क" मान है, परीक्षण करने की स्थिति जैसे कि बराबर, बराबर एनओपी, उच्च, निम्न, आदि। यदि मास्क 0 है, तो कोई शाखा एनओपी है घटित होना।

एनओपीआईआर निर्देश के मामले में, दूसरे बाइट में दूसरा मान शाखा के लिए रजिस्टर है। यदि रजिस्टर 0 चुना जाता है, तो मास्क मूल्य की परवाह किए बिना कोई शाखा एनओपी होती है। इस प्रकार, यदि दूसरे बाइट में दोनों में से कोई भी मान 0 है, तो शाखा एनओपी होगी।

एनओपी निर्देश के मामले में, दूसरे बाइट में दूसरा मान संयुक्त आधार रजिस्टर, विस्थापन रजिस्टर और ऑफसेट पते का "आधार" रजिस्टर है। यदि आधार रजिस्टर भी 0 है, तो विस्थापन रजिस्टर या विस्थापन पते के मूल्य की परवाह किए बिना शाखा एनओपी ली जाती है।

एनओपीआर 2 0एक्स0700 या 0एक्स0700एन या 0एक्स 0700एन0 जहां "एन" कोई 4-बिट मान है।
सुपर एच एनओपी 2 0एक्स0009
एमआईपीएस एनओपी 4 0एक्स00000000 एसएलएल आर0,आर0,0 के लिए खड़ा है, जिसका अर्थ है: तार्किक रूप से रजिस्टर 0 शून्य बिट्स को बाईं ओर स्थानांतरित करें और परिणाम को रजिस्टर 0 में संग्रहीत करें। रजिस्टर 0 पर लिखने पर ध्यान एनओपी दिया जाता है; इसमें हमेशा 0 होता है.
एमआईपीएस-एक्स एनओपी 4 0एक्स60000019 (आर0,आर0,आर0 जोड़ने के लिए विस्तारित ऑपकोड)
एमआईएक्स एनओपी 1 शब्द ± * * * * 0 * बाइट्स मनमाने हैं, और 0 से अधिकतम बाइट तक कुछ भी हो सकते हैं (63-99 की सीमा में होना आवश्यक है)। दिव्यएक्स साइन-परिमाण प्रतिनिधित्व का उपयोग करता है।
एमएमआईएक्स एसडब्ल्यूवाईएम 4 0एक्सएफडी****** एसडब्ल्यूवाईएम का मतलब है "अपनी मशीनरी के प्रति सहानुभूति रखें"। * अंक मनमाने ढंग से चुने जा सकते हैं।
मोटोरोला 68000 परिवार एनओपी 2 0एक्स4इ71 यह को सिंक्रनाइज़ करता है पाइपलाइन और निर्देश ओवरलैप को रोकता है।.[1]
मोटोरोला 6809 एनओपी 1 0एक्स12
एमओएस टेक्नोलॉजी 65एक्सएक्स (उदा. 6502) एनओपी 1 0एक्सEA एनओपी दो घड़ी चक्रों का उपभोग करता है। अपरिभाषित ऑपकोड में एनएमओएस संस्करणों को 65एक्सएक्स परिवार were सीoएनverted to be एनओपी में अलग-अलग निर्देश लंबाई और चक्र समय के एनओपी में परिवर्तित किया गया था। 65सी02.
एनओपी 4 0एक्स60000000 (ओआरआई आर0,आर0,0 के लिए विस्तारित ऑपकोड)
पीआईसी माइक्रोकंट्रोलर एनओपी 12 बिट्स 0b000000000000 एमओवीडब्ल्यू 0,डब्ल्यू
आरआईएससी-वी एनओपी 4 0एक्स00000013 एडीडीआई एक्स0, एक्स0, 0
एसपीएआरसी एनओपी 4 0एक्स01000000 सेठी 0, %जी0 के लिए खड़ा है जो हार्डवेयर्ड-टू-जीरो %जी0 रजिस्टर को शून्य करता है
जेड80 एनओपी 1 0एक्स00 बिना किसी प्रभाव के कुछ अन्य निर्देश हैं (और वही समय): एलडी ए, ए, एलडी बी, बी आदि।
पीडीपी-10 जेएफसीएल 0, (पारंपरिक)

जम्प, सेटा, सेताई, सीएआई, टीआरएन, टीएलएन

1 शब्द 25500******* (अष्टभुजाकार) कूदो कभी मत

कभी कूदो मत, कुछ भी सेट मत करो, कभी मत छोड़ो

पीडीपी-11 एनओपी 16 बिट्स 000240 (अष्टभुजाकार) कोई भी शर्त कोड साफ़ न करें
वीएएक्स एनओपी 1 0एक्स01 विलंब प्रोसेसर प्रकार पर निर्भर है

हार्डवेयर डिज़ाइन के दृष्टिकोण से, बस के अनमैप्ड क्षेत्रों को अक्सर शून्य लौटाने के लिए डिज़ाइन किया जाता है; चूंकि एनओपी स्लाइड व्यवहार अक्सर वांछनीय होता है, यह इसे ऑल-जीरोज़ ऑपकोड के साथ कोडिंग करने में पूर्वाग्रह देता है।

कोड

एक कार्य या प्रोग्रामिंग भाषा कथनों का अनुक्रम एक एनओपी या अशक्त कथन है यदि इसका कोई प्रभाव एनओपी है। कुछ संदर्भों में कुछ भाषाओं की प्रोग्रामिंग भाषा वाक्य - विन्यास द्वारा शून्य कथनों की आवश्यकता हो सकती है।

अदा

एडा (प्रोग्रामिंग भाषा) में, एनयूएलएल कथन एनओपी के रूप में कार्य करता है।[3] जैसा कि वाक्यविन्यास निषिद्ध करता है कि नियंत्रण कथन या कार्य खाली हों, एनयूएलएल कथन का उपयोग यह निर्दिष्ट करने के लिए किया जाना चाहिए कि किसी कार्रवाई की आवश्यकता एनओपी है। (इस प्रकार, यदि प्रोग्रामर कथनों का अनुक्रम लिखना भूल जाता है, तो प्रोग्राम संकलित करने में विफल हो जाएगा।)

सी और डेरिवेटिव

सी में सबसे सरल एनओपी स्टेटमेंट शून्य स्टेटमेंट है, जो एक स्टेटमेंट की आवश्यकता वाले संदर्भ में सिर्फ एक अर्ध-कोलन है।

  ;

एक खाली ब्लॉक (यौगिक विवरण) भी एक एनओपी है, और अधिक सुपाठ्य हो सकता है:

  {}

कुछ घटना में, जैसे किसी कार्य का मुख्य भाग, एक ब्लॉक का उपयोग किया जाना चाहिए, लेकिन यह खाली हो सकता है। सी में, कथन खाली एनओपी हो सकते - सरल कथन ए के साथ समाप्त होने चाहिए; (अर्धविराम) जबकि यौगिक कथन {} (ब्रेसिज़) में संलग्न होते हैं, जिन्हें स्वयं निम्एनयूएलएलिखित अर्धविराम की आवश्यकता एनओपी होती है। इस प्रकार उन संदर्भों में जहां एक कथन व्याकरणिक रूप से आवश्यक है, ऐसे कुछ शून्य कथन का उपयोग किया जा सकता है।

शून्य कथन अपने आप में बेकार है, लेकिन व्यापक संदर्भ में इसका वाक्यात्मक उपयोग हो सकता है, उदाहरण के लिए, लूप के संदर्भ में:

  while (getchar() != '\n') {}

वैकल्पिक रूप से,

  while (getchar() != '\n')
      ;

या अधिक संक्षेप में:

  while (getchar() != '\n');

(ध्यान दें कि अंतिम फॉर्म भ्रमित करने वाला हो सकता है, और इस तरह कुछ संकलकों या संकलक विकल्पों के साथ एक चेतावनी उत्पन्न होती है, क्योंकि पंक्ति के अंत में कोष्ठक के बाद रखे जाने पर अर्धविराम प्रायः कार्य कॉल निर्देश के अंत को इंगित करता है)।

उपरोक्त कोड कार्य गेटसीहर() को तब तक कॉल करना जारी रखता है जब तक कि यह एक \एन (न्यूलाइन) वर्ण एनओपी लौटाता है, अनिवार्य रूप से मानक इनपुट के वर्तमान रीडिंग स्थान को अगली पंक्ति की प्रारम्भ में तेजी से अग्रेषित करता है।

फोरट्रान

फोरट्रान में, चालू रखना स्टेटमेंट का उपयोग कुछ संदर्भों में किया जाता है जैसे कि डीओ लूप में अंतिम स्टेटमेंट, यदपि इसका उपयोग कहीं भी किया जा सकता है, और इसमें कोई कार्यक्षमता एनओपी होती है।

जावास्क्रिप्ट

जावास्क्रिप्ट भाषा में कोई अंतर्निहित एनओपी कथन एनओपी है। कई कार्यान्वयन संभव हैं:

  • उपयोग ; खाली बयान[4] या {} एनओपी (कोड)#सी_एंड_डेरिवेटिव्स उदाहरणों की तरह ही खाली ब्लॉक स्टेटमेंट;
  • उपयोग अपरिभाषित या एनयूएलएल अभिव्यक्ति को एक पूर्ण कथन के रूप में (एक अभिव्यक्ति कथन) जब पिछली विधियों को वाक्य - विन्यास द्वारा अनुमति एनओपी दी जाती है।

विकल्प, उन स्थितियों में जहां किसी कार्य की आवश्यकता होती है, ये हैं:

  • उपयोग फ़ंक्शन.प्रोटोटाइप() अंतर्निहित कार्य, जो किसी भी तर्क को स्वीकार करता है और रिटर्न देता है अपरिभाषित;[5]
  • तृतीय-पक्ष लाइब्रेरी में उपलब्ध एनओपी कार्य का उपयोग करें—नीचे देखें;
  • एक कस्टम एनओपी कार्य को परिभाषित करें, जैसा कि निम्एनयूएलएलिखित उदाहरण में है (ईएस6 एरो कार्य वाक्य - विन्यास का उपयोग करके):
const noop = () => {};

एंगुलरजेएस

कोणीयजेएस फ्रेमवर्क कोणीय.एनओपी कार्य प्रदान करता है जो कोई ऑपरेशन एनओपी करता है।

जेक्वेरी

जेक्वेरी लाइब्रेरी एक कार्य प्रदान करती है जेक्वेरी.एनओपी(), जो कुछ एनओपी करता.[6]

लोदाश

लॉडैश लाइब्रेरी एक कार्य प्रदान करती है _.एनओपी(), जो अपरिभाषित लौटाता है और कुछ एनओपी करता।[7]

पास्कल

सी के साथ, ; स्वयं द्वारा प्रयुक्त को पास्कल (प्रोग्रामिंग भाषा) में एक अशक्त कथन के रूप में उपयोग किया जा सकता है। वास्तव में, भाषा की विशिष्टता के कारण, आरंभ/समाप्ति ब्लॉक में, समाप्ति कथन से पहले अर्धविराम वैकल्पिक होता है, इस प्रकार वहां प्रयुक्त अर्धविराम अनावश्यक होता है।

इसके अलावा, एक ब्लॉक जिसमें सम्मिलित है आरंभ समाप्ति; कोई कार्रवाई न होने का संकेत देने के लिए प्लेसहोल्डर के रूप में उपयोग किया जा सकता है, भले ही इसे किसी अन्य आरंभ/समाप्ति ब्लॉक के अंदर रखा गया हो।

पायथन

पायथन (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा में एक पायथन (प्रोग्रामिंग भाषा)#स्टेटमेंट्स और नियंत्रण प्रवाह| हैउत्तीर्ण ऐसा कथन जिसे निष्पादित करने पर कोई प्रभाव एनओपी पड़ता है और इस प्रकार यह एनओपी के रूप में कार्य करता है। इसका उपयोग मुख्य रूप से पायथन के ऑफ-साइड नियम | इंडेंटेशन-सेंसिटिव वाक्य - विन्यास के कारण सही वाक्य - विन्यास सुनिश्चित करने के लिए किया जाता है; उदाहरण के लिए किसी कक्षा (कंप्यूटर प्रोग्रामिंग) की परिभाषा के लिए वाक्य - विन्यास के लिए श्रेणीतर्क के साथ एक इंडेंटेड ब्लॉक की आवश्यकता होती है, जिसे इस प्रकार व्यक्त किया जाना चाहिए उत्तीर्ण जब यह खाली होना चाहिए.

शेल स्क्रिप्टिंग (बैश, ज़ेडएसएच, आदि)

':' [कोलन] कमांड एक शेल बिल्टिन है जिसका एनओपी (कुछ न करने वाला ऑपरेशन) के समान प्रभाव होता है। यह तकनीकी रूप से एनओपी एनओपी है, क्योंकि यह विशेष पैरामीटर $? को बदल देता है। (अंतिम कमांड की निकास स्थिति) से 0. इसे 'सही' में निर्मित शेल का पर्याय माना जा सकता है, और इसकी निकास स्थिति सत्य (0) है।[8][9][10]

टेक्स मैक्रो भाषा (सीओएनमूलपाठ, लाटेकस, आदि)

टेक्स टाइपोग्राफ़िकल सिस्टम की मैक्रो भाषा में है \विश्राम आज्ञा।[11] यह अपने आप में कुछ एनओपी करता है, लेकिन इसका उपयोग तत्काल पूर्ववर्ती कमांड को किसी भी बाद के टोकन को पार्स करने से रोकने के लिए किया जा सकता है।[12]

एनओपी प्रोटोकॉल कमांड

टेलनेट जैसे कई प्रोटोकॉल (कंप्यूटिंग) में एक एनओपी कमांड सम्मिलित होता है जिसे क्लाइंट किसी अन्य कार्रवाई का अनुरोध किए बिना सर्वर से प्रतिक्रिया का अनुरोध करने के लिए जारी कर सकता है। इस तरह के कमांड का उपयोग कीपलाइव या सर्वर रिस्पॉन्सिव होने के लिए किया जा सकता है। एक एनओपी कमांड निम्एनयूएलएलिखित प्रोटोकॉल का हिस्सा है (यह एक आंशिक सूची है):

ध्यान दें कि सूचीबद्ध अन्य प्रोटोकॉल के विपरीत, आईएमएपी4 एनओपी कमांड का एक विशिष्ट उद्देश्य है - यह सर्वर को क्लाइंट को कोई भी लंबित अधिसूचना भेजने की अनुमति देता है।

जबकि अधिकांश टेलनेट या एफ़टीपी सर्वर एनओओपी कमांड का जवाब ओके या +ओके के साथ देते हैं, कुछ प्रोग्रामर ने क्लाइंट के लिए विचित्र प्रतिक्रियाएं जोड़ दी हैं। उदाहरण के लिए, एफटीपीडी एमआईएनआईएक्स का डेमॉन एनओपी को संदेश के साथ प्रतिक्रिया देता है:[13]

एफ़टीपी सर्वर रिटर्न कोड एनओपी की सूची आपके लिए भी!

क्रैकिंग

एनओपी अक्सर तब सम्मिलित होते हैं जब सॉफ्टवेयर क्रैकिंग सॉफ़्टवेयर होता है जो सीरियल नंबर, विशिष्ट हार्डवेयर या सॉफ़्टवेयर आवश्यकताओं, हार्डवेयर डोंगल की उपस्थिति या अनुपस्थिति आदि की जांच करता है।[citation needed] यह प्रक्रिया सुरक्षा जांच को बायपास करने के लिए सबरूटीन को बदलकर पूरी की जाती है और इसके बजाय केवल अपेक्षित मूल्य लौटाया जाता है जिसके लिए जाँच की जा रही है। क्योंकि सुरक्षा जांच रूटीन में अधिकांश निर्देश अप्रयुक्त होंगे, इन्हें एनओपी से बदल दिया जाएगा, इस प्रकार बाइनरी में आने वाली हर चीज की स्थिति में बदलाव किए बिना सॉफ्टवेयर की सुरक्षा कार्यक्षमता को हटा दिया जाएगा।

सुरक्षा शोषण

एनओपी ऑपकोड का उपयोग एनओपी स्लाइड बनाने के लिए किया जा सकता है, जो निर्देश सूचक का सटीक मान अनिश्चित होने पर कोड को निष्पादित करने की अनुमति देता है (उदाहरण के लिए, जब बफर ओवरफ्लो के कारण स्टैक पर कार्य का रिटर्न पता ओवरराइट हो जाता है)।

यह भी देखें

संदर्भ

  1. 1.0 1.1 "Motorola 68000 Programmer's Reference Manual" (PDF).
  2. "Intel 64 and IA-32 Architectures Software Developer's Manual: Instruction Set Reference A-Z" (PDF). Retrieved 2012-03-01.
  3. Ada Reference Manual — null statements. "The execution of a null_statement has no effect."
  4. MDN JavaScript reference – empty statement. "The empty statement is a semicolon (;) indicating that no statement will be executed, even if JavaScript syntax requires one."
  5. ECMAScript Language Specification – Edition 5.1 – Properties of the Function Prototype Object
  6. jQuery.noop() from jQuery API documentation
  7. "लोदाश दस्तावेज़ीकरण". lodash.com. Retrieved 2017-12-15.
  8. Advanced Bash-Scripting Guide > Chapter 3. Special Characters
  9. bash manpage > SHELL BUILTIN COMMANDS
  10. zsh manpage (zshbuiltins) > SHELL BUILTIN COMMANDS
  11. Bausum, David (2002). "TeX Primitive Control Sequences". TeX संदर्भ मैनुअल. Kluwer Academic Publishers. Retrieved 1 April 2020. According to The TeXbook, 'TeX does nothing' when it encounters \relax. Actually, \relax may tell TeX, 'This is the end of what you've been doing'.
  12. TeX wikibook – relax
  13. "ftpd.c". Retrieved 2016-06-19.