NOP (الرمز)
في علوم الحاسوب ، فإن NOP أو no-op أو NOOP (تنطق "no op"؛ اختصار لـ no operation ) هي تعليمات لغة الآلة ورمزها في لغة التجميع ، أو عبارة لغة البرمجة ، أو أمر بروتوكول الحاسوب الذي لا يفعل شيئًا.
تعليمات لغة الآلة
تتضمن بعض مجموعات تعليمات الحاسوب تعليمةً هدفها عدم تغيير حالة أي من السجلات أو علامات الحالة أو الذاكرة التي يمكن للمبرمج الوصول إليها . وغالبًا ما يستغرق تنفيذها عددًا محددًا من دورات الساعة . في بعض مجموعات التعليمات، لا توجد تعليمة NOP صريحة؛ إذ يُمثل اختصار NOP في لغة التجميع تعليمةً عاديةً ذات معلمات تجعلها لا تفعل شيئًا، كما هو الحال في معالجات SPARCsethi 0, %g0 .
يجب ألا يصل أمر NOP إلى الذاكرة، لأن ذلك قد يتسبب في حدوث خطأ في الذاكرة أو خطأ في الصفحة .
تُستخدم تعليمات NOP عادةً لأغراض التوقيت، ولفرض محاذاة الذاكرة ، ولمنع حدوث أخطاء ، ولشغل خانة تأخير التفرع ، ولإلغاء تعليمات موجودة مثل القفز، أو كهدف لتعليمات التنفيذ ، أو كعنصر نائب ليتم استبداله بتعليمات نشطة لاحقًا أثناء تطوير البرنامج (أو لاستبدال التعليمات المحذوفة عندما تكون إعادة التنظيم إشكالية أو تستغرق وقتًا طويلاً). في بعض الحالات، قد يكون لتعليمات NOP آثار جانبية طفيفة؛ على سبيل المثال، في معالجات سلسلة Motorola 68000 ، يتسبب رمز NOP في مزامنة خط الأنابيب . [ 1 ]
فيما يلي تعليمات NOP لبعض بنى المعالجات المركزية:
| بنية وحدة المعالجة المركزية | طريقة تذكيرية للتعليمات | بايت | رمز العملية | ملحوظات |
|---|---|---|---|---|
| عائلة معالجات Intel x86 | NOP | 1 | 0x90 [ 2 ] | 0x90 هو ترميز بايت واحد لـ XCHG AX,AXفي نظام ترميز 16 بت وفي XCHG EAX,EAXنظام ترميز 32 بت. في الوضع الطويل، XCHG RAX,RAXيتطلب بايتين، لأنه سيبدأ ببادئة REX.W، مما يجعل الترميز 0x48 0x90. ومع ذلك، يتم تفسير 0x90 على أنه NOPفي الوضع الطويل بغض النظر عما إذا كان مسبوقًا بـ 0x48 أم لا. [ 2 ] |
متعدد البايتNOP | 2-9 لمعالجات Pentium Pro والمعالجات اللاحقة من Intel، وجميع معالجات AMD64 | 0x66 0x90 0x0F 0x1F 0x00 0x0F 0x1F 0x40 0x00 0x0F 0x1F 0x44 0x00 0x00 0x66 0x0F 0x1F 0x44 0x00 0x00 0x0F 0x1F 0x80 0x00 0x00 0x00 0x00 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 0x66 0x0F 0x1F 0x84 0x00 0x00 0x00 0x00 0x00 [ 2 ] | 0x66 هو بادئة تجاوز حجم المعامل. 0x0F 0x1F عبارة عن رمز عملية NOP ثنائي البايت يأخذ معامل ModR/M لا يتم الوصول إلى أي ذاكرة عليه ولا يتم الكتابة إلى أي سجلات. معاملات ModR/M والمعاملات المضافة إليه هي: 0x00 هو 0x40 0x00 هو 0x44 0x00 0x00 هو 0x80 0x00 0x00 0x00 0x00 هو 0x84 0x00 0x00 0x00 0x00 0x00 هو | |
FNOP | 2 | 0xD9 0xD0 | لا يعمل المعالج المساعد ذو الفاصلة العائمة x87 | |
| إنتل 8008 | LAA | 1 | 0xC0 | قم بتحميل A من A |
| عائلة معالجات إنتل 8048 / MCS-48 | NOP | 1 | 0x00 | |
| عائلة Intel 8051 / MCS-51 | NOP | 1 | 0x00 | |
| إنتل 8080 ، 8085 ، زيلوج Z80 | NOP | 1 | 0x00 | |
| إنتل i860 | NOP | 4 | 0xA0000000 | لا تُجري العملية الأساسية. رمز العملية لـ shl r0,r0,r0، وهي تعليمة لإزاحة سجل الأصفار بالكامل إلى اليسار بمفرده. [ 3 ] |
FNOP | 4 | 0xB0000000 | عملية لا تُجري أي عمليات على الأعداد العشرية. رمز العملية لـ shrd r0,r0,r0، وهي تعليمة إزاحة إلى اليمين تُضاعف عدد الأعداد، وتأخذ سجل الأصفار كمدخلات ومخرجات. [ 3 ] | |
| إنتل i960 | MOV g0,g0 | 4 | 0x5C801610 | انقل السجل العام g0 إلى نفسه. رمز العملية المقترح للحالات التي لا تتطلب أي عملية. [ 4 ] |
| معالج Intel IA-64 ( إيتانيوم ) | (qp) NOP.b imm21 | 41 بت | 0x04000000000 | في معالج IA-64، NOPتحتوي التعليمات على خمسة أشكال، كل منها لا يمكن تنفيذه إلا على نوع معين من وحدات التنفيذ. [ 5 ]تتضمن جميع يستهلك شكل |
(qp) NOP.f imm21 | 41 بت | 0x00008000000 | ||
(qp) NOP.i imm21 | ||||
(qp) NOP.m imm21 | ||||
(qp) NOP.x imm62 | 41+41 بت | 0x00008000000 imm41 | ||
| معالج ARM ذو 32 بت (A32) | NOP | 4 | 0x*320F000 | بنية ARM A32 NOP ("عملية nop حقيقية، بدون أي تبعيات على السجلات"). تم تقديمها مع ARMv6K ( ARM 11 76، الذي صدر عام 2003)، وهي موجودة في جميع معالجات ARM A32 اللاحقة. (تشير العلامة * إلى حقل 4 بت يمكن أن يأخذ أي قيمة أخرى غير 0xF.) [ 6 ] |
MOV r0,r0/NOP | 4 | 0xE1A00000 | يُوصى باستخدام ترميز A32 بدون عمليات للمعالجات القديمة من نوع ARM ذات 32 بت التي تسبق ARMv6K. عادةً ما تُخرج مُجمّعات A32 رمز العملية هذا عند إعطائها رمز "NOP" ما لم يُطلب منها استهداف ARMv6K أو الإصدارات الأحدث من بنية ARM. [ 7 ] [ 8 ] | |
ANDEQ r0,r0,r0 | 4 | 0x00000000 | عملية AND المنطقية r0 مع نفسها إذا كانت متساوية. ترميز لا يُجري أي عملية شائعة الاستخدام نظرًا لبساطة ترميزه. [ 9 ] | |
MOVNV r0,r0 | 4 | 0xF1A00000 | نقل r0 إلى نفسه أبدًا. ترميز قديم لا يُجري أي عملية، كان يُوصى به سابقًا لمعالجات ARM2/ARM3 في أجهزة كمبيوتر Acorn Archimedes القديمة . [ 9 ] [ 10 ] يستخدم رمز الحالة NV ("أبدًا") - الذي تم إيقاف استخدامه منذ عام 1993، [ 11 ] مع إزالة الدعم بالكامل مع ARMv5. [ 12 ] | |
| إبهام | MOV r8,r8/NOP | 2 | 0x46C0 | يُوصى باستخدام ترميز "NOP" في معالجات Thumb القديمة ذات 32 بت التي تسبق معمارية ARMv6T2. عادةً ما تُخرج مُجمّعات T32 هذا الرمز البرمجي عند إعطائها رمز "NOP" ما لم يُطلب منها استهداف معمارية ARMv6T2 أو الإصدارات الأحدث من معمارية ARM Thumb. [ 7 ] [ 8 ] |
| الإبهام-2 (T32) | NOP | 2 | 0xBF00 | تعليمات NOP المعمارية ARM T32 (Thumb-2) ("تعليمات NOP حقيقية، بدون تبعيات على السجلات"). تم تقديمها مع ARMv6T2 ( ARM 11 56، الذي صدر في عام 2003)، وهي موجودة في جميع معالجات ARM T32 اللاحقة. [ 6 ] |
NOP.W | 4 | 0xF3AF8000 | ||
| معالج ARM 64 بت (A64) | NOP | 4 | 0xD503201F | NOP المعماري |
| دي إي سي ألفا | NOP | 4 | 0x47FF041F | عملية NOP للأعداد الصحيحة. رمز العملية لـ BIS r31,r31,r31، وهي تعليمة تقوم بعملية OR الثنائية بين السجل الذي قيمته صفر دائمًا ونفسه. [ 13 ] |
FNOP | 4 | 0x5FFF041F | عملية NOP للأعداد العشرية. رمز العملية لـ CPYS f31,f31,f31، وهي تعليمة تقوم بنسخ الإشارة باستخدام المسجل ذي القيمة 0 دائمًا كمصدر لكل من الإشارة والأس/الكسر، وتخزن النتيجة في المسجل ذي القيمة 0 دائمًا. [ 13 ] | |
UNOP | 4 | 0x2FFE0000 | عملية NOP عامة. LDQ_U r31,0($sp)رمز العملية LDQ_U (تحميل غير محاذٍ) مُصمم خصيصًا في معالجات 21164 والإصدارات الأحدث، بحيث لا يتم الوصول إلى الذاكرة عند استخدامه مع السجل ذي القيمة 0 دائمًا كسجل وجهة. [ 13 ] [ 14 ] يمكن أن يأخذ سجل العنوان والإزاحة أي قيمة، ولكن يُعطى عادةً 0($sp)كمؤشر مكدس + صفر. [ 15 ] | |
| AMD 29k | NOP | 4 | 0x70400101 | رمز العملية لـ aseq 0x40,gr1,gr1، وهي تعليمة تؤكد أن سجل المكدس يساوي نفسه. [ 16 ] |
| AVR | NOP | 2 | 0x0000 | دورة ساعة واحدة |
| COP400 | NOP | 1 | 0x44 | |
| مؤتمر الأطراف الثامن | NOP | 1 | 0xB8 | |
| HP 3000 | NOP | 2 | 0x0000 | تحتوي تعليمات عمليات المكدس في معالج HP 3000 على أربعة بتات ذات أهمية قصوى تساوي صفرًا، متبوعة برمزين لعمليات المكدس، كل منهما مكون من 6 بتات، مع استخدام NOP (0) للمكدس لإضافة حشو عند الحاجة. 0x0000 تعني NOP، NOP. [ 17 ] |
| هايبرستون E1 | NOP | 2 | 0x0300 | رمز العملية لـ CHK L0,L0، وهي تعليمة فحص النطاق التي تُنتج استثناءً إذا كان سجل L0 أكبر من نفسه. [ 18 ] |
| أنظمة IBM System/360 و IBM System/370 و IBM System/390 و z/Architecture و UNIVAC Series 90 | NOP | 4 | 0x47000000 أو 0x470nnnnn أو 0x47n0nnnn حيث "n" هي أي قيمة مكونة من 4 بتات. | إن NOP ("No-Op") و NOPR ("No-Op Register") عبارة عن مجموعة فرعية من تعليمات "Branch on Condition" أو "Branch on Condition Register" على التوالي؛ كلا الإصدارين لديهما خياران لتوليد NO-OP. في حالة كل من تعليمات NOP و NOPR، فإن الصفر الأول في البايت الثاني هو قيمة "القناع"، وهو الشرط المراد اختباره مثل المساواة، وعدم المساواة، والارتفاع، والانخفاض، وما إلى ذلك. إذا كان القناع 0، فلن يحدث أي تفرع. في حالة تعليمة NOPR، تمثل القيمة الثانية في البايت الثاني المسجل الذي سيتم التفرع إليه. إذا تم اختيار المسجل 0، فلن يحدث أي تفرع بغض النظر عن قيمة القناع. وبالتالي، إذا كانت أي من القيمتين في البايت الثاني تساوي 0، فلن يحدث التفرع. إذا كانت القيمة 0 الأولى في البايت الثاني تساوي 0، فإن قيمة القيمة الثانية في البايت الثاني غير مهمة في معظم المعالجات؛ ومع ذلك، في معالج IBM System/360 Model 91 ، إذا كانت تلك القيمة تشير إلى المسجل 15، فستنتظر التعليمة حتى تكتمل جميع التعليمات التي تم فك تشفيرها مسبقًا قبل المتابعة. [ 19 ] في حالة تعليمة NOP، تمثل القيمة الثانية في البايت الثاني سجل "الأساس" الذي يجمع بين سجل الأساس وسجل الإزاحة وعنوان الإزاحة. إذا كان سجل الأساس يساوي صفرًا أيضًا، فلن يتم تنفيذ التفرع بغض النظر عن قيمة سجل الإزاحة أو عنوان الإزاحة. |
NOPR | 2 | 0x0700 أو 0x070n أو 0x07n0 حيث "n" هي أي قيمة مكونة من 4 بتات. | ||
| لونغ آرتش | NOP | 4 | 0x03400000 | رمز العملية لـ andi r0,r0,0، وهي تعليمة تقوم بعملية AND منطقية بين المسجل ذي القيمة 0 دائماً والصفر. [ 20 ] |
| مايكروبلايز | NOP | 4 | 0x80000000 | رمز العملية لـ or r0,r0,r0، وهي تعليمة تقوم بعملية OR الثنائية بين السجل الذي قيمته صفر دائمًا ونفسه. [ 21 ] |
| نظام MIPS | NOP | 4 | 0x00000000 | يرمز إلى sll r0,r0,0، بمعنى: قم بإزاحة السجل 0 منطقياً بمقدار صفر بت إلى اليسار وتخزين النتيجة في السجل 0. يتم تجاهل عمليات الكتابة إلى السجل 0؛ فهو يحتوي دائماً على 0. |
| MIPS-X | NOP | 4 | 0x60000019 | (رمز العملية الموسع لـ add r0,r0,r0) |
| مزج | NOP | كلمة واحدة | ± * * * * 0 | تُعتبر البايتات * اختيارية، ويمكن أن تتراوح قيمتها بين 0 وأقصى بايت (يجب أن يكون ضمن النطاق 63-99). يستخدم MIX تمثيل الإشارة والمقدار. |
| مزيج MMIX | SWYM | 4 | 0xFD****** | يرمز اختصار SWYM إلى "التعاطف مع آلاتك". ويمكن اختيار الأرقام * بشكل عشوائي. |
| تقنية MOS 65xx (مثل 6502 )، WDC 65C816 | NOP | 1 | 0xEA | تستهلك عملية NOP دورتين من دورات الساعة. تم تحويل رموز العمليات غير المحددة في إصدارات NMOS من عائلة 65xx إلى عمليات NOP بأطوال تعليمات وأوقات دورات مختلفة في 65C02 . |
| موتورولا 6800 | NOP | 1 | 0x01 | |
| عائلة موتورولا 68000 | NOP | 2 | 0x4E71 | يؤدي هذا إلى مزامنة خط الأنابيب ومنع تداخل التعليمات. [ 1 ] : 3-21 [ 1 ] : 4-147 |
TRAPF، TRAPF.W #data،TRAPF.L #data | 2، 4، 6 | 0x51FC، 0x51FA 0xnnnn، 0x51FB 0xnnnn 0xnnnn | قم بتعطيل العملية إذا كانت النتيجة خاطئة. رمز العملية المقترح لمعالجات 68020 وما بعدها من معالجات 68k في حال الرغبة بتنفيذ عملية NOP بدون مزامنة خط الأنابيب. (يمكن أن تأخذ قيمة 'n' أي قيمة من 4 بتات). [ 1 ] : 3-21 [ 1 ] : 4-189 | |
| موتورولا 6809 | NOP | 1 | 0x12 | |
| عائلة موتورولا 88000 | BCND lt0,r0,X، ADD r0,r0,r0،TB1 0,r0,x | 4 | 0xE980xxxx، 0xF4007000، 0xF000D8xx | تفرع إذا كانت قيمة المسجل ذي القيمة 0 دائمًا أقل من 0، أضف قيمة المسجل ذي القيمة 0 دائمًا إلى نفسه، أوقف العملية إذا كانت قيمة البت 0 من المسجل ذي القيمة 0 دائمًا تساوي 1 (عملية التسلسل). [ 22 ] |
| MSP430 | NOP | 2 | 0x4303 | رمز العملية لـ mov #0,r3or mov r3,r3، وهي تعليمة تقوم بنقل البيانات من "سجل توليد ثابت" إلى نفسه. [ 23 ] |
| PA-RISC | NOP | 4 | 0x08000240 | رمز العملية لـ OR 0,0,0. [ 24 ] |
LDI 26,0 | 4 | 0x34000034 | تعليمات NOP المتناظرة - أي التعليمات التي تُنفذ كـ NOP بغض النظر عما إذا كان ترتيب البايتات يُفسر على أنه little-endian أو big-endian . تتطلب بعض تعليمات نظام PA-RISC أن تتبعها سبع تعليمات NOP متناظرة. [ 24 ] | |
| PDP-6 ، PDP-10 | JFCL 0,(عادي)JUMP, SETA, SETAI, CAI, TRN, TLN | كلمة واحدة | 25500******* (ثماني) | لا تقفز أبدًا، لا تقفز أبدًا، لا تضبط شيئًا، لا تتخطى أبدًا |
| PDP-11 | NOP | 2 | 000240 (ثماني) | لا تقم بمسح أي من رموز الحالة |
| متحكم دقيق PIC | NOP | 12 بت | 0b000000000000 | يختلف عدد البتات في عملية NOP باختلاف السلسلة. |
| باور ، باور بي سي ، باور آي إس إيه | NOP | 4 | 0x60000000 | رمز العملية لـ ori r0,r0,0. في إطار بنية مجموعة تعليمات Power ISA، تُسبب العديد من ترميزات التعليمات التي تبدو وكأنها لا تُنفذ أي عملية آثارًا جانبية كبيرة، لذا
|
| RISC-V | NOP | 4 | 0x00000013 | ADDI x0, x0, 0. التعليمات الأخرى لا تقوم بأي عملية، لكن RISC-V يستخدمها لترميز تلميحات المعالج؛ هذه التعليمات هي الوحيدة التي لن يتم استخدامها أبدًا كتلميح للمعالج. |
C.NOP | 2 | 0x0001 | C.ADDI x0, 0. متوفر فقط على وحدات المعالجة المركزية RISC-V التي تدعم امتداد "C" (التعليمات المضغوطة). [ 29 ] | |
| Signetics 8X300 | MOV AUX, AUX | 2 (16 بت) | 0x0000 | انقل AUX إلى AUX بدون تدوير |
| سبارك | NOP | 4 | 0x01000000 | يشير إلى الذي يقوم بتصفير السجل sethi 0, %g0الموصول بالصفر [ 30 ]%g0 |
| صن بلس إس+كور | NOP | 4 | 0x80008000 | [ 31 ] |
NOP! | 2 | 0x0000 | ||
| سوبر إتش | NOP | 2 | 0x0009 | [ 32 ] |
NOP | 4 | 0x6FF0FFF0 | NOP ذو 32 بت، موجود فقط في SH-5. [ 33 ] | |
| تينسيليكا إكستنسا | NOP،_NOP | 3 | 0x0020F0 | قد تقوم برامج التجميع بتحويل "NOP" إلى "NOP.N" - ويمكن استخدام الاختصار "_NOP" (مع شرطة سفلية في البداية) لمنع هذا التحويل. [ 34 ] |
NOP.N | 2 | 0xF03D | ||
| فاكس | NOP | 1 | 0x01 | يعتمد التأخير على نوع المعالج. |
| WD16 | NOP | 2 | 0x0000 | |
من وجهة نظر تصميم الأجهزة، غالبًا ما يتم تصميم المناطق غير المعينة من ناقل البيانات لإرجاع أصفار؛ نظرًا لأن سلوك الانزلاق NOP مرغوب فيه في كثير من الأحيان، فإنه يعطي تحيزًا لبرمجته باستخدام رمز العملية الذي يحتوي على جميع الأصفار.
شفرة
تُعتبر الدالة أو سلسلة عبارات لغة البرمجة عبارة NOP أو عبارة فارغة (null) إذا لم يكن لها أي تأثير. وقد تتطلب بعض لغات البرمجة عبارات فارغة في سياقات معينة.
آدا
في لغة آدا ، nullتُستخدم هذه العبارة كأمر لا يُنفذ. [ 35 ] ولأنّ قواعد اللغة تمنع أن تكون عبارات التحكم أو الدوال فارغة، nullيجب استخدام هذه العبارة لتحديد عدم الحاجة إلى أي إجراء. (وبالتالي، إذا نسي المبرمج كتابة سلسلة من العبارات، فسيفشل البرنامج في الترجمة).
ج ومشتقاته
أبسط عبارة NOP في لغة C هي عبارة null ، وهي مجرد فاصلة منقوطة في سياق يتطلب عبارة.
معظم مترجمات لغة C لا تولد أي رمز للعبارات الفارغة، وذلك لأسباب تاريخية وأخرى تتعلق بالأداء.
؛
الكتلة الفارغة (العبارة المركبة) هي أيضًا NOP، وقد تكون أكثر قابلية للقراءة، ولكن لن يتم إنشاء أي كود لها بواسطة المترجم.
{}في بعض الحالات، مثل جسم الدالة، يجب استخدام كتلة برمجية، ولكن يمكن أن تكون هذه الكتلة فارغة. في لغة C، لا يمكن أن تكون العبارات فارغة؛ إذ يجب أن تنتهي العبارات البسيطة بفاصلة ;منقوطة، بينما تُحاط العبارات المركبة {}بأقواس معقوفة، والتي لا تحتاج بدورها إلى فاصلة منقوطة. لذا، في السياقات التي تتطلب فيها قواعد اللغة وجود عبارة، يمكن استخدام عبارة فارغة.
العبارة الفارغة عديمة الفائدة بحد ذاتها، ولكن يمكن أن يكون لها استخدام نحوي في سياق أوسع، على سبيل المثال، ضمن سياق حلقة تكرارية:
بينما ( getchar () != '\n' ) {}بدلاً عن ذلك،
بينما ( getchar () != '\n' ) ;أو باختصار أكثر:
بينما ( getchar () != '\n' );قد يؤدي الشكل الأخير إلى ظهور تحذير مع بعض المترجمات أو خيارات المترجم، حيث أن الفاصلة المنقوطة الموضوعة بعد قوس في نهاية السطر تشير عادة إلى نهاية تعبير استدعاء الدالة.
يستمر الكود أعلاه في استدعاء الدالة getchar()حتى تُرجع \nحرف سطر جديد، مما يؤدي أساسًا إلى تسريع موقع القراءة الحالي للإدخال القياسي إلى بداية السطر التالي.
إلى جانب عبارة NOP، تستخدم برامج لغة C أحيانًا تعبير NOP ؛ على سبيل المثال، يشترط معيار C أنه في حال NDEBUGتعريف الماكرو قبل ملف الرأس، يُعرَّف الماكرو المُعرَّف بواسطته كتعبير NOP . ويمكن استخدام تقنيات مماثلة في كود المستخدم؛ على سبيل المثال، انظر إلى الكود التالي الذي يُعرِّف ماكرو على دالة prefetch المضمنة التي يوفرها GCC، والتي تُعرَّف كتعبير NOP إذا لم تكن متاحة:<assert.h>assert()((void)0)
#ifdef __GNUC__ #define prefetch(addr, ...) __builtin_prefetch((addr) __VA_OPT__ (,) __VA_ARGS__) #else #define prefetch(addr, ...) ((void)0) #endifفورتران
في لغة فورتران ، CONTINUEيتم استخدام العبارة في بعض السياقات مثل العبارة الأخيرة في حلقة DO، على الرغم من أنه يمكن استخدامها في أي مكان، وليس لها أي وظائف.
جافا سكريبت
لا تحتوي لغة جافا سكريبت على عبارة NOP مدمجة. توجد العديد من التطبيقات الممكنة:
- استخدم
;العبارة الفارغة [ 36 ] أو عبارة الكتلة{}الفارغة بنفس الطريقة كما في أمثلة C والمشتقات ؛ - استخدم التعبير
undefinedأو العبارةnullكعبارة كاملة ( عبارة تعبيرية ) عندما لا تسمح الصيغة بالطرق السابقة.
البدائل، في الحالات التي تتطلب وظيفة معينة، هي:
- استخدم الدالة
Function.prototype()المدمجة التي تقبل أي وسيطات وتعيد قيمةundefined؛ [ 37 ] - استخدم دالة NOP المتوفرة في مكتبة خارجية —انظر أدناه؛
- قم بتعريف دالة NOP مخصصة، كما في المثال التالي (باستخدام صيغة دالة السهم ES6 ):
const noop = () => {};AngularJS
يوفر إطار عمل AngularJS وظيفة angular.noop التي لا تقوم بأي عمليات.
jQuery
لوداش
توفر مكتبة Lodash دالةً _.noop()تُرجع قيمة غير مُعرَّفة ولا تفعل شيئًا. [ 39 ]
باسكال
كما هو الحال في لغة C، يمكن استخدام الفاصلة المنقوطة (;) وحدها كعبارة فارغة في لغة باسكال . في الواقع، وبسبب مواصفات اللغة، فإن الفاصلة المنقوطة اختيارية قبل عبارة END في كتلة BEGIN/END، وبالتالي فإن استخدامها هناك غير ضروري.
BEGIN END;كما يمكن استخدام كتلة تتكون من كعنصر نائب للإشارة إلى عدم وجود إجراء، حتى لو تم وضعها داخل كتلة BEGIN / END أخرى.
بايثون
تحتوي لغة البرمجة بايثون على passعبارة لا تُحدث أي تأثير عند تنفيذها، وبالتالي تُعتبر بمثابة NOP. تُستخدم هذه العبارة بشكل أساسي لضمان صحة بناء الجملة نظرًا لحساسية بايثون للمسافات البادئة ؛ فعلى سبيل المثال، يتطلب تعريف فئة ما كتلة مُسافة بادئة تحتوي على منطق الفئة، والتي يجب التعبير عنها بـ `n` passعندما يجب أن تكون فارغة.
كتابة البرامج النصية (bash، zsh، إلخ.)
الأمر ` :` [colon]` هو أمر مدمج في الصدفة له تأثير مشابه لأمر "NOP" (عملية لا تفعل شيئًا). وهو ليس من الناحية التقنية أمر NOP، لأنه يُغيّر المعامل الخاص $? (حالة خروج الأمر الأخير) إلى 0. ويمكن اعتباره مرادفًا للأمر المدمج `true` في الصدفة، وحالة خروجه هي true (0). [ 40 ] [ 41 ] [ 42 ]
لغة ماكرو TeX (ConTeXt، LaTeX، إلخ)
تحتوي لغة الماكرو الخاصة بنظام TeX الطباعي على الأمر .\relax [ 43 ] لا يقوم هذا الأمر بأي شيء بمفرده، ولكن يمكن استخدامه لمنع الأمر السابق له مباشرةً من تحليل أي رموز لاحقة. [ 44 ]
أوامر بروتوكول NOP
تتضمن العديد من بروتوكولات الحاسوب ، مثل Telnet ، أمر NOP الذي يمكن للعميل إصداره لطلب استجابة من الخادم دون طلب أي إجراءات أخرى. يُستخدم هذا الأمر للتأكد من استمرار الاتصال أو استجابة الخادم. يُعد أمر NOOP جزءًا من البروتوكولات التالية ( هذه قائمة جزئية ):
بخلاف البروتوكولات الأخرى المدرجة، فإن أمر IMAP4 NOOP له غرض محدد - فهو يسمح للخادم بإرسال أي إشعارات معلقة إلى العميل.
بينما تستجيب معظم خوادم Telnet أو FTP لأمر NOOP بـ "OK" أو "+OK"، أضاف بعض المبرمجين استجابات غريبة للعميل. على سبيل المثال، يستجيب ftpdبرنامج MINIX الخفي لأمر NOOP بالرسالة: [ 45 ]
200 دولار لك أيضاً!
التصدع
تُستخدم تعليمات NOP غالبًا في اختراق البرامج التي تتحقق من الأرقام التسلسلية، أو متطلبات الأجهزة أو البرامج المحددة، أو وجود أو عدم وجود أجهزة حماية ، وما إلى ذلك، وذلك على شكل شريحة NOP . تتم هذه العملية عن طريق تعديل الدوال والإجراءات الفرعية لتجاوز فحوصات الأمان، واستبدالها ببساطة بإرجاع القيمة المتوقعة التي يتم التحقق منها. ولأن معظم التعليمات في روتين فحص الأمان ستكون غير مستخدمة، فسيتم استبدالها بتعليمات NOP، مما يؤدي إلى إزالة وظيفة الأمان للبرنامج دون تغيير ترتيب كل ما يليها في الملف التنفيذي.
ثغرات أمنية
يمكن استخدام رمز NOP لتشكيل انزلاق NOP ، مما يسمح بتنفيذ التعليمات البرمجية عندما تكون القيمة الدقيقة لمؤشر التعليمات غير محددة (على سبيل المثال، عندما يتسبب تجاوز المخزن المؤقت في الكتابة فوق عنوان إرجاع الدالة على المكدس).
انظر أيضاً
- التعليقات (برمجة الحاسوب) - تعليقات توضيحية موجهة عمومًا للمبرمجين، تتجاهلها المترجمات والمفسرات
- هندسة الحاسوب
- نص حشو
- إيقاف وإشعال النار – يؤدي أيضًا إلى إيقاف وحدة المعالجة المركزية مؤقتًا
- HLT (تعليمات x86) – توقف وحدة المعالجة المركزية مؤقتًا
- دالة الهوية – المكافئ البرمجي الوظيفي لـ NOP
- IEFBR14 – تكرار الكلام في الحواسيب المركزية
- xyzzy (في مجال الحوسبة) – أمر يُستخدم أحيانًا بدلاً من NOP
- قوائم تعليمات X86# تمت إضافتها في معالجات الفئة P5/P6 –
NOPL، القائمة الرسمية الطويلةNOP
مراجع
- 1 2 3 4 5 دليل مرجعي لمبرمج موتورولا 68000 (PDF) .
- 1 2 3 4 "دليل مطوري برامج معمارية Intel 64 و IA-32: مرجع مجموعة التعليمات AZ" . تم الاطلاع عليه بتاريخ 1 مارس 2012 .
- 1 2 دليل مرجعي لمبرمج المعالج الدقيق i860 ذو 64 بت (ملف PDF) . إنتل. فبراير 1989. الصفحات 68، 172. رقم الطلب 240329-002.
- ↑ دليل مطوري المعالج الدقيق i960 Hx (ملف PDF) . إنتل. سبتمبر 1998. انظر الملحق ب في الصفحة 487 والملحق ج في الصفحات 495-497 لترميز التعليمات، والملحق هـ.2.7.8 في الصفحة 575 لاستخدام MOV g0,g0 كعملية حشو لا تفعل شيئًا. رقم الطلب 272484-002. مؤرشف من الأصل (ملف PDF) في 15 أبريل 2003.
- ↑ دليل مطوري برامج معمارية إنتل إيتانيوم، الإصدار 2.3 (ملف PDF) . إنتل. مايو 2010. الكتاب 3، القسم 2.2 في الصفحة 1092، القسم 4.3.4.1 في الصفحة 1218، القسم 4.4.11 في الصفحة 1248، القسم 4.5.3.2 في الصفحة 1255، القسم 4.6.9.2 في الصفحة 1264، والقسم 4.7.4 في الصفحة 1267. مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 8 ديسمبر 2011.
- 1 2 دليل مرجعي لهندسة ARM، إصدار ARMv7-A وARMv7-R . ARM. 29 مارس 2018. القسم A8.8.120 في الصفحة 511. ARM DDI 0406C.d. مؤرشف من الأصل في 27 سبتمبر 2023.
- دليل مرجعي لمجموعة أدوات تطوير برمجيات ARM، الإصدار 2.50 . ARM. نوفمبر 1998. انظر القسمين 5.5.6 و5.6.4 للاطلاع على تعليمات NOP بلغة التجميع ARM/Thumb. ARM DUI 0041C. مؤرشف من الأصل في 1 يونيو 2022.
- 1 2 "تعليمات NOP" . مرجع مُجمِّع سلسلة أدوات مُصرِّف ARM الإصدار 5.03 . ARM.
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - 1 2 أو. سميث (12 ديسمبر 1996). "معالج StrongARM يضاعف السرعة" . مجموعة الأخبار : comp.sys.arm . مؤرشف من الأصل في 16 مارس 2025.
- ↑ إصدار Acorn Assembler 2 (ملف PDF) . شركة Acorn Computers. مايو 1991. تم إدراج MOVNV في الصفحة 218. مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 25 أكتوبر 2018.
- ↑ معالج ARM610 32 بت RISC (ملف PDF) . ARM. أغسطس 1993. ص 20. ARM DDI 0004D.
- ↑ دليل مرجعي لهندسة ARM (ملف PDF) . ARM. فبراير 2000. القسم 3.2.1 في الصفحة 69. ARM DDI 0100D. مؤرشف (ملف PDF) من الأصل في 16 مارس 2025.
- 1 2 3 دليل معمارية ألفا، الإصدار 4 (ملف PDF) . كومباك. أكتوبر 1998. انظر القسم أ.4.4.1 في الصفحة 285 للاطلاع على نماذج NOP، والقسمين 3.3 في الصفحة 50 و ج.1 في الصفحة 303 للاطلاع على ترميزات التعليمات. رقم الطلب: EC–QD2KC–TE. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 27 أغسطس 2004.
- ↑ جيه إتش إدموندسون (أبريل 1995). "تنفيذ التعليمات فائقة القياس في المعالج الدقيق ألفا 21164" (ملف PDF) . ص 6. مؤرشف (ملف PDF) من الأصل في 5 يناير 2023.
- ↑ دليل مبرمج لغة التجميع لنظام يونكس الرقمي (ملف PDF) . ديجيتال. مارس 1996. انظر القسم C.7 في الصفحة 219. رقم الطلب AA-PS31D-TE. مؤرشف من النسخة الأصلية (ملف PDF) في 1 أكتوبر 2000.
- ↑ AMD، "دليل مستخدم المعالج الدقيق Am29050" (PDF) . 1991. الصفحات 223، 257.
- ↑ "2. تعليمات عملية المكدس §2-77 NOP لا عملية." دليل مرجعي لمجموعة تعليمات الآلة (PDF) . أنظمة حاسوب HP 3000. هيوليت-باكارد. يونيو 1984. الصفحات 2-23 (الصفحة 50 من ملف PDF). 30000-90022 – عبر BitSavers.
- ↑ Hyperstone Electronics GmbH، دليل مستخدم المعالج الدقيق Hyperstone E1-32/E1-16 32 بت ، الإصدار 03/96، الصفحات 35، 38، 70.
- ↑ "الخصائص الوظيفية لنظام IBM System/360 موديل 91" (ملف PDF) . مكتبة مراجع الأنظمة. IBM. صفحة 16. تاريخ الاسترجاع: 17 يناير 2025 .
- ↑ دليل مرجعي لـ LoongArch، المجلد 1: البنية الأساسية، الإصدار 1.10 (ملف PDF) . لونغسون. القسم 2.2.1.10 في الصفحة 23 والملحق ب في الصفحة 190.
- ↑ دليل مرجعي لمعالج MicroBlaze من AMD/Xilinx، UG984 (الإصدار 2021.2)، 27 أكتوبر 2021، صفحة 281
- ↑ مواصفات تصميم المعالج الدقيق MC88110 ذو 32 بت، الإصدار 2.0 (ملف PDF) . موتورولا. انظر القسم 2.1.2.3 في الصفحة 11 للاطلاع على قائمة بتعليمات NOP الموصى بها، والصفحات 10 و170 و171 للاطلاع على ترميزات التعليمات. مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 19 مارس 2025.
- ↑ دليل مستخدم عائلة MSP430F2xx وMSP430G2xx (ملف PDF) . شركة تكساس إنسترومنتس. ديسمبر 2004. الأقسام 3.24 في الصفحة 47، و3.4.5 في الصفحة 63، و3.4.6.33 في الصفحة 98. مؤرشف (ملف PDF) من النسخة الأصلية في 1 سبتمبر 2022.
- 1 2 بنية PA-RISC 2.0 (ملف PDF) . هيوليت-باكارد . 1995. الصفحات 2-21 ، 7-103 . مؤرشف من الأصل (ملف PDF) في 21 يونيو 2020.
- ↑ Power ISA الإصدار 3.1C (ملف PDF) . مؤسسة OpenPOWER. 26 مايو 2024. الكتاب 1، القسم 3.3.13، الصفحات 97-99؛ الكتاب 2، القسم 3.2، الصفحة 987، والقسم 4.3.3، الصفحة 1005؛ الكتاب 3، القسم 5.4.3، الصفحة 1100، والقسم 9.2.1، الصفحة 1244، والقسم 11.3، الصفحة 1253. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 10 سبتمبر 2024.
- ↑ دليل برمجة محرك النطاق العريض الخلوي، الإصدار 1.1 (ملف PDF) . شركة IBM. 24 أبريل 2007. القسم 10.6.2.2 في الصفحة 316. مؤرشف (ملف PDF) من النسخة الأصلية في 24 مايو 2008.
- ↑ "موجز SCINET: التجميع لـ Power6" (ملف PDF) . IBM. فبراير 2009. الشريحة 9. مؤرشف (ملف PDF) من الأصل في 23 مارس 2025.
- ↑ دليل مستخدم معالج POWER8 للوحدة أحادية الشريحة، الإصدار 1.3 (ملف PDF) . شركة IBM . 16 مارس 2016. القسم 10.1.8 في الصفحة 209. مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 28 ديسمبر 2018.
- ↑ دليل مجموعة تعليمات RISC-V، المجلد 1: مجموعة تعليمات مستوى المستخدم، الإصدار 2.2 (ملف PDF) . مؤسسة RISC-V . 7 مايو 2017. ص 79.
- ↑ ويفر، د. ل.؛ جيرموند، ت.، محرران. (1994). دليل بنية SPARC، الإصدار 9 (PDF) . برنتيس هول . ISBN 0-13-825001-4أُرشف من النسخة الأصلية (PDF) بتاريخ 18 يناير 2012. تم الاطلاع عليه بتاريخ 9 يناير 2014.
لاحظ أن NOP حالة خاصة من تعليمة SETHI، حيث imm22 = 0 و rd = 0.
- ↑ "دليل برمجة S+core7 الإصدار 1.4" (ملف PDF) . شركة Sunplus Technology المحدودة. 22 مارس 2007. الصفحات 12، 90، 166. مؤرشف من النسخة الأصلية (ملف PDF) في 15 نوفمبر 2012.
- ↑ معالج SH-5، المجلد 3: SHcompact (ملف PDF) . شركة SuperH، 22 فبراير 2002، صفحة 219. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 20 مارس 2009.
- ↑ معالج SH-5، المجلد 2: SHmedia (ملف PDF) . شركة SuperH، 22 فبراير 2000، صفحة 260. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 20 مارس 2009.
- ↑ دليل مرجعي لبنية مجموعة تعليمات Xtensa (ملف PDF) . تينسيليكا. أبريل 2010. الصفحات 459-460 . مؤرشف (ملف PDF) من الأصل في 5 مارس 2016.
- ↑ دليل مرجعي للغة آدا . الدلالات الديناميكية.
لا يؤثر تنفيذ عبارة فارغة.
- ↑ "عبارة فارغة" . مرجع جافا سكريبت لشبكة مطوري موزيلا . 13 مارس 2025.
العبارة الفارغة هي فاصلة منقوطة (
) تشير إلى أنه لن يتم تنفيذ أي عبارة، حتى لو كان بناء جملة جافا سكريبت يتطلب واحدة.
; - ↑ "خصائص كائن النموذج الأولي للدالة" . مواصفات لغة ECMAScript - الإصدار 5.1 .
- ↑ jQuery.noop() من وثائق واجهة برمجة تطبيقات jQuery
- ↑ "وثائق لوداش" . lodash.com . تم الاطلاع عليه بتاريخ 15-12-2017 .
- ↑ "الفصل 3. الأحرف الخاصة" . دليل متقدم لكتابة البرامج النصية بلغة باش .
- ↑ صفحة دليل باش > أوامر شل المدمجة
- ↑ صفحة دليل zsh (أوامر zsh المدمجة) > أوامر شل المدمجة
- ↑ باوسوم، ديفيد (2002). "تسلسلات التحكم الأولية في TeX". دليل TeX المرجعي . دار نشر كلوير الأكاديمية . تم الاطلاع عليه في 1 أبريل 2020.
وفقًا لكتاب TeXbook، "لا يفعل TeX شيئًا" عند مصادفته
.في الواقع،
قد يُخبر TeX، "هذه نهاية ما كنت تفعله".
\relax\relax - ↑ كتاب ويكي TeX – استرخِ
- ↑ "ftpd.c" . تم الاطلاع عليه بتاريخ 19-06-2016 .
- لغة الآلة
- اختصارات الحوسبة
- تعليمات X86
