قائمة تعليمات بايت كود JVM
هذه قائمة بالتعليمات التي تُشكّل بايت كود JVM، وهي لغة الآلة المجردة التي تُنفّذها آلة جافا الافتراضية . [ 1 ] يُصدر بايت كود JVM بواسطة مُجمّعات برمجية مُصممة للغات التي تعمل على منصة جافا ، وأبرزها جافا .
تُشكّل بايت كود JVM محتوى تعليمات الدوال. عند التنفيذ، تُخصّص لكل دالة إطار خاص بها يحتوي على مكدس، وسجلات متغيرات محلية، وبيانات أخرى. تعمل معظم التعليمات على قيمة واحدة أو أكثر من قيم المكدس، وتضع مخرجاتها على المكدس.
لاحظ أن أي "قيمة" مشار إليها تشير إلى عدد صحيح 32 بت وفقًا لمجموعة تعليمات جافا.
| ذاكري | رمز العملية (بالنظام الست عشري ) | رمز العملية (بالنظام الثنائي) | عدد البايتات الأخرى : [تسميات المعاملات] | Stack [قبل]→[بعد] | وصف |
|---|---|---|---|---|---|
| حمولة | 32 | 0011 0010 | arrayref, index → value | قم بتحميل مرجع من مصفوفة إلى المكدس | |
| متجر | 53 | 0101 0011 | arrayref, index, value → | قم بتخزين مرجع في مصفوفة | |
| aconst_null | 01 | 0000 0001 | → لا شيء | قم بدفع مرجع فارغ إلى المكدس | |
| حمولة | 19 | ٠٠٠١ ١٠٠١ | 1: فهرس | → مرجع الكائن | تحميل مرجع إلى المكدس من متغير محلي #index |
| aload_0 | 2أ | ٠٠١٠ ١٠١٠ | → مرجع الكائن | قم بتحميل مرجع إلى المكدس من المتغير المحلي 0 | |
| aload_1 | 2ب | ٠٠١٠ ١٠١١ | → مرجع الكائن | قم بتحميل مرجع إلى المكدس من المتغير المحلي 1 | |
| aload_2 | 2 ج | ٠٠١٠ ١١٠٠ | → مرجع الكائن | قم بتحميل مرجع إلى المكدس من المتغير المحلي 2 | |
| aload_3 | 2d | ٠٠١٠ ١١٠١ | → مرجع الكائن | قم بتحميل مرجع إلى المكدس من المتغير المحلي 3 | |
| anewarray | bd | 1011 1101 | 2: indexbyte1, indexbyte2 | العد → مرجع المصفوفة | أنشئ مصفوفة جديدة من المراجع بطول عدد ونوع مكون محدد بواسطة فهرس مرجع الفئة ( indexbyte1 << 8 | indexbyte2 ) في مجموعة الثوابت |
| العودة | b0 | 1011 0000 | objectref → [فارغ] | إرجاع مرجع من دالة | |
| طول المصفوفة | يكون | 1011 1110 | مرجع المصفوفة → الطول | الحصول على طول مصفوفة | |
| متجر | 3أ | 0011 1010 | 1: فهرس | مرجع الكائن → | قم بتخزين مرجع في متغير محلي #index |
| astore_0 | 4ب | 0100 1011 | مرجع الكائن → | قم بتخزين مرجع في المتغير المحلي 0 | |
| astore_1 | 4 ج | 0100 1100 | مرجع الكائن → | قم بتخزين مرجع في المتغير المحلي 1 | |
| astore_2 | 4d | 0100 1101 | مرجع الكائن → | قم بتخزين مرجع في المتغير المحلي 2 | |
| astore_3 | 4هـ | 0100 1110 | مرجع الكائن → | قم بتخزين مرجع في المتغير المحلي 3 | |
| رمي | صديق | 1011 1111 | objectref → [فارغ], objectref | يُطلق خطأً أو استثناءً (لاحظ أنه يتم مسح باقي المكدس، ولا يتبقى سوى مرجع إلى Throwable). | |
| baload | 33 | 0011 0011 | arrayref, index → value | تحميل قيمة بايت أو قيمة منطقية من مصفوفة | |
| باستور | 54 | 0101 0100 | arrayref, index, value → | تخزين قيمة بايت أو قيمة منطقية في مصفوفة | |
| بيبوش | 10 | ٠٠٠١ ٠٠٠٠ | 1: بايت | → القيمة | قم بدفع بايت إلى المكدس كقيمة عددية صحيحة |
| نقطة توقف | كاليفورنيا | 1100 1010 | مخصصة لنقاط التوقف في أدوات تصحيح أخطاء جافا؛ لا ينبغي أن تظهر في أي ملف فئة | ||
| كالود | 34 | ٠٠١١ ٠١٠٠ | arrayref, index → value | تحميل حرف من مصفوفة | |
| الكاستور | 55 | 0101 0101 | arrayref, index, value → | قم بتخزين حرف في مصفوفة | |
| تحقق من صحة | c0 | 1100 0000 | 2: indexbyte1, indexbyte2 | objectref → objectref | يتحقق مما إذا كان مرجع الكائن من نوع معين، ويكون مرجع الفئة الخاص به موجودًا في مجموعة الثوابت عند الفهرس ( indexbyte1 << 8 | indexbyte2 ) |
| d2f | 90 | 1001 0000 | القيمة ← النتيجة | تحويل قيمة من نوع double إلى نوع float | |
| d2i | 8هـ | 1000 1110 | القيمة ← النتيجة | تحويل قيمة من نوع double إلى نوع int | |
| d2l | 8f | 1000 1111 | القيمة ← النتيجة | تحويل عدد عشري مزدوج إلى عدد عشري طويل | |
| أبي | 63 | 0110 0011 | القيمة 1، القيمة 2 ← النتيجة | أضف ضعفين | |
| دالود | 31 | 0011 0001 | arrayref, index → value | تحميل قيمة من نوع double من مصفوفة | |
| داستور | 52 | 0101 0010 | arrayref, index, value → | قم بتخزين قيمة مزدوجة في مصفوفة | |
| dcmpg | 98 | 1001 1000 | القيمة 1، القيمة 2 ← النتيجة | قارن بين عددين مزدوجين، 1 على NaN | |
| dcmpl | 97 | 1001 0111 | القيمة 1، القيمة 2 ← النتيجة | قارن بين قيمتين مزدوجتين، -1 على NaN | |
| dconst_0 | 0e | 0000 1110 | → 0.0 | ادفع الثابت 0.0 (عدد عشري ) إلى المكدس | |
| dconst_1 | من | 0000 1111 | → 1.0 | قم بدفع الثابت 1.0 (عدد عشري ) إلى المكدس | |
| ddiv | 6f | 0110 1111 | القيمة 1، القيمة 2 ← النتيجة | قسّم العددين المتطابقين | |
| تحميل | 18 | ٠٠٠١ ١٠٠٠ | 1: فهرس | → القيمة | تحميل قيمة مزدوجة من متغير محلي #index |
| dload_0 | 26 | ٠٠١٠ ٠١١٠ | → القيمة | قم بتحميل قيمة مزدوجة من المتغير المحلي 0 | |
| dload_1 | 27 | ٠٠١٠ ٠١١١ | → القيمة | قم بتحميل قيمة مزدوجة من المتغير المحلي 1 | |
| dload_2 | 28 | ٠٠١٠ ١٠٠٠ | → القيمة | قم بتحميل قيمة مزدوجة من المتغير المحلي 2 | |
| dload_3 | 29 | ٠٠١٠ ١٠٠١ | → القيمة | قم بتحميل قيمة مزدوجة من المتغير المحلي 3 | |
| dmul | 6ب | 0110 1011 | القيمة 1، القيمة 2 ← النتيجة | اضرب اثنين من الأعداد المضاعفة | |
| سلبي | 77 | ٠١١١ ٠١١١ | القيمة ← النتيجة | نفي التكرار | |
| حلم | 73 | 0111 0011 | القيمة 1، القيمة 2 ← النتيجة | احصل على الباقي من قسمة عددين مزدوجين | |
| العودة | أف | 1010 1111 | القيمة → [فارغة] | إرجاع قيمة من نوع double من دالة | |
| متجر دي | 39 | ٠٠١١ ١٠٠١ | 1: فهرس | القيمة → | قم بتخزين قيمة مزدوجة في متغير محلي #index |
| dstore_0 | 47 | 0100 0111 | القيمة → | قم بتخزين قيمة من نوع double في المتغير المحلي 0 | |
| dstore_1 | 48 | 0100 1000 | القيمة → | قم بتخزين قيمة من نوع double في المتغير المحلي 1 | |
| dstore_2 | 49 | 0100 1001 | القيمة → | قم بتخزين قيمة مزدوجة في المتغير المحلي 2 | |
| dstore_3 | 4أ | 0100 1010 | القيمة → | قم بتخزين قيمة مزدوجة في المتغير المحلي 3 | |
| dsub | 67 | 0110 0111 | القيمة 1، القيمة 2 ← النتيجة | اطرح عددًا مزدوجًا من عدد آخر | |
| مكرر | 59 | 0101 1001 | قيمة → قيمة، قيمة | كرر القيمة الموجودة أعلى المكدس | |
| dup_x1 | 5أ | 0101 1010 | القيمة2، القيمة1 → القيمة1، القيمة2، القيمة1 | أدخل نسخة من القيمة العلوية في المكدس، على بعد قيمتين من الأعلى. يجب ألا تكون القيمتان value1 و value2 من النوع double أو long. | |
| dup_x2 | 5ب | 0101 1011 | القيمة 3، القيمة 2، القيمة 1 → القيمة 1، القيمة 3، القيمة 2، القيمة 1 | أدخل نسخة من القيمة العلوية في المكدس، على بعد قيمتين (إذا كانت القيمة الثانية من نوع double أو long، فإنها تشغل خانة القيمة الثالثة أيضًا) أو ثلاث قيم (إذا لم تكن القيمة الثانية من نوع double أو long) من الأعلى. | |
| dup2 | 5 سنتات | 0101 1100 | {value2, value1} → {value2, value1}, {value2, value1} | تكرار كلمتين من أعلى المكدس (قيمتان، إذا لم تكن القيمة 1 مزدوجة أو طويلة؛ قيمة واحدة، إذا كانت القيمة 1 مزدوجة أو طويلة) | |
| dup2_x1 | 5 أيام | 0101 1101 | القيمة 3، {القيمة 2، القيمة 1} → {القيمة 2، القيمة 1}، القيمة 3، {القيمة 2، القيمة 1} | كرر كلمتين وأدرجهما أسفل الكلمة الثالثة (انظر الشرح أعلاه). | |
| dup2_x2 | 5e | 0101 1110 | {value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1} | كرر كلمتين وأدرجهما أسفل الكلمة الرابعة | |
| f2d | 8d | 1000 1101 | القيمة ← النتيجة | تحويل عدد عشري إلى عدد عشري مزدوج | |
| f2i | 8ب | 1000 1011 | القيمة ← النتيجة | تحويل عدد عشري إلى عدد صحيح | |
| f2l | 8 ج | 1000 1100 | القيمة ← النتيجة | تحويل عدد عشري إلى عدد صحيح طويل | |
| موضة | 62 | 0110 0010 | القيمة 1، القيمة 2 ← النتيجة | أضف عددين عشريين | |
| تحميل | 30 | 0011 0000 | arrayref, index → value | تحميل عدد عشري من مصفوفة | |
| متجر | 51 | 0101 0001 | arrayref, index, value → | قم بتخزين عدد عشري في مصفوفة | |
| fcmpg | 96 | 1001 0110 | القيمة 1، القيمة 2 ← النتيجة | قارن بين قيمتين عشريتين، إحداهما تحتوي على NaN | |
| fcmpl | 95 | 1001 0101 | القيمة 1، القيمة 2 ← النتيجة | قارن بين عددين عشريين، -1 على NaN | |
| fconst_0 | 0ب | 0000 1011 | → 0.0f | أضف 0.0f إلى المكدس | |
| fconst_1 | 0 درجة مئوية | 0000 1100 | → 1.0f | قم بدفع 1.0f إلى المكدس | |
| fconst_2 | 0d | 0000 1101 | → 2.0f | قم بدفع 2.0f إلى المكدس | |
| fdiv | 6هـ | 0110 1110 | القيمة 1، القيمة 2 ← النتيجة | قسمة عددين عشريين | |
| تحميل | 17 | ٠٠٠١ ٠١١١ | 1: فهرس | → القيمة | تحميل قيمة عشرية من متغير محلي #index |
| fload_0 | 22 | 0010 0010 | → القيمة | تحميل قيمة عشرية من المتغير المحلي 0 | |
| fload_1 | 23 | ٠٠١٠ ٠٠١١ | → القيمة | تحميل قيمة عشرية من المتغير المحلي 1 | |
| fload_2 | 24 | ٠٠١٠ ٠١٠٠ | → القيمة | تحميل قيمة عشرية من المتغير المحلي 2 | |
| fload_3 | 25 | 0010 0101 | → القيمة | تحميل قيمة عشرية من المتغير المحلي 3 | |
| fmul | 6أ | 0110 1010 | القيمة 1، القيمة 2 ← النتيجة | اضرب عددين عشريين | |
| سلبي | 76 | 0111 0110 | القيمة ← النتيجة | نفي عدد عشري | |
| من | 72 | 0111 0010 | القيمة 1، القيمة 2 ← النتيجة | احصل على الباقي من قسمة عددين عشريين | |
| العودة | ae | 1010 1110 | القيمة → [فارغة] | أعد قيمة عشرية | |
| متجر fstore | 38 | 0011 1000 | 1: فهرس | القيمة → | قم بتخزين قيمة عشرية في متغير محلي #index |
| fstore_0 | 43 | 0100 0011 | القيمة → | قم بتخزين قيمة عشرية في المتغير المحلي 0 | |
| fstore_1 | 44 | 0100 0100 | القيمة → | قم بتخزين قيمة عشرية في المتغير المحلي 1 | |
| fstore_2 | 45 | 0100 0101 | القيمة → | قم بتخزين قيمة عشرية في المتغير المحلي 2 | |
| fstore_3 | 46 | 0100 0110 | القيمة → | قم بتخزين قيمة عشرية في المتغير المحلي 3 | |
| fsub | 66 | 0110 0110 | القيمة 1، القيمة 2 ← النتيجة | اطرح عددين عشريين | |
| جيتفيلد | ب4 | 1011 0100 | 2: indexbyte1, indexbyte2 | مرجع الكائن → القيمة | الحصول على قيمة حقل من كائن objectref ، حيث يتم تحديد الحقل بواسطة مرجع الحقل في فهرس مجموعة الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| getstatic | ب2 | 1011 0010 | 2: indexbyte1, indexbyte2 | → القيمة | الحصول على قيمة حقل ثابت من فئة، حيث يتم تحديد الحقل بواسطة مرجع الحقل في فهرس مجموعة الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| انتقل إلى | a7 | 1010 0111 | 2: branchbyte1, branchbyte2 | [بدون تغيير] | ينتقل إلى تعليمة أخرى عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| goto_w | ج8 | 1100 1000 | 4: branchbyte1، branchbyte2، branchbyte3، branchbyte4 | [بدون تغيير] | ينتقل إلى تعليمة أخرى عند إزاحة الفرع ( عدد صحيح مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 24 | branchbyte2 << 16 | branchbyte3 << 8 | branchbyte4 ) |
| i2b | 91 | 1001 0001 | القيمة ← النتيجة | تحويل عدد صحيح إلى بايت | |
| i2c | 92 | 1001 0010 | القيمة ← النتيجة | تحويل عدد صحيح إلى حرف | |
| i2d | 87 | 1000 0111 | القيمة ← النتيجة | تحويل عدد صحيح إلى عدد عشري | |
| i2f | 86 | 1000 0110 | القيمة ← النتيجة | تحويل عدد صحيح إلى عدد عشري | |
| i2l | 85 | 1000 0101 | القيمة ← النتيجة | تحويل عدد صحيح (int) إلى عدد صحيح طويل (long) | |
| i2s | 93 | 1001 0011 | القيمة ← النتيجة | تحويل عدد صحيح (int) إلى عدد صحيح قصير (short) | |
| أضفت | 60 | 0110 0000 | القيمة 1، القيمة 2 ← النتيجة | أضف عددين صحيحين | |
| تحميل | 2e | ٠٠١٠ ١١١٠ | arrayref, index → value | تحميل عدد صحيح من مصفوفة | |
| إياند | 7هـ | 0111 1110 | القيمة 1، القيمة 2 ← النتيجة | قم بإجراء عملية AND منطقية على عددين صحيحين | |
| متجر iastore | 4f | 0100 1111 | arrayref, index, value → | قم بتخزين عدد صحيح في مصفوفة | |
| iconst_m1 | 02 | 0000 0010 | → -1 | قم بتحميل القيمة العددية -1 على المكدس | |
| iconst_0 | 03 | 0000 0011 | → 0 | قم بتحميل القيمة الصحيحة 0 على المكدس | |
| iconst_1 | 04 | 0000 0100 | → 1 | قم بتحميل القيمة الصحيحة 1 على المكدس | |
| iconst_2 | 05 | 0000 0101 | → 2 | قم بتحميل القيمة العددية 2 على المكدس | |
| iconst_3 | 06 | 0000 0110 | → 3 | قم بتحميل القيمة العددية 3 على المكدس | |
| iconst_4 | 07 | 0000 0111 | → 4 | قم بتحميل القيمة العددية 4 على المكدس | |
| iconst_5 | 08 | 0000 1000 | → 5 | قم بتحميل القيمة العددية 5 على المكدس | |
| idiv | 6 ج | 0110 1100 | القيمة 1، القيمة 2 ← النتيجة | قسمة عددين صحيحين | |
| if_acmpeq | أ5 | 1010 0101 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا كانت المراجع متساوية، انتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| if_acMPne | a6 | 1010 0110 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا لم تكن المراجع متساوية، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| if_icmpeq | 9f | 1001 1111 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا كانت الأعداد الصحيحة متساوية، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| if_icmpge | أ2 | 1010 0010 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا كانت القيمة 1 أكبر من أو تساوي القيمة 2 ، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| if_icmpgt | أ3 | 1010 0011 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا كانت القيمة 1 أكبر من القيمة 2 ، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| if_icmple | أ4 | 1010 0100 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا كانت القيمة 1 أقل من أو تساوي القيمة 2 ، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| if_icmplt | أ1 | 1010 0001 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا كانت القيمة 1 أقل من القيمة 2 ، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| if_icMPne | a0 | 1010 0000 | 2: branchbyte1, branchbyte2 | القيمة 1، القيمة 2 → | إذا لم تكن الأعداد الصحيحة متساوية، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| ifeq | 99 | 1001 1001 | 2: branchbyte1, branchbyte2 | القيمة → | إذا كانت القيمة 0، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| ifge | 9 سنتات | 1001 1100 | 2: branchbyte1, branchbyte2 | القيمة → | إذا كانت القيمة أكبر من أو تساوي 0، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| Ifgt | 9د | 1001 1101 | 2: branchbyte1, branchbyte2 | القيمة → | إذا كانت القيمة أكبر من 0، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| ذبابة | 9هـ | 1001 1110 | 2: branchbyte1, branchbyte2 | القيمة → | إذا كانت القيمة أقل من أو تساوي 0، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| iflt | 9ب | 1001 1011 | 2: branchbyte1, branchbyte2 | القيمة → | إذا كانت القيمة أقل من 0، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| إيفني | 9أ | 1001 1010 | 2: branchbyte1, branchbyte2 | القيمة → | إذا لم تكن القيمة 0، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| ifnonnull | ج7 | 1100 0111 | 2: branchbyte1, branchbyte2 | القيمة → | إذا لم تكن القيمة فارغة، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| إذا كانت القيمة فارغة | ج6 | 1100 0110 | 2: branchbyte1, branchbyte2 | القيمة → | إذا كانت القيمة فارغة، فانتقل إلى التعليمات عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) |
| شركة | 84 | 1000 0100 | 2: فهرس، ثابت | [لا تغيير] | قم بزيادة المتغير المحلي #index بمقدار بايت مُوقّع ثابت |
| تحميل | 15 | ٠٠٠١ ٠١٠١ | 1: فهرس | → القيمة | تحميل قيمة عددية صحيحة من متغير محلي #index |
| iload_0 | 1أ | ٠٠٠١ ١٠١٠ | → القيمة | تحميل قيمة عددية صحيحة من المتغير المحلي 0 | |
| iload_1 | 1ب | ٠٠٠١ ١٠١١ | → القيمة | تحميل قيمة عددية صحيحة من المتغير المحلي 1 | |
| iload_2 | 1 ج | ٠٠٠١ ١١٠٠ | → القيمة | تحميل قيمة عددية صحيحة من المتغير المحلي 2 | |
| iload_3 | يوم واحد | ٠٠٠١ ١١٠١ | → القيمة | تحميل قيمة عددية صحيحة من المتغير المحلي 3 | |
| impdep1 | fe | 1111 1110 | مخصصة للعمليات التي تعتمد على التنفيذ داخل أدوات تصحيح الأخطاء؛ لا ينبغي أن تظهر في أي ملف فئة | ||
| impdep2 | ff | 1111 1111 | مخصصة للعمليات التي تعتمد على التنفيذ داخل أدوات تصحيح الأخطاء؛ لا ينبغي أن تظهر في أي ملف فئة | ||
| إيمول | 68 | 0110 1000 | القيمة 1، القيمة 2 ← النتيجة | اضرب عددين صحيحين | |
| ing | 74 | 0111 0100 | القيمة ← النتيجة | نفي عدد صحيح | |
| مثال على | ج1 | 1100 0001 | 2: indexbyte1, indexbyte2 | مرجع الكائن → النتيجة | يحدد ما إذا كان الكائن objectref من نوع معين، يتم تحديده بواسطة فهرس مرجع الفئة في مجموعة الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| استدعاء ديناميكي | با | 1011 1010 | 4: فهرس بايت 1، فهرس بايت 2، 0، 0 | [arg1, arg2, ...] → النتيجة | يستدعي هذا الأسلوب طريقة ديناميكية ويضع النتيجة على المكدس (قد تكون فارغة)؛ يتم تحديد الأسلوب بواسطة فهرس مرجع الأسلوب في مجمع الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| استدعاء الواجهة | ب9 | 1011 1001 | 4: indexbyte1, indexbyte2, count, 0 | objectref, [arg1, arg2, ...] → result | يستدعي هذا الأمر طريقة واجهة على الكائن objectref ويضع النتيجة على المكدس (قد تكون void)؛ يتم تحديد طريقة الواجهة بواسطة فهرس مرجع الطريقة في مجمع الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| استدعاء خاص | ب7 | 1011 0111 | 2: indexbyte1, indexbyte2 | objectref, [arg1, arg2, ...] → result | يستدعي هذا الأمر دالة مثيل على الكائن objectref ويضع النتيجة على المكدس (قد تكون void)؛ يتم تحديد الدالة بواسطة فهرس مرجع الدالة في مجمع الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| invokestatic | ب8 | 1011 1000 | 2: indexbyte1, indexbyte2 | [arg1, arg2, ...] → النتيجة | يستدعي هذا الأمر دالة ثابتة ويضع النتيجة على المكدس (قد تكون من نوع void)؛ ويتم تحديد الدالة بواسطة فهرس مرجع الدالة في مجمع الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| استدعاء افتراضي | ب6 | 1011 0110 | 2: indexbyte1, indexbyte2 | objectref, [arg1, arg2, ...] → result | يستدعي هذا الأسلوب الافتراضي على الكائن objectref ويضع النتيجة على المكدس (قد تكون void)؛ ويتم تحديد الأسلوب بواسطة فهرس مرجع الأسلوب في مجمع الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| إيور | 80 | 1000 0000 | القيمة 1، القيمة 2 ← النتيجة | عملية OR الثنائية الصحيحة | |
| irem | 70 | 0111 0000 | القيمة 1، القيمة 2 ← النتيجة | باقي القسمة المنطقية | |
| العودة | أ | 1010 1100 | القيمة → [فارغة] | إرجاع عدد صحيح من دالة | |
| إيشل | 78 | 0111 1000 | القيمة 1، القيمة 2 ← النتيجة | إزاحة لليسار | |
| إيشر | 7أ | 0111 1010 | القيمة 1، القيمة 2 ← النتيجة | الإزاحة الحسابية الصحيحة إلى اليمين | |
| متجر | 36 | 0011 0110 | 1: فهرس | القيمة → | قم بتخزين قيمة عدد صحيح في المتغير #index |
| istore_0 | 3ب | ٠٠١١ ١٠١١ | القيمة → | قم بتخزين قيمة عدد صحيح في المتغير 0 | |
| istore_1 | 3 ج | ٠٠١١ ١١٠٠ | القيمة → | قم بتخزين قيمة عدد صحيح في المتغير 1 | |
| istore_2 | ثلاثي الأبعاد | ٠٠١١ ١١٠١ | القيمة → | قم بتخزين قيمة عدد صحيح في المتغير 2 | |
| istore_3 | 3هـ | ٠٠١١ ١١١٠ | القيمة → | قم بتخزين قيمة عدد صحيح في المتغير 3 | |
| إيسوب | 64 | 0110 0100 | القيمة 1، القيمة 2 ← النتيجة | عدد صحيح طرح | |
| يوشر | 7 ج | 0111 1100 | القيمة 1، القيمة 2 ← النتيجة | إزاحة منطقية صحيحة إلى اليمين | |
| إكسور | 82 | 1000 0010 | القيمة 1، القيمة 2 ← النتيجة | عملية XOR الصحيحة | |
| jsr † | a8 | 1010 1000 | 2: branchbyte1, branchbyte2 | → العنوان | انتقل إلى الروتين الفرعي عند إزاحة الفرع ( عدد صحيح قصير مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 8 | branchbyte2 ) وضع عنوان العودة على المكدس |
| jsr_w † | ج9 | 1100 1001 | 4: branchbyte1، branchbyte2، branchbyte3، branchbyte4 | → العنوان | انتقل إلى الروتين الفرعي عند إزاحة الفرع ( عدد صحيح مُوقّع مُنشأ من بايتات غير مُوقّعة branchbyte1 << 24 | branchbyte2 << 16 | branchbyte3 << 8 | branchbyte4 ) وضع عنوان الإرجاع على المكدس |
| l2d | 8أ | 1000 1010 | القيمة ← النتيجة | تحويل عدد صحيح طويل (long) إلى عدد صحيح مزدوج (double) | |
| l2f | 89 | 1000 1001 | القيمة ← النتيجة | تحويل عدد صحيح طويل (long) إلى عدد عشري (float). | |
| l2i | 88 | 1000 1000 | القيمة ← النتيجة | تحويل عدد صحيح طويل (long) إلى عدد صحيح (int) | |
| لاد | 61 | 0110 0001 | القيمة 1، القيمة 2 ← النتيجة | أضف اثنين من الأطوال الطويلة | |
| تحميل | 2f | ٠٠١٠ ١١١١ | arrayref, index → value | تحميل قيمة طويلة من مصفوفة | |
| أرض | 7f | 0111 1111 | القيمة 1، القيمة 2 ← النتيجة | عملية AND الثنائية على اثنين من الأطوال الطويلة | |
| لاستور | 50 | 0101 0000 | arrayref, index, value → | قم بتخزين قيمة طويلة في مصفوفة | |
| lcmp | 94 | 1001 0100 | القيمة 1، القيمة 2 ← النتيجة | ادفع 0 إذا كان العددان الطويلان متساويين، و1 إذا كانت القيمة 1 أكبر من القيمة 2، و-1 خلاف ذلك. | |
| lconst_0 | 09 | 0000 1001 | → 0 لتر | ادفع 0L (الرقم صفر من النوع long ) إلى المكدس | |
| lconst_1 | 0a | 0000 1010 | ← 1 لتر | قم بإضافة 1L (الرقم واحد من النوع long ) إلى المكدس | |
| ldc | 12 | ٠٠٠١ ٠٠١٠ | 1: فهرس | → القيمة | قم بدفع قيمة ثابتة #index من مجموعة الثوابت (String، int، float، Class، java.lang.invoke.MethodType، java.lang.invoke.MethodHandle، أو قيمة ثابتة محسوبة ديناميكيًا) إلى المكدس |
| ldc_w | 13 | ٠٠٠١ ٠٠١١ | 2: indexbyte1, indexbyte2 | → القيمة | قم بدفع قيمة ثابتة #index من مجموعة الثوابت (String، int، float، Class، java.lang.invoke.MethodType ، java.lang.invoke.MethodHandle، أو قيمة ثابتة محسوبة ديناميكيًا) إلى المكدس ( يتم إنشاء الفهرس العريض كـ indexbyte1 << 8 | indexbyte2 ) |
| ldc2_w | 14 | ٠٠٠١ ٠١٠٠ | 2: indexbyte1, indexbyte2 | → القيمة | دفع رقم ثابت #index من مجموعة ثابتة ( double أو long أو ثابت محسوب ديناميكيًا) إلى المكدس ( يتم إنشاء الفهرس العريض كـ indexbyte1 << 8 | indexbyte2 ) |
| ldiv | 6د | 0110 1101 | القيمة 1، القيمة 2 ← النتيجة | قسّم طولين | |
| تحميل | 16 | ٠٠٠١ ٠١١٠ | 1: فهرس | → القيمة | تحميل قيمة طويلة من متغير محلي #index |
| lload_0 | 1هـ | ٠٠٠١ ١١١٠ | → القيمة | تحميل قيمة طويلة من متغير محلي 0 | |
| lload_1 | 1f | ٠٠٠١ ١١١١ | → القيمة | تحميل قيمة طويلة من متغير محلي 1 | |
| lload_2 | 20 | ٠٠١٠ ٠٠٠٠ | → القيمة | تحميل قيمة طويلة من متغير محلي 2 | |
| lload_3 | 21 | 0010 0001 | → القيمة | تحميل قيمة طويلة من متغير محلي 3 | |
| lmul | 69 | 0110 1001 | القيمة 1، القيمة 2 ← النتيجة | اضرب عددين طويلين | |
| سلبي | 75 | ٠١١١ ٠١٠١ | القيمة ← النتيجة | نفي طويل | |
| مفتاح البحث | أب | 1010 1011 | 8+: < حشو من 0 إلى 3 بايت > ، البايت الافتراضي 1، البايت الافتراضي 2، البايت الافتراضي 3، البايت الافتراضي 4، أزواج npairs1، أزواج npairs2، أزواج npairs3، أزواج npairs4، أزواج مطابقة الإزاحة... | مفتاح → | يتم البحث عن عنوان الهدف من جدول باستخدام مفتاح، ويستمر التنفيذ من التعليمات الموجودة في ذلك العنوان. |
| لور | 81 | 10000001 | القيمة 1، القيمة 2 ← النتيجة | عملية OR الثنائية لاثنين من الأطوال الطويلة | |
| ليم | 71 | 0111 0001 | القيمة 1، القيمة 2 ← النتيجة | باقي قسمة اثنين من الأطوال الطويلة | |
| العودة | إعلان | 1010 1101 | القيمة → [فارغة] | إرجاع قيمة طويلة | |
| lshl | 79 | 0111 1001 | القيمة 1، القيمة 2 ← النتيجة | إزاحة بتية إلى اليسار لقيمة طويلة 1 بمقدار عدد صحيح 2 خانة | |
| lshr | 7ب | 0111 1011 | القيمة 1، القيمة 2 ← النتيجة | إزاحة بتية إلى اليمين لقيمة طويلة 1 بمقدار عدد صحيح 2 خانة | |
| متجر | 37 | ٠٠١١ ٠١١١ | 1: فهرس | القيمة → | قم بتخزين قيمة طويلة في متغير محلي #index |
| lstore_0 | 3f | ٠٠١١ ١١١١ | القيمة → | قم بتخزين قيمة طويلة في متغير محلي 0 | |
| lstore_1 | 40 | 0100 0000 | القيمة → | تخزين قيمة طويلة في متغير محلي 1 | |
| lstore_2 | 41 | 0100 0001 | القيمة → | تخزين قيمة طويلة في متغير محلي 2 | |
| lstore_3 | 42 | 0100 0010 | القيمة → | تخزين قيمة طويلة في متغير محلي 3 | |
| lsub | 65 | 0110 0101 | القيمة 1، القيمة 2 ← النتيجة | اطرح اثنين من الأعداد الطويلة | |
| لوشر | 7 أيام | 0111 1101 | القيمة 1، القيمة 2 ← النتيجة | إزاحة بتية إلى اليمين لقيمة طويلة (long value1) بمقدار عدد صحيح (int value2 ) خانة، بدون إشارة | |
| لكسور | 83 | 1000 0011 | القيمة 1، القيمة 2 ← النتيجة | عملية XOR ثنائية لعددين طويلين | |
| مراقب | ج2 | 1100 0010 | مرجع الكائن → | أدخل مراقب الكائن ("احصل على القفل" - بداية قسم synchronized()) | |
| مخرج المراقبة | ج3 | 1100 0011 | مرجع الكائن → | مراقبة الخروج للكائن ("تحرير القفل" - نهاية قسم synchronized()) | |
| مصفوفة متعددة | ج5 | 1100 0101 | 3: indexbyte1، indexbyte2، الأبعاد | count1, [count2,...] → arrayref | أنشئ مصفوفة جديدة من الأبعاد من النوع المحدد بواسطة مرجع الفئة في فهرس مجمع الثوابت ( indexbyte1 << 8 | indexbyte2 )؛ يتم تحديد أحجام كل بُعد بواسطة count1 ، [ count2 ، إلخ. ] |
| جديد | ب ب | 1011 1011 | 2: indexbyte1, indexbyte2 | → مرجع الكائن | إنشاء كائن جديد من النوع المحدد بواسطة مرجع الفئة في فهرس مجموعة الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| مصفوفة جديدة | قبل الميلاد | 1011 1100 | 1: نوع | العد → مرجع المصفوفة | أنشئ مصفوفة جديدة تحتوي على عدد من العناصر من النوع الأولي المحدد بواسطة atype |
| لا | ٠٠ | 0000 0000 | [لا تغيير] | لا تقم بأي عملية | |
| الطلاب | 57 | ٠١٠١ ٠١١١ | القيمة → | تجاهل القيمة العليا في المكدس | |
| pop2 | 58 | 0101 1000 | {value2, value1} → | تجاهل القيمتين العلويتين في المكدس (أو قيمة واحدة، إذا كانت قيمة مزدوجة أو طويلة). | |
| بوتفيلد | ب5 | 1011 0101 | 2: indexbyte1, indexbyte2 | مرجع الكائن، القيمة → | قم بتعيين قيمة الحقل في كائن مرجعي ، حيث يتم تحديد الحقل بواسطة فهرس مرجعي للحقل في مجموعة الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| putstatic | ب3 | 1011 0011 | 2: indexbyte1, indexbyte2 | القيمة → | قم بتعيين قيمة لحقل ثابت في فئة، حيث يتم تحديد الحقل بواسطة فهرس مرجعي للحقل في مجموعة الثوابت ( indexbyte1 << 8 | indexbyte2 ) |
| ret † | a9 | 1010 1001 | 1: فهرس | [لا تغيير] | استمر في التنفيذ من العنوان المأخوذ من متغير محلي #index (عدم التماثل مع jsr مقصود) |
| يعود | ب1 | 1011 0001 | → [فارغ] | العودة من دالة فارغة | |
| سالود | 35 | ٠٠١١ ٠١٠١ | arrayref, index → value | تحميل عدد قصير من المصفوفة | |
| ساستوري | 56 | 0101 0110 | arrayref, index, value → | تخزين مختصر إلى مصفوفة | |
| رشفة | 11 | ٠٠٠١ ٠٠٠١ | 2: بايت1، بايت2 | → القيمة | قم بدفع قيمة قصيرة إلى المكدس كقيمة عددية صحيحة |
| تبديل | 5f | 0101 1111 | القيمة2، القيمة1 → القيمة1، القيمة2 | يقوم بتبديل كلمتين من أعلى المكدس (لاحظ أن value1 و value2 يجب ألا تكونا من نوع double أو long). | |
| مفتاح تبديل الطاولات | aa | 1010 1010 | 16+: [حشو من 0 إلى 3 بايت]، البايت الافتراضي 1، البايت الافتراضي 2، البايت الافتراضي 3، البايت الافتراضي 4، البايت المنخفض 1، البايت المنخفض 2، البايت المنخفض 3، البايت المنخفض 4، البايت العالي 1، البايت العالي 2، البايت العالي 3، البايت العالي 4، إزاحات القفز... | فهرس → | استمر في التنفيذ من عنوان في الجدول عند فهرس الإزاحة |
| واسع | ج4 | 1100 0100 | 3/5: رمز العملية، فهرس البايت 1، فهرس البايت 2 أو زيادة، فهرس البايت 1، فهرس البايت 2، عدد البايت 1، عدد البايت 2 | [كما هو الحال بالنسبة للتعليمات المقابلة] | نفّذ الأمر opcode ، حيث يكون opcode إما iload أو fload أو aload أو lload أو dload أو istore أو fstore أو astore أو lstore أو dstore أو ret، ولكن بافتراض أن الفهرس 16 بت؛ أو نفّذ الأمر iinc، حيث يكون الفهرس 16 بت والثابت المراد زيادته هو عدد صحيح قصير ذو إشارة 16 بت |
| (بدون اسم) | سي بي-إف دي | هذه القيم غير مخصصة حاليًا لرموز العمليات، وهي محجوزة للاستخدام المستقبلي. | |||
† تم إيقاف استخدامها في Java 7 (إصدار الفئة الرئيسي 51). [ 2 ] لن تظهر في ملفات الفئات التي تم إنشاؤها بواسطة مترجم أحدث من ذلك.
انظر أيضاً
- Jazelle DBX (التنفيذ المباشر لرمز البايت)، وهي ميزة تقوم بتنفيذ بعض رموز بايت جافا في الأجهزة، على بعض وحدات المعالجة المركزية ARM9.
- لغة الوسيط المشتركة (CIL)، وهي مواصفات مماثلة لرمز البايت تعمل على بيئة وقت تشغيل اللغة المشتركة (CLR) الخاصة بإطار عمل .NET
مراجع
- ↑ "مواصفات الآلة الافتراضية لجافا® - إصدار جافا SE 24" . تم الاطلاع عليه بتاريخ 26 يوليو 2025 .
- ↑ "الفصل 4. فئة تنسيق الملف 4.9.1. القيود الثابتة" . تم الاطلاع عليه في 26 يوليو 2025 .
روابط خارجية
فئات :
- قوائم مجموعة التعليمات
- جافا (منصة برمجية)
