एनओपी (कोड)
| Machine code |
|---|
| General concepts |
| Instructions |
कंप्यूटर विज्ञान में, एनओपी, नो-ऑप, या एनओओपी (उच्चारण नो ऑप; बिना ऑपरेशन का संक्षिप्त रूप) एक मशीन कोड निर्देश और इसकी असेंबली भाषा निमोनिक, प्रोग्रामिंग भाषा स्टेटमेंट, या प्रोटोकॉल (कंप्यूटिंग) कमांड है जो कुछ भी नहीं करता है।
मशीन भाषा निर्देश
कुछ कंप्यूटर अनुदेश सेटों में एक निर्देश सम्मिलित होता है जिसका स्पष्ट उद्देश्य प्रोग्रामर-सुलभ प्रोसेसर रजिस्टर, प्रक्रिया स्थिति या मुख्य मेमोरी में से किसी की स्थिति को बदलना नहीं है। इसे निष्पादित करने के लिए अक्सर घड़ी चक्रों की एक अच्छी तरह से परिभाषित संख्या की आवश्यकता होती है। अन्य निर्देश सेटों में, कोई स्पष्ट एनओपी निर्देश नहीं है, लेकिन असेंबली भाषा मेमोनिक एनओपी एक निर्देश का प्रतिनिधित्व करता है जो एनओपी के रूप में कार्य करता है; उदाहरण के लिए, एसपीएआरसी पर, सेठी 0, %g0.
किसी एनओपी को मेमोरी तक नहीं पहुंचना चाहिए, क्योंकि इससे मेमोरी में खराबी या पेज में दुर्दशा हो सकती है।
एनओपी का उपयोग प्रायः समय निर्धारण उद्देश्यों के लिए किया जाता है, डेटा संरचना संरेखण को मजबूर करने के लिए, खतरे (कंप्यूटर वास्तुकला) को रोकने के लिए, एक शाखा विलंब स्लॉट पर कब्जा करने के लिए, एक प्रचलित निर्देश जैसे जंप को शून्य करने के लिए, एक निष्पादन निर्देश के लक्ष्य के रूप में , या प्रोग्राम विकास में बाद में सक्रिय निर्देशों द्वारा प्रतिस्थापित किए जाने वाले प्लेस-होल्डर के रूप में (या जब पुनर्संगठित करना समस्याग्रस्त या समय लेने वाला होगा तो हटाए गए निर्देशों को प्रतिस्थापित करना)। कुछ घटनाओं में, एनओपी के अप्रौढ दुष्प्रभाव हो सकते हैं; उदाहरण के लिए, मोटोरोला 68000 श्रृंखला के प्रोसेसर पर, एनओपी ऑपकोड पाइपलाइन (कंप्यूटिंग) के तादात्म्य का कारण बनता है।[1]
कुछ सीपीयू वास्तुकला के लिए एनओपी निर्देश नीचे सूचीबद्ध हैं:
| सीपीयू आर्किटेक्चर | अनुदेश स्मरणीय | बाइट्स | ऑपकोड | टिप्पणियाँ |
|---|---|---|---|---|
| इंटेलl x86 सीपीयू परिवार | NOP
|
1; 1–9 for i686 and x86-64 | 0x90[2] | 0x90 decodes to xchg eax, eax in all modes except long mode, where the opcode 0x90 still has no effect. The longer encodings are described in Intel's manual.
|
| इंटेलl 8051 / एमसीएस-51 परिवार | NOP
|
1 | 0x00 | |
| एआरएम ए32 | NOP
|
4 | 0x00000000 | This stands for andeq r0, r0, r0. The assembly instruction nop will most likely expand to mov r0, r0 which is encoded 0xE1A00000 (little-endian architecture).[3]
|
| एआरएम टी32 (16 बिट) | NOP
|
2 | 0xb000 | Opcode for ADD SP, #0 - Add zero to the stack pointer (No operation). The assembly instruction nop will most likely expand to mov r8, r8 which is encoded 0x46C0.[4]
|
| एआरएम टी32 (32 बिट) | NOP
|
4 | 0xF3AF 8000 | |
| एआरएम ए64 (64 बिट) | NOP
|
4 | 0xD503201F | |
| एवीआर | NOP
|
2 | 0x0000 | one clock cycle |
| आईबीएम सिस्टम/360, आईबीएम सिस्टम/370, आईबीएम सिस्टम/390, जेड/आर्किटेक्चर, यूनिवैक सीरीज 90 | NOP
|
4 | 0x47000000 or 0x470nnnnn or 0x47n0nnnn where "n" is any 4-बिट value. | The NOP ("No-Op") and NOPR ("No-Op Register") are a subset of the "Branch on Condition" or "Branch on Condition Register" instructions, respectively; both versions have two options for generating a NO-OP.
In the case of both the NOP and NOPR instructions, the first 0 in the second byte is the "mask" value, the condition to test such as equal, not equal, high, low, etc. If the mask is 0, no branch occurs. In the case of the NOPR instruction, the second value in the second byte is the register to branch on. If register 0 is chosen, no branch occurs regardless of the mask value. Thus, if either of the two values in the second byte is 0, the branch will not happen. In the case of the NOP instruction, the second value in the second byte is the "base" register of a combined base register, displacement register and offset address. If the base register is also 0, the branch is not taken regardless of the value of the displacement register or displacement address. |
NOPR
|
2 | 0x0700 or 0x070n or 0x07n0 where "n" is any 4-बिट value. | ||
| सुपर एच | NOP
|
2 | 0x0009 | |
| एमआईपीएस | NOP
|
4 | 0x00000000 | Stands for sll r0,r0,0, meaning: Logically shift register 0 zero बिटs to the left and store the result in register 0. Writes to register 0 are ignored; it always contains 0.
|
| एमआईपीएस-एक्स | NOP
|
4 | 0x60000019 | (extended opcode for add r0,r0,r0)
|
| एमआईएक्स | NOP
|
1 word | ± * * * * 0 | The * bytes are arबिटrary, and can be anything from 0 to the maximum byte (required to be in the range 63-99). एमआईएक्स uses sign-magnitude representation. |
| एमएमआईएक्स | SWYM
|
4 | 0xFD****** | SWYM stands for "Sympathize with your machinery". The * digits can be chosen arबिटrarily. |
| मोटोरोला 68000 परिवार | NOP
|
2 | 0x4E71 | This synchronizes the pipeline and prevents instruction overlap.[1] |
| मोटोरोला 6809 | NOP
|
1 | 0x12 | |
| एमओएस टेक्नोलॉजी 65xx (उदा. 6502) | NOP
|
1 | 0xEA | NOP consumes two clock cycles. Undefined opcodes in the NMOS versions of the 65xx परिवार were converted to be NOPs of varying instruction lengths and cycle times in the 65C02.
|
एनओपी
|
4 | 0x60000000 | (extended opcode for ori r0,r0,0)
| |
| पीआईसी माइक्रोकंट्रोलर | NOP
|
12 बिटs | 0b000000000000 | MOVW 0,W
|
| आरआईएससी-वी | NOP
|
4 | 0x00000013 | ADDI x0, x0, 0
|
| एसपीएआरसी | NOP
|
4 | 0x01000000 | Stands for sethi 0, %g0 which zeroes the hardwired-to-zero %g0 register[5]
|
| जेड80 | NOP
|
1 | 0x00 | There are some other instructions without any effect (and the same timing): LD A, A, LD B, B etc.
|
| पीडीपी-10 | JFCL 0, (conventional)JUMP, SETA, SETAI, CAI, TRN, TLN
|
1 word | 25500******* (octal) | Jump never Jump never, set nothing, skip never |
| पीडीपी-11 | NOP
|
16 बिटs | 000240 (octal) | Clear none of the condition codes |
| VAX | NOP
|
1 | 0x01 | Delay is dependent on processor type |
हार्डवेयर डिज़ाइन के दृष्टिकोण से, बस के अनमैप्ड क्षेत्रों को अक्सर शून्य लौटाने के लिए डिज़ाइन किया जाता है; चूंकि एनओपी स्लाइड व्यवहार अक्सर वांछनीय होता है, यह इसे ऑल-जीरोज़ ऑपकोड के साथ कोडिंग करने में पूर्वाग्रह देता है।
कोड
एक फ़ंक्शन या प्रोग्रामिंग भाषा कथनों का अनुक्रम एक एनओपी या अशक्त कथन है यदि इसका कोई प्रभाव नहीं है। कुछ संदर्भों में कुछ भाषाओं की प्रोग्रामिंग भाषा सिंटैक्स द्वारा शून्य कथनों की आवश्यकता हो सकती है।
अदा
एडा (प्रोग्रामिंग भाषा) में, null कथन एनओपी के रूप में कार्य करता है।[6] जैसा कि वाक्यविन्यास निषिद्ध करता है कि नियंत्रण कथन या फ़ंक्शन खाली हों, null कथन का उपयोग यह निर्दिष्ट करने के लिए किया जाना चाहिए कि किसी कार्रवाई की आवश्यकता नहीं है। (इस प्रकार, यदि प्रोग्रामर कथनों का अनुक्रम लिखना भूल जाता है, तो प्रोग्राम संकलित करने में विफल हो जाएगा।)
सी और डेरिवेटिव
सी में सबसे सरल एनओपी स्टेटमेंट शून्य स्टेटमेंट है, जो एक स्टेटमेंट की आवश्यकता वाले संदर्भ में सिर्फ एक अर्ध-कोलन है।
;
एक खाली ब्लॉक (यौगिक विवरण) भी एक एनओपी है, और अधिक सुपाठ्य हो सकता है:
{}
कुछ घटना में, जैसे किसी फ़ंक्शन का मुख्य भाग, एक ब्लॉक का उपयोग किया जाना चाहिए, लेकिन यह खाली हो सकता है। C में, कथन खाली नहीं हो सकते - सरल कथन a के साथ समाप्त होने चाहिए; (अर्धविराम) जबकि यौगिक कथन {} (ब्रेसिज़) में संलग्न होते हैं, जिन्हें स्वयं निम्नलिखित अर्धविराम की आवश्यकता नहीं होती है। इस प्रकार उन संदर्भों में जहां एक कथन व्याकरणिक रूप से आवश्यक है, ऐसे कुछ शून्य कथन का उपयोग किया जा सकता है।
शून्य कथन अपने आप में बेकार है, लेकिन व्यापक संदर्भ में इसका वाक्यात्मक उपयोग हो सकता है, उदाहरण के लिए, लूप के संदर्भ में:
while (getchar() != '\n') {}
वैकल्पिक रूप से,
while (getchar() != '\n')
;
या अधिक संक्षेप में:
while (getchar() != '\n');
(ध्यान दें कि अंतिम फॉर्म भ्रमित करने वाला हो सकता है, और इस तरह कुछ कंपाइलरों या कंपाइलर विकल्पों के साथ एक चेतावनी उत्पन्न होती है, क्योंकि पंक्ति के अंत में कोष्ठक के बाद रखे जाने पर अर्धविराम प्रायः फ़ंक्शन कॉल निर्देश के अंत को इंगित करता है)।
उपरोक्त कोड फ़ंक्शन getchar() को तब तक कॉल करना जारी रखता है जब तक कि यह एक \n (न्यूलाइन) वर्ण नहीं लौटाता है, अनिवार्य रूप से मानक इनपुट के वर्तमान रीडिंग स्थान को अगली पंक्ति की शुरुआत में तेजी से अग्रेषित करता है।
फोरट्रान
फोरट्रान में, CONTINUE स्टेटमेंट का उपयोग कुछ संदर्भों में किया जाता है जैसे कि डीओ लूप में अंतिम स्टेटमेंट, हालांकि इसका उपयोग कहीं भी किया जा सकता है, और इसमें कोई कार्यक्षमता नहीं होती है।
जावास्क्रिप्ट
जावास्क्रिप्ट भाषा में कोई अंतर्निहित एनओपी कथन नहीं है। कई कार्यान्वयन संभव हैं:
- उपयोग
;खाली बयान[7] या{}एनओपी (कोड)#सी_एंड_डेरिवेटिव्स उदाहरणों की तरह ही खाली ब्लॉक स्टेटमेंट; - उपयोग
undefinedयाnullअभिव्यक्ति को एक पूर्ण कथन के रूप में (एक अभिव्यक्ति कथन) जब पिछली विधियों को सिंटैक्स द्वारा अनुमति नहीं दी जाती है।
विकल्प, उन स्थितियों में जहां किसी फ़ंक्शन की आवश्यकता होती है, ये हैं:
- उपयोग
Function.prototype()अंतर्निहित फ़ंक्शन, जो किसी भी तर्क को स्वीकार करता है और रिटर्न देता हैundefined;[8] - तृतीय-पक्ष लाइब्रेरी में उपलब्ध एनओपी फ़ंक्शन का उपयोग करें—नीचे देखें;
- एक कस्टम एनओपी फ़ंक्शन को परिभाषित करें, जैसा कि निम्नलिखित उदाहरण में है (ES6 एरो फ़ंक्शन सिंटैक्स का उपयोग करके):
const noop = () => {};
एंगुलरजेएस
AngularJS फ्रेमवर्क angular.noop फ़ंक्शन प्रदान करता है जो कोई ऑपरेशन नहीं करता है।
jQuery
jQuery लाइब्रेरी एक फ़ंक्शन प्रदान करती है jQuery.noop(), जो कुछ नहीं करता.[9]
लोदाश
लॉडैश लाइब्रेरी एक फ़ंक्शन प्रदान करती है _.noop(), जो अपरिभाषित लौटाता है और कुछ नहीं करता।[10]
पास्कल
सी के साथ, ; स्वयं द्वारा प्रयुक्त को पास्कल (प्रोग्रामिंग भाषा) में एक अशक्त कथन के रूप में उपयोग किया जा सकता है। वास्तव में, भाषा की विशिष्टता के कारण, BEGIN/END ब्लॉक में, END कथन से पहले अर्धविराम वैकल्पिक होता है, इस प्रकार वहां प्रयुक्त अर्धविराम अनावश्यक होता है।
इसके अलावा, एक ब्लॉक जिसमें सम्मिलित है BEGIN END; कोई कार्रवाई न होने का संकेत देने के लिए प्लेसहोल्डर के रूप में उपयोग किया जा सकता है, भले ही इसे किसी अन्य BEGIN/END ब्लॉक के अंदर रखा गया हो।
पायथन
पायथन (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा में एक पायथन (प्रोग्रामिंग भाषा)#स्टेटमेंट्स और नियंत्रण प्रवाह| हैpass ऐसा कथन जिसे निष्पादित करने पर कोई प्रभाव नहीं पड़ता है और इस प्रकार यह एनओपी के रूप में कार्य करता है। इसका उपयोग मुख्य रूप से पायथन के ऑफ-साइड नियम | इंडेंटेशन-सेंसिटिव सिंटैक्स के कारण सही सिंटैक्स सुनिश्चित करने के लिए किया जाता है; उदाहरण के लिए किसी कक्षा (कंप्यूटर प्रोग्रामिंग) की परिभाषा के लिए सिंटैक्स के लिए क्लास लॉजिक के साथ एक इंडेंटेड ब्लॉक की आवश्यकता होती है, जिसे इस प्रकार व्यक्त किया जाना चाहिए pass जब यह खाली होना चाहिए.
शेल स्क्रिप्टिंग (बैश, zsh, आदि)
':' [कोलन] कमांड एक शेल बिल्टिन है जिसका एनओपी (कुछ न करने वाला ऑपरेशन) के समान प्रभाव होता है। यह तकनीकी रूप से एनओपी नहीं है, क्योंकि यह विशेष पैरामीटर $? को बदल देता है। (अंतिम कमांड की निकास स्थिति) से 0. इसे 'सही' में निर्मित शेल का पर्याय माना जा सकता है, और इसकी निकास स्थिति सत्य (0) है।[11][12][13]
TeX मैक्रो भाषा (ConTeXt, LaTeX, आदि)
TeX टाइपोग्राफ़िकल सिस्टम की मैक्रो भाषा में है \relax आज्ञा।[14] यह अपने आप में कुछ नहीं करता है, लेकिन इसका उपयोग तत्काल पूर्ववर्ती कमांड को किसी भी बाद के टोकन को पार्स करने से रोकने के लिए किया जा सकता है।[15]
एनओपी प्रोटोकॉल कमांड
टेलनेट जैसे कई प्रोटोकॉल (कंप्यूटिंग) में एक एनओपी कमांड सम्मिलित होता है जिसे क्लाइंट किसी अन्य कार्रवाई का अनुरोध किए बिना सर्वर से प्रतिक्रिया का अनुरोध करने के लिए जारी कर सकता है। इस तरह के कमांड का उपयोग कीपलाइव या सर्वर रिस्पॉन्सिव होने के लिए किया जा सकता है। एक NOOP कमांड निम्नलिखित प्रोटोकॉल का हिस्सा है (यह एक आंशिक सूची है):
- टेलनेट
- फाइल ट्रांसफर प्रोटोकॉल
- सरल डाक स्थानांतरण प्रोटोकॉल
- एक्स विंडो कोर प्रोटोकॉल
- डाकघर प्रोटोकॉल
- नेटवर्क समाचार स्थानांतरण प्रोटोकॉल
- फिंगर प्रोटोकॉल
- इंटरनेट संदेश एक्सेस प्रोटोकॉल
- बिटटोरेंट (प्रोटोकॉल)
ध्यान दें कि सूचीबद्ध अन्य प्रोटोकॉल के विपरीत, IMAP4 NOOP कमांड का एक विशिष्ट उद्देश्य है - यह सर्वर को क्लाइंट को कोई भी लंबित अधिसूचना भेजने की अनुमति देता है।
जबकि अधिकांश टेलनेट या एफ़टीपी सर्वर एनओओपी कमांड का जवाब ओके या +ओके के साथ देते हैं, कुछ प्रोग्रामर ने क्लाइंट के लिए विचित्र प्रतिक्रियाएं जोड़ दी हैं। उदाहरण के लिए, ftpd MINIX का डेमॉन NOOP को संदेश के साथ प्रतिक्रिया देता है:[16]
FTP सर्वर रिटर्न कोड NOOP की सूची आपके लिए भी!
क्रैकिंग
एनओपी अक्सर तब सम्मिलित होते हैं जब सॉफ्टवेयर क्रैकिंग सॉफ़्टवेयर होता है जो सीरियल नंबर, विशिष्ट हार्डवेयर या सॉफ़्टवेयर आवश्यकताओं, हार्डवेयर डोंगल की उपस्थिति या अनुपस्थिति आदि की जांच करता है।[citation needed] यह प्रक्रिया सुरक्षा जांच को बायपास करने के लिए सबरूटीन को बदलकर पूरी की जाती है और इसके बजाय केवल अपेक्षित मूल्य लौटाया जाता है जिसके लिए जाँच की जा रही है। क्योंकि सुरक्षा जांच रूटीन में अधिकांश निर्देश अप्रयुक्त होंगे, इन्हें एनओपी से बदल दिया जाएगा, इस प्रकार बाइनरी में आने वाली हर चीज की स्थिति में बदलाव किए बिना सॉफ्टवेयर की सुरक्षा कार्यक्षमता को हटा दिया जाएगा।
सुरक्षा शोषण
एनओपी ऑपकोड का उपयोग एनओपी स्लाइड बनाने के लिए किया जा सकता है, जो निर्देश सूचक का सटीक मान अनिश्चित होने पर कोड को निष्पादित करने की अनुमति देता है (उदाहरण के लिए, जब बफर ओवरफ्लो के कारण स्टैक पर फ़ंक्शन का रिटर्न पता ओवरराइट हो जाता है)।
यह भी देखें
- कंप्यूटर वास्तुकला
- एचएलटी (x86 निर्देश) - सीपीयू को रोक देता है
- हॉल्ट एंड कैच फायर (कंप्यूटिंग) - सीपीयू को भी रोक देता है
- पहचान फ़ंक्शन - एनओपी के समतुल्य कार्यात्मक प्रोग्रामिंग
- xyzzy (कंप्यूटिंग) - एक कमांड जो कभी-कभी NOP के स्थान पर उपयोग किया जाता है
- IEFBR14 - मेनफ्रेम टॉटोलॉजी
- भराव पाठ
- टिप्पणी (कंप्यूटर प्रोग्रामिंग) - आम तौर पर प्रोग्रामर के लिए एनोटेशन जिन्हें कंपाइलरों और दुभाषियों द्वारा अनदेखा किया जाता है
संदर्भ
- ↑ 1.0 1.1 "Motorola 68000 Programmer's Reference Manual" (PDF).
- ↑ "Intel 64 and IA-32 Architectures Software Developer's Manual: Instruction Set Reference A-Z" (PDF). Retrieved 2012-03-01.
- ↑ "4.8.4. NOP ARM pseudo-instruction". RealView Compilation Tools for BREW Assembler Guide.
- ↑ "5.6.3. NOP Thumb pseudo-instruction". RealView Compilation Tools for BREW Assembler Guide.
- ↑ Weaver, D. L.; Germond, T., eds. (1994). The SPARC Architecture Manual, Version 9 (PDF). ISBN 0-13-825001-4. Archived from the original (PDF) on 2012-01-18. Retrieved 2014-01-09.
Note that NOP is a special case of the SETHI instruction, with imm22 = 0 and rd = 0.
{{cite book}}:|work=ignored (help) - ↑ Ada Reference Manual — null statements. "The execution of a null_statement has no effect."
- ↑ MDN JavaScript reference – empty statement. "The empty statement is a semicolon (
;) indicating that no statement will be executed, even if JavaScript syntax requires one." - ↑ ECMAScript Language Specification – Edition 5.1 – Properties of the Function Prototype Object
- ↑ jQuery.noop() from jQuery API documentation
- ↑ "लोदाश दस्तावेज़ीकरण". lodash.com (in English). Retrieved 2017-12-15.
- ↑ Advanced Bash-Scripting Guide > Chapter 3. Special Characters
- ↑ bash manpage > SHELL BUILTIN COMMANDS
- ↑ zsh manpage (zshbuiltins) > SHELL BUILTIN COMMANDS
- ↑ 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,\relaxmay tell TeX, 'This is the end of what you've been doing'. - ↑ TeX wikibook – relax
- ↑ "ftpd.c". Retrieved 2016-06-19.