एनओपी (कोड)

From Vigyanwiki
Revision as of 14:48, 6 July 2023 by alpha>Indicwiki (Created page with "{{Short description|Machine instruction that indicates to a computer to do nothing}} {{about|the "No Operation" computer instruction|Null statement|Null function|Do nothing in...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

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

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

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

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

CPU architecture Instruction mnemonic Bytes Opcode Notes
Intel x86 CPU family 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.
Intel 8051 / MCS-51 family NOP 1 0x00
ARM A32 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]
ARM T32 (16 bit) 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]
ARM T32 (32 bit) NOP 4 0xF3AF 8000
ARM A64 (64 bit) NOP 4 0xD503201F
AVR NOP 2 0x0000 one clock cycle
IBM System/360, IBM System/370, IBM System/390, z/Architecture, UNIVAC Series 90 NOP 4 0x47000000 or 0x470nnnnn or 0x47n0nnnn where "n" is any 4-bit 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-bit value.
SuperH NOP 2 0x0009
MIPS NOP 4 0x00000000 Stands for sll r0,r0,0, meaning: Logically shift register 0 zero bits to the left and store the result in register 0. Writes to register 0 are ignored; it always contains 0.
MIPS-X NOP 4 0x60000019 (extended opcode for add r0,r0,r0)
MIX NOP 1 word ± * * * * 0 The * bytes are arbitrary, and can be anything from 0 to the maximum byte (required to be in the range 63-99). MIX uses sign-magnitude representation.
MMIX SWYM 4 0xFD****** SWYM stands for "Sympathize with your machinery". The * digits can be chosen arbitrarily.
Motorola 68000 family NOP 2 0x4E71 This synchronizes the pipeline and prevents instruction overlap.[1]
Motorola 6809 NOP 1 0x12
MOS Technology 65xx (e.g. 6502) NOP 1 0xEA NOP consumes two clock cycles. Undefined opcodes in the NMOS versions of the 65xx family were converted to be NOPs of varying instruction lengths and cycle times in the 65C02.
PowerPC NOP 4 0x60000000 (extended opcode for ori r0,r0,0)
PIC microcontroller NOP 12 bits 0b000000000000 MOVW 0,W
RISC-V NOP 4 0x00000013 ADDI x0, x0, 0
SPARC NOP 4 0x01000000 Stands for sethi 0, %g0 which zeroes the hardwired-to-zero %g0 register[5]
Z80 NOP 1 0x00 There are some other instructions without any effect (and the same timing): LD A, A, LD B, B etc.
PDP-10 JFCL 0, (conventional)
JUMP, SETA, SETAI, CAI, TRN, TLN
1 word 25500******* (octal) Jump never
Jump never, set nothing, skip never
PDP-11 NOP 16 bits 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] यह प्रक्रिया सुरक्षा जांच को बायपास करने के लिए सबरूटीन को बदलकर पूरी की जाती है और इसके बजाय केवल अपेक्षित मूल्य लौटाया जाता है जिसके लिए जाँच की जा रही है। क्योंकि सुरक्षा जांच रूटीन में अधिकांश निर्देश अप्रयुक्त होंगे, इन्हें एनओपी से बदल दिया जाएगा, इस प्रकार बाइनरी में आने वाली हर चीज की स्थिति में बदलाव किए बिना सॉफ्टवेयर की सुरक्षा कार्यक्षमता को हटा दिया जाएगा।

सुरक्षा शोषण

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

यह भी देखें

संदर्भ

  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. "4.8.4. NOP ARM pseudo-instruction". RealView Compilation Tools for BREW Assembler Guide.
  4. "5.6.3. NOP Thumb pseudo-instruction". RealView Compilation Tools for BREW Assembler Guide.
  5. 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)
  6. Ada Reference Manual — null statements. "The execution of a null_statement has no effect."
  7. MDN JavaScript reference – empty statement. "The empty statement is a semicolon (;) indicating that no statement will be executed, even if JavaScript syntax requires one."
  8. ECMAScript Language Specification – Edition 5.1 – Properties of the Function Prototype Object
  9. jQuery.noop() from jQuery API documentation
  10. "लोदाश दस्तावेज़ीकरण". lodash.com (in English). Retrieved 2017-12-15.
  11. Advanced Bash-Scripting Guide > Chapter 3. Special Characters
  12. bash manpage > SHELL BUILTIN COMMANDS
  13. zsh manpage (zshbuiltins) > SHELL BUILTIN COMMANDS
  14. 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'.
  15. TeX wikibook – relax
  16. "ftpd.c". Retrieved 2016-06-19.