تنسيق دالفيك بايت كود

التصميم العام

  • يهدف نموذج الآلة واصطلاحات الاتصال إلى تقليد البنى الحقيقية الشائعة واصطلاحات الاتصال على النمط C تقريبًا:
    • يعتمد الجهاز على التسجيل، ويتم تثبيت الإطارات في الحجم عند الإنشاء. يتكون كل إطار من عدد معين من السجلات (تحددها الطريقة) بالإضافة إلى أي بيانات مساعدة مطلوبة لتنفيذ الطريقة، مثل (على سبيل المثال لا الحصر) عداد البرنامج ومرجع إلى ملف .dex الذي يحتوي على الطريقة .
    • عند استخدامها لقيم البت (مثل الأعداد الصحيحة وأرقام الفاصلة العائمة)، تعتبر السجلات بعرض 32 بت. يتم استخدام أزواج التسجيل المتجاورة لقيم 64 بت. لا توجد متطلبات محاذاة لأزواج التسجيل.
    • عند استخدامها لمراجع الكائنات، تعتبر السجلات واسعة بما يكفي لاستيعاب مرجع واحد بالضبط.
    • فيما يتعلق بتمثيل البتات، (Object) null == (int) 0 .
    • يتم وضع وسيطات N للطريقة في آخر سجلات N لإطار استدعاء الطريقة بالترتيب. تستهلك الوسائط الواسعة سجلين. يتم تمرير أساليب المثيل إلى this المرجع كوسيطة أولى لها.
  • وحدة التخزين في دفق التعليمات عبارة عن كمية غير موقعة مكونة من 16 بت. يتم تجاهل بعض البتات في بعض التعليمات/يجب أن تكون صفرًا.
  • لا تقتصر التعليمات بشكل مجاني على نوع معين. على سبيل المثال، لا يلزم أن تحدد التعليمات التي تنقل قيم تسجيل 32 بت بدون تفسير ما إذا كانت تقوم بتحريك القيم الصحيحة أو العائمة.
  • هناك تجمعات ثابتة معدودة ومفهرسة بشكل منفصل للمراجع إلى السلاسل والأنواع والحقول والأساليب.
  • يتم تمثيل البيانات الحرفية ذات مستوى البت بشكل مباشر في دفق التعليمات.
  • لأنه من الناحية العملية، من غير المألوف أن تحتاج الطريقة إلى أكثر من 16 سجلاً، ولأن الحاجة إلى أكثر من ثمانية سجلات أمر شائع إلى حد معقول، فإن العديد من التعليمات تقتصر على معالجة أول 16 سجلاً فقط. عندما يكون ذلك ممكنًا بشكل معقول، تسمح التعليمات بمراجع تصل إلى أول 256 سجلًا. بالإضافة إلى ذلك، تحتوي بعض التعليمات على متغيرات تسمح بعدد أكبر من السجلات، بما في ذلك زوج من تعليمات move الشاملة التي يمكنها معالجة السجلات في النطاق v0v65535 . في الحالات التي لا يتوفر فيها متغير التعليمات لمعالجة السجل المطلوب، فمن المتوقع أن يتم نقل محتويات السجل من السجل الأصلي إلى سجل منخفض (قبل العملية) و/أو نقلها من سجل نتائج منخفض إلى سجل مرتفع التسجيل (بعد العملية).
  • هناك العديد من "التعليمات الزائفة" التي تُستخدم للاحتفاظ بحمولات البيانات ذات الطول المتغير، والتي يُشار إليها بالتعليمات العادية (على سبيل المثال، fill-array-data ). لا ينبغي أبدًا مواجهة مثل هذه التعليمات أثناء التدفق الطبيعي للتنفيذ. بالإضافة إلى ذلك، يجب أن تكون التعليمات موجودة على إزاحات رمز البايت ذات الأرقام الزوجية (أي محاذاة 4 بايت). من أجل تلبية هذا المطلب، يجب أن تصدر أدوات إنشاء dex تعليمات nop إضافية كفاصل إذا كانت هذه التعليمات غير محاذية. أخيرًا، على الرغم من أن ذلك ليس مطلوبًا، فمن المتوقع أن تختار معظم الأدوات إصدار هذه التعليمات في نهايات الطرق، وإلا فمن المحتمل أن تكون هناك حاجة إلى تعليمات إضافية للتفرع حولها.
  • عند تثبيتها على نظام قيد التشغيل، قد يتم تغيير بعض التعليمات وتغيير تنسيقها كتحسين للربط الثابت أثناء التثبيت. وذلك للسماح بالتنفيذ بشكل أسرع بمجرد معرفة الارتباط. راجع مستند تنسيقات التعليمات ذات الصلة للتعرف على المتغيرات المقترحة. يتم استخدام كلمة "مقترح" بشكل حكيم؛ ليس إلزاميا تنفيذ هذه.
  • بناء الجملة البشرية وأساليب التذكر:
    • ترتيب الوجهة ثم المصدر للوسائط.
    • تحتوي بعض أكواد التشغيل على لاحقة اسم واضحة للإشارة إلى النوع (الأنواع) التي تعمل عليها:
      • أكواد التشغيل العامة ذات 32 بت من النوع غير محددة.
      • أكواد التشغيل ذات النوع العام 64 بت مُلحقة بـ -wide .
      • تُضاف أكواد التشغيل الخاصة بالنوع إلى نوعها (أو اختصار مباشر)، وهو أحد ما يلي: -boolean -byte -char -short -int -long -float -double -object -string -class -void .
    • تحتوي بعض أكواد التشغيل على لاحقة واضحة لتمييز العمليات المتطابقة التي لها تخطيطات أو خيارات تعليمات مختلفة. يتم فصل هذه اللواحق عن الأسماء الرئيسية بشرطة مائلة (" / ") وهي موجودة بشكل أساسي على الإطلاق لجعل هناك تعيين واحد لواحد مع ثوابت ثابتة في الكود الذي ينشئ الملفات التنفيذية ويفسرها (أي لتقليل الغموض للبشر).
    • في الأوصاف هنا، يتم التأكيد على عرض القيمة (يشير، على سبيل المثال، إلى نطاق ثابت أو عدد السجلات التي يمكن تناولها) من خلال استخدام حرف لكل أربع بتات من العرض.
    • على سبيل المثال، في التعليمات " move-wide/from16 vAA, vBBBB ":
      • " move " هو كود التشغيل الأساسي، الذي يشير إلى العملية الأساسية (نقل قيمة السجل).
      • " wide " هي لاحقة الاسم، مما يشير إلى أنها تعمل على بيانات واسعة (64 بت).
      • " from16 " هي لاحقة كود التشغيل، مما يشير إلى متغير يحتوي على مرجع تسجيل 16 بت كمصدر.
      • " vAA " هو سجل الوجهة (متضمنًا في العملية؛ ومرة ​​أخرى، القاعدة هي أن وسيطات الوجهة تأتي دائمًا في المقام الأول)، والتي يجب أن تكون في النطاق v0 - v255 .
      • " vBBBB " هو السجل المصدر، والذي يجب أن يكون في النطاق v0v65535 .
  • راجع مستند تنسيقات التعليمات للحصول على مزيد من التفاصيل حول تنسيقات التعليمات المتنوعة (المدرجة ضمن "التشغيل والتنسيق") بالإضافة إلى تفاصيل حول بناء جملة كود التشغيل.
  • راجع مستند تنسيق الملف .dex للحصول على مزيد من التفاصيل حول مكان تناسب الرمز الثانوي مع الصورة الأكبر.

ملخص مجموعة البايت كود

التشغيل والتنسيق ذاكري / بناء الجملة الحجج وصف
0010x لا دورات النفايات.

ملاحظة: يتم وضع علامة على التعليمات الزائفة الحاملة للبيانات باستخدام كود التشغيل هذا، وفي هذه الحالة يشير البايت عالي الترتيب لوحدة كود التشغيل إلى طبيعة البيانات. راجع "تنسيق packed-switch-payload " و"تنسيق sparse-switch-payload " و"تنسيق fill-array-data-payload " أدناه.

01 12x نقل vA، vB A: سجل الوجهة (4 بت)
B: سجل المصدر (4 بت)
انقل محتويات سجل غير كائن إلى آخر.
02 22x نقل/from16 vAA، vBBBB A: سجل الوجهة (8 بت)
B: سجل المصدر (16 بت)
انقل محتويات سجل غير كائن إلى آخر.
03 32x نقل/16 vAAAA، vBBBB A: سجل الوجهة (16 بت)
B: سجل المصدر (16 بت)
انقل محتويات سجل غير كائن إلى آخر.
04 12x التحرك على نطاق واسع vA، vB A: زوج تسجيل الوجهة (4 بت)
B: زوج تسجيل المصدر (4 بت)
انقل محتويات زوج التسجيل إلى آخر.

ملاحظة: من القانوني الانتقال من v N إلى v N-1 أو v N+1 ، لذلك يجب أن ترتب عمليات التنفيذ قراءة نصفي زوج التسجيل قبل كتابة أي شيء.

05 22x تحرك على نطاق واسع / from16 vAA، vBBBB A: زوج تسجيل الوجهة (8 بت)
B: زوج تسجيل المصدر (16 بت)
انقل محتويات زوج التسجيل إلى آخر.

ملحوظة: اعتبارات التنفيذ هي نفس الاعتبارات move-wide أعلاه.

06 32x التحرك على نطاق واسع / 16 vAAAA، vBBBB A: زوج تسجيل الوجهة (16 بت)
B: زوج تسجيل المصدر (16 بت)
انقل محتويات زوج التسجيل إلى آخر.

ملحوظة: اعتبارات التنفيذ هي نفس الاعتبارات move-wide أعلاه.

07 12x نقل الكائن vA، vB A: سجل الوجهة (4 بت)
B: سجل المصدر (4 بت)
نقل محتويات أحد السجلات الحاملة للكائن إلى آخر.
08 22x نقل الكائن/from16 vAA، vBBBB A: سجل الوجهة (8 بت)
B: سجل المصدر (16 بت)
نقل محتويات أحد السجلات الحاملة للكائن إلى آخر.
09 32x نقل الكائن / 16 vAAAA، vBBBB A: سجل الوجهة (16 بت)
B: سجل المصدر (16 بت)
نقل محتويات أحد السجلات الحاملة للكائن إلى آخر.
0 أ 11x نتيجة التحرك vAA A: سجل الوجهة (8 بت) انقل النتيجة غير الكائنية المكونة من كلمة واحدة لأحدث invoke- kind إلى السجل المشار إليه. يجب أن يتم ذلك كتعليمات مباشرة بعد invoke- kind الذي لا ينبغي تجاهل نتيجته (كلمة واحدة، غير كائن)؛ في أي مكان آخر غير صالح.
0 ب 11x نقل النتيجة على نطاق واسع vAA A: زوج تسجيل الوجهة (8 بت) انقل نتيجة الكلمة المزدوجة لأحدث invoke- kind إلى زوج التسجيل المشار إليه. يجب أن يتم ذلك كتعليمات مباشرة بعد invoke- kind الذي لا ينبغي تجاهل نتيجته (الكلمة المزدوجة)؛ في أي مكان آخر غير صالح.
0 ج 11x نقل كائن نتيجة vAA A: سجل الوجهة (8 بت) انقل نتيجة الكائن لأحدث invoke- kind إلى السجل المشار إليه. يجب أن يتم ذلك كتعليمات مباشرة بعد invoke- kind أو filled-new-array والتي لا ينبغي تجاهل نتيجة (الكائن) الخاصة بها؛ في أي مكان آخر غير صالح.
0د 11x نقل الاستثناء vAA A: سجل الوجهة (8 بت) احفظ الاستثناء الذي تم اكتشافه للتو في السجل المحدد. يجب أن تكون هذه هي التعليمات الأولى لأي معالج استثناء لا يجب تجاهل الاستثناء الذي تم اكتشافه، ويجب أن تحدث هذه التعليمات فقط كتعليمات أولى لمعالج الاستثناء؛ في أي مكان آخر غير صالح.
0e 10x عودة فارغة العودة من طريقة void .
0ف 11x إرجاع vAA A: سجل القيمة المرتجعة (8 بت) العودة من طريقة إرجاع قيمة غير كائن بعرض واحد (32 بت).
10 11x العودة على نطاق واسع vAA A: زوج تسجيل القيمة المرتجعة (8 بت) العودة من طريقة إرجاع القيمة ذات العرض المزدوج (64 بت).
11 11x كائن الإرجاع vAA A: سجل القيمة المرتجعة (8 بت) العودة من طريقة إرجاع الكائن.
12 11 ن ثابت/4 فولت أمبير، #+ب A: سجل الوجهة (4 بت)
B: موقعة (4 بت)
انقل القيمة الحرفية المعطاة (تمديد الإشارة إلى 32 بت) إلى السجل المحدد.
13 21 ثانية const/16 vAA، #+BBBB A: سجل الوجهة (8 بت)
B: موقعة (16 بت)
انقل القيمة الحرفية المعطاة (تمديد الإشارة إلى 32 بت) إلى السجل المحدد.
14 31ط const vAA، #+BBBBBBBB A: سجل الوجهة (8 بت)
B: ثابت تعسفي 32 بت
انقل القيمة الحرفية المعطاة إلى السجل المحدد.
15 21 ساعة ثابت/ارتفاع 16 فولت أمبير، #+BBBB0000 A: سجل الوجهة (8 بت)
B: موقعة (16 بت)
انقل القيمة الحرفية المعطاة (يمين-صفر-ممتدة إلى 32 بت) إلى السجل المحدد.
16 21 ثانية واسع النطاق/16 فولت أمبير، #+BBBB A: سجل الوجهة (8 بت)
B: موقعة (16 بت)
انقل القيمة الحرفية المحددة (ممتدة الإشارة إلى 64 بت) إلى زوج التسجيل المحدد.
17 31ط عريض ثابت/32 فولت أمبير، #+BBBBBBBB A: سجل الوجهة (8 بت)
B: موقعة (32 بت)
انقل القيمة الحرفية المحددة (ممتدة الإشارة إلى 64 بت) إلى زوج التسجيل المحدد.
18 51 لتر vAA على مستوى ثابت، #+BBBBBBBBBBBBBBB A: سجل الوجهة (8 بت)
B: ثابت العرض المزدوج التعسفي (64 بت).
انقل القيمة الحرفية المعطاة إلى زوج التسجيل المحدد.
19 21 ساعة عرض ثابت/ارتفاع 16 فولت أمبير، #+BBBB000000000000 A: سجل الوجهة (8 بت)
B: موقعة (16 بت)
انقل القيمة الحرفية المعطاة (يمين-صفر-ممتدة إلى 64 بت) إلى زوج التسجيل المحدد.
1 أ 21 ج const-string vAA، string@BBBB A: سجل الوجهة (8 بت)
B: فهرس السلسلة
انقل مرجعًا إلى السلسلة المحددة بواسطة الفهرس المحدد إلى السجل المحدد.
1 ب 31 ج const-string/jumbo vAA، string@BBBBBBBB A: سجل الوجهة (8 بت)
B: فهرس السلسلة
انقل مرجعًا إلى السلسلة المحددة بواسطة الفهرس المحدد إلى السجل المحدد.
1 ج 21 ج فئة const-class vAA، اكتب@BBBB A: سجل الوجهة (8 بت)
B: نوع الفهرس
انقل مرجعًا إلى الفئة المحددة بواسطة الفهرس المحدد إلى السجل المحدد. في الحالة التي يكون فيها النوع المشار إليه بدائيًا، فسيقوم هذا بتخزين مرجع إلى الفئة المنحلة للنوع البدائي.
1د 11x مراقب إدخال vAA A: سجل الحاملة المرجعية (8 بت) احصل على الشاشة للكائن المشار إليه.
1هـ 11x مراقبة الخروج vAA A: سجل الحاملة المرجعية (8 بت) حرر الشاشة للكائن المشار إليه.

ملاحظة: إذا كانت هذه التعليمات تحتاج إلى طرح استثناء، فيجب أن تفعل ذلك كما لو أن جهاز الكمبيوتر قد تقدم بالفعل بعد التعليمات. قد يكون من المفيد التفكير في هذا على أنه يتم تنفيذ التعليمات بنجاح (بمعنى ما)، ويتم طرح الاستثناء بعد التعليمات ولكن قبل أن تتاح الفرصة للتشغيل التالي. هذا التعريف يجعل من الممكن لطريقة ما استخدام كتلة تنظيف الشاشة الشاملة (على سبيل المثال، finally ) كتنظيف الشاشة لتلك الكتلة نفسها، كطريقة للتعامل مع الاستثناءات التعسفية التي قد يتم طرحها بسبب التنفيذ التاريخي لـ Thread.stop() ، مع الاستمرار في الحفاظ على النظافة المناسبة للشاشة.

1و 21ج تحقق من vAA، اكتب@BBBB A: سجل الحاملة المرجعية (8 بت)
B: فهرس النوع (16 بت)
قم بإلقاء ClassCastException إذا كان المرجع الموجود في السجل المحدد لا يمكن تحويله إلى النوع المشار إليه.

ملحوظة: نظرًا لأن A يجب أن يكون دائمًا مرجعًا (وليس قيمة أولية)، فسيفشل هذا بالضرورة في وقت التشغيل (أي أنه سيطرح استثناءً) إذا كان B يشير إلى نوع بدائي.

20 22 ج مثيل vA، vB، type@CCCC A: سجل الوجهة (4 بت)
B: سجل الحاملة المرجعية (4 بتات)
C: فهرس النوع (16 بت)
قم بالتخزين في الوجهة المحددة سجل 1 إذا كان المرجع المشار إليه مثيلًا للنوع المحدد، أو 0 إذا لم يكن كذلك.

ملحوظة: نظرًا لأن B يجب أن يكون دائمًا مرجعًا (وليس قيمة أولية)، فسيؤدي ذلك دائمًا إلى تخزين 0 إذا كانت C تشير إلى نوع بدائي.

21 12x طول المصفوفة vA، vB A: سجل الوجهة (4 بت)
B: سجل المرجع المرجعي للصفيف (4 بتات)
قم بالتخزين في الوجهة المحددة وتسجيل طول المصفوفة المشار إليها في الإدخالات
22 21 ج المثيل الجديد vAA، اكتب@BBBB A: سجل الوجهة (8 بت)
B: نوع الفهرس
قم بإنشاء مثيل جديد من النوع المشار إليه، مع تخزين مرجع له في الوجهة. يجب أن يشير النوع إلى فئة غير صفيف.
23 22 ج صفيف جديد vA، vB، type@CCCC A: سجل الوجهة (4 بت)
B: سجل الحجم
C: نوع الفهرس
إنشاء مصفوفة جديدة من النوع والحجم المشار إليهما. يجب أن يكون النوع نوع صفيف.
24 35 ج مصفوفة مملوءة جديدة {vC، vD، vE، vF، vG}، type@BBBB A: حجم المصفوفة وعدد كلمات الوسيطة (4 بت)
B: فهرس النوع (16 بت)
C..G: سجلات الوسيطات (4 بتات لكل منها)
إنشاء مصفوفة من النوع والحجم المحددين، وملئها بالمحتويات المتوفرة. يجب أن يكون النوع نوع صفيف. يجب أن تكون محتويات المصفوفة مكونة من كلمة واحدة (أي لا توجد مصفوفات long أو double ، ولكن أنواع المراجع مقبولة). يتم تخزين المثيل الذي تم إنشاؤه كـ "نتيجة" بنفس الطريقة التي تخزن بها تعليمات استدعاء الطريقة نتائجها، لذلك يجب نقل المثيل الذي تم إنشاؤه إلى سجل مع تعليمة move-result-object اللاحقة مباشرة (إذا كان سيتم استخدامه ).
25 3rc مصفوفة جديدة مملوءة/نطاق {vCCCC .. vNNNN}، اكتب@BBBB A: حجم المصفوفة وعدد كلمات الوسيطة (8 بت)
B: فهرس النوع (16 بت)
C: تسجيل الوسيطة الأولى (16 بت)
N = A + C - 1
إنشاء مصفوفة من النوع والحجم المحددين، وملئها بالمحتويات المتوفرة. التوضيحات والقيود هي نفس filled-new-array الموضحة أعلاه.
26 31 طن تعبئة بيانات المصفوفة vAA، +BBBBBBBB (مع البيانات التكميلية كما هو محدد أدناه في "تنسيق fill-array-data-payload ") A: مرجع الصفيف (8 بت)
B: إزاحة "الفرع" الموقعة لتعليمات زائفة لبيانات الجدول (32 بت)
املأ المصفوفة المحددة بالبيانات المشار إليها. يجب أن يكون المرجع لمصفوفة من العناصر الأولية، ويجب أن يطابقها جدول البيانات من حيث النوع ويجب ألا يحتوي على عناصر أكثر مما يمكن احتواؤه في المصفوفة. أي أن المصفوفة قد تكون أكبر من الجدول، وإذا كان الأمر كذلك، يتم تعيين العناصر الأولية للمصفوفة فقط، مع ترك الباقي بمفرده.
27 11x رمي VAA A: سجل حامل الاستثناء (8 بت)
رمي الاستثناء المشار إليه.
28 10 طن انتقل إلى +AA A: إزاحة الفرع الموقعة (8 بت) القفز دون قيد أو شرط إلى التعليمات المشار إليها.

ملاحظة: يجب ألا تكون إزاحة الفرع 0 . (يمكن إنشاء حلقة الدوران بشكل قانوني إما باستخدام goto/32 أو عن طريق تضمين nop كهدف قبل الفرع.)

29 20 طن غوتو/16 + AAAA A: إزاحة الفرع الموقعة (16 بت)
القفز دون قيد أو شرط إلى التعليمات المشار إليها.

ملاحظة: يجب ألا تكون إزاحة الفرع 0 . (يمكن إنشاء حلقة الدوران بشكل قانوني إما باستخدام goto/32 أو عن طريق تضمين nop كهدف قبل الفرع.)

2a 30t انتقل إلى/32 +AAAAAAAA A: إزاحة الفرع الموقعة (32 بت)
القفز دون قيد أو شرط إلى التعليمات المشار إليها.
2ب 31ت vAA للمحول المعبأ، +BBBBBBBB (مع البيانات الإضافية كما هو محدد أدناه في "تنسيق packed-switch-payload ") A: سجل للاختبار
B: إزاحة "الفرع" الموقعة لتعليمات زائفة لبيانات الجدول (32 بت)
انتقل إلى تعليمات جديدة بناءً على القيمة الموجودة في السجل المحدد، باستخدام جدول الإزاحات المقابلة لكل قيمة في نطاق تكامل معين، أو انتقل إلى التعليمات التالية إذا لم يكن هناك تطابق.
2 ج 31 طن vAA للتبديل المتناثر، +BBBBBBBB (مع البيانات التكميلية كما هو محدد أدناه في "تنسيق sparse-switch-payload ") A: سجل للاختبار
B: إزاحة "الفرع" الموقعة لتعليمات زائفة لبيانات الجدول (32 بت)
انتقل إلى تعليمة جديدة بناءً على القيمة الموجودة في السجل المحدد، باستخدام جدول مرتب لأزواج إزاحة القيمة، أو انتقل إلى التعليمة التالية إذا لم يكن هناك تطابق.
2د ..31 23x cmp نوع vAA، vBB، vCC
2d: cml-float (تحيز lt)
2e: cmpg-float (تحيز GT)
2f: cml-double (انحياز lt)
30: cmpg-double (تحيز GT)
31: سمب-طويل
A: سجل الوجهة (8 بت)
B: سجل المصدر الأول أو الزوج
C: سجل أو زوج المصدر الثاني
قم بتنفيذ النقطة العائمة المشار إليها أو المقارنة long ، واضبط a على 0 إذا b == c أو 1 إذا b > c أو -1 إذا b < c . يشير "التحيز" المدرج لعمليات الفاصلة العائمة إلى كيفية التعامل مع مقارنات NaN : تُرجع تعليمات "gtتحيز" 1 لمقارنات NaN ، وتعليمات "ltتحيز" ترجع -1 .

على سبيل المثال، للتحقق مما إذا كانت النقطة العائمة x < y من المستحسن استخدام cmpg-float ؛ نتيجة -1 تشير إلى أن الاختبار كان صحيحا، والقيم الأخرى تشير إلى أنه كان خطأ إما بسبب مقارنة صحيحة أو لأن إحدى القيم كانت NaN .

32..37 22 طن إذا- اختبار vA، vB، +CCCC
32: إذا مكافئ
33 : إذا ني
34: إذا-لتر
35: إذا قه
36: إذا-GT
37 : إذا لو
A: سجل أولاً للاختبار (4 بت)
B: التسجيل الثاني للاختبار (4 بت)
C: إزاحة الفرع الموقعة (16 بت)
تفرع إلى الوجهة المحددة إذا تمت مقارنة قيم السجلين المحددين كما هو محدد.

ملاحظة: يجب ألا تكون إزاحة الفرع 0 . (يمكن إنشاء حلقة الدوران بشكل قانوني إما عن طريق التفرع حول goto للخلف أو عن طريق تضمين nop كهدف قبل الفرع.)

38..3د 21 طن إذا- اختبار z vAA، +BBBB
38: إذا-eqz
39: إذا نيز
3 أ: إذا-LTZ
3 ب: إذا-gez
3ج: إذا-Gtz
3D: إذا ليز
A: سجل للاختبار (8 بت)
B: إزاحة الفرع الموقعة (16 بت)
تفرع إلى الوجهة المحددة إذا كانت قيمة السجل المحدد مقارنة بـ 0 كما هو محدد.

ملاحظة: يجب ألا تكون إزاحة الفرع 0 . (يمكن إنشاء حلقة الدوران بشكل قانوني إما عن طريق التفرع حول goto للخلف أو عن طريق تضمين nop كهدف قبل الفرع.)

3e..43 10x (غير مستعمل) (غير مستعمل)
44..51 23x المصفوفة vAA، vBB، vCC
44 : عمر
45: على مستوى العمر
46: كائن العمر
47: العمر المنطقي
48: بايت بايت
49: اجيت شار
4 أ: عمر قصير
4 ب: أبوت
4 ج: على نطاق واسع
4 د: كائن aput
4e: أبوت منطقية
4f: aput بايت
50: أبوت شار
51 : قصير
A: سجل القيمة أو الزوج؛ قد يكون المصدر أو الوجهة (8 بت)
B: سجل المصفوفة (8 بت)
C: سجل الفهرس (8 بت)
قم بتنفيذ عملية المصفوفة المحددة في الفهرس المحدد للمصفوفة المحددة، أو تحميلها أو تخزينها في سجل القيمة.
52..5و 22ج أنا مثيل vA، vB، field@CCCC
52: إيجيت
53: على نطاق واسع
54: كائن iget
55: إيجيت منطقية
56: إيجيت بايت
57: إيجيت شار
58: إيجيت-قصيرة
59 : ايبوت
5 أ: على مستوى بروتوكول الإنترنت
5 ب: كائن iput
5ج: IPut-منطقية
5 د: إيبوت بايت
5e: iput-شار
5f: iput-short
A: سجل القيمة أو الزوج؛ قد يكون المصدر أو الوجهة (4 بت)
B: تسجيل الكائنات (4 بت)
C: الفهرس المرجعي لحقل المثيل (16 بت)
قم بتنفيذ العملية الميدانية لمثيل الكائن المحدد مع الحقل المحدد، أو تحميله أو تخزينه في سجل القيمة.

ملاحظة: تعد رموز التشغيل هذه مرشحة معقولة للارتباط الثابت، مما يؤدي إلى تغيير وسيطة الحقل لتكون إزاحة أكثر مباشرة.

60..6 د 21 ج s staticop vAA، field@BBBB
60 : سكت
61: على نطاق واسع
62: كائن sget
63: sget منطقية
64: sget بايت
65: سجيت شار
66: sget-قصيرة
67 : قذف
68: سبوت واسعة
69 : كائن قذف
6 أ: قيمة منطقية
6 ب: بايت سبوت
6 ج: سبوت شار
6 د: بصق قصير
A: سجل القيمة أو الزوج؛ قد يكون المصدر أو الوجهة (8 بت)
B: الفهرس المرجعي للمجال الثابت (16 بت)
قم بإجراء عملية الحقل الثابت للكائن المحدد باستخدام الحقل الثابت المحدد، أو تحميله أو تخزينه في سجل القيمة.

ملاحظة: تعد رموز التشغيل هذه مرشحة معقولة للارتباط الثابت، مما يؤدي إلى تغيير وسيطة الحقل لتكون إزاحة أكثر مباشرة.

6هـ..72 35ج استدعاء نوع {vC، vD، vE، vF، vG}، meth@BBBB
6e: الاستدعاء الظاهري
6f: الاستدعاء الفائق
70: الاستدعاء المباشر
71: استدعاء ثابت
72: واجهة الاستدعاء
A: عدد كلمات الوسيطة (4 بت)
B: الفهرس المرجعي للطريقة (16 بت)
C..G: سجلات الوسيطات (4 بتات لكل منها)
اتصل بالطريقة المشار إليها. قد يتم تخزين النتيجة (إن وجدت) مع متغير move-result* المناسب كالتعليمات اللاحقة مباشرة.

يتم استخدام invoke-virtual لاستدعاء طريقة افتراضية عادية (طريقة ليست private أو static أو final وليست منشئة أيضًا).

عندما يشير method_id إلى أسلوب فئة غير واجهة، يتم استخدام invoke-super لاستدعاء الأسلوب الظاهري الأقرب للفئة الفائقة (على عكس الطريقة التي لها نفس method_id في فئة الاستدعاء). تنطبق نفس قيود الطريقة على invoke-virtual .

في الإصدار 037 من ملفات Dex أو الإصدارات الأحدث، إذا method_id يشير إلى طريقة واجهة، فسيتم استخدام invoke-super لاستدعاء الإصدار الأكثر تحديدًا وغير المتجاوز من تلك الطريقة المحددة على تلك الواجهة. تنطبق نفس قيود الطريقة على invoke-virtual . في ملفات Dex قبل الإصدار 037 ، يعد وجود method_id غير قانوني وغير محدد.

يتم استخدام invoke-direct لاستدعاء طريقة مباشرة غير static (أي طريقة مثيل بطبيعتها غير قابلة للتجاوز، أي إما طريقة مثيل private أو مُنشئ).

يتم استخدام invoke-static لاستدعاء طريقة static (والتي تعتبر دائمًا طريقة مباشرة).

يتم استخدام invoke-interface لاستدعاء طريقة interface ، أي على كائن لا تُعرف فئته المحددة، وذلك باستخدام method_id الذي يشير إلى interface .

ملاحظة: تعد رموز التشغيل هذه مرشحة معقولة للارتباط الثابت، مما يؤدي إلى تغيير وسيطة الطريقة لتكون إزاحة أكثر مباشرة (أو زوجًا منها).

73 10x (غير مستعمل) (غير مستعمل)
74..78 3rc استدعاء النوع / النطاق {vCCCC .. vNNNN}، meth@BBBB
74: استدعاء الظاهري/النطاق
75: استدعاء سوبر/نطاق
76: الاستدعاء المباشر/النطاق
77: استدعاء ثابت/نطاق
78: واجهة الاستدعاء/النطاق
A: عدد كلمات الوسيطة (8 بت)
B: الفهرس المرجعي للطريقة (16 بت)
C: تسجيل الوسيطة الأولى (16 بت)
N = A + C - 1
اتصل بالطريقة المشار إليها. راجع وصف invoke- kind الأول أعلاه للحصول على التفاصيل والتحذيرات والاقتراحات.
79..7 أ 10x (غير مستعمل) (غير مستعمل)
7ب..8و 12x أونوب vA، vB
7 ب: سلبي كثافة العمليات
7ج: غير صحيح
7 د: نيج طويل
7هـ: غير طويل
7f: تعويم سلبي
80: نيج مزدوج
81 : من الداخل إلى الطويل
82 : داخل إلى تعويم
83 : من الداخل إلى المزدوج
84 : طويلة إلى كثافة العمليات
85: طويل الطفو
86: طويل إلى مزدوج
87: تعويم إلى كثافة العمليات
88: تعويم إلى فترة طويلة
89: تعويم إلى مضاعفة
8 أ: مزدوج إلى int
8 ب: مزدوج إلى طويل
8ج: مزدوج إلى تعويم
8 د: من إلى بايت
8e: int-to-char
8f: من الداخل إلى القصير
A: سجل الوجهة أو الزوج (4 بت)
B: سجل المصدر أو الزوج (4 بت)
تنفيذ العملية الأحادية المحددة في السجل المصدر، وتخزين النتيجة في السجل الوجهة.
90..AF 23x بينوب vAA، vBB، vCC
90: الإضافة
91 : الباطنة
92: متعدد كثافة العمليات
93: شعبة كثافة العمليات
94: ريم إنت
95: و كثافة العمليات
96 : أو كثافة العمليات
97: xor-int
98: شل-كثافة العمليات
99: شر-كثافة العمليات
9 أ: ushr-int
9 ب: إضافة طويلة
9ج: شبه طويلة
9 د: متعدد الطول
9e: شعبة طويلة
9f: rem-long
a0: وطويلة
a1: أو طويل
a2: xor-long
a3: شل طويل
a4: طويل
a5: طويل جدًا
a6: إضافة تعويم
a7: تعويم فرعي
a8: متعدد التعويم
a9: div-float
أأ: ريم تعويم
أب: إضافة مزدوجة
التيار المتردد: شبه مزدوج
إعلان: متعدد مزدوج
ae: div مزدوج
بالعربية: ريم مزدوج
A: سجل الوجهة أو الزوج (8 ​​بت)
B: سجل أو زوج المصدر الأول (8 بت)
C: تسجيل أو زوج المصدر الثاني (8 بت)
قم بإجراء العملية الثنائية المحددة على السجلين المصدرين، وتخزين النتيجة في السجل الوجهة.

ملاحظة: على عكس العمليات الرياضية -long الأخرى (التي تأخذ أزواج تسجيل لكل من مصدرها الأول والثاني)، shl-long و shr-long و ushr-long تأخذ زوج تسجيل لمصدرها الأول (القيمة المراد إزاحتها )، ولكن سجل واحد لمصدرها الثاني (مسافة التحول).

ب0..راجع 12x binop /2addr vA, vB
b0: الوظيفة الإضافية/2addr
b1: فرعي/2addr
b2: مول-إنت/2addr
b3: div-int/2addr
b4: rem-int/2addr
b5: و-int/2addr
b6: أو-int/2addr
b7: xor-int/2addr
b8: shl-int/2addr
b9: shr-int/2addr
با: ushr-int/2addr
ب: إضافة طويلة/2addr
قبل الميلاد: فرعي طويل/2addr
دينار بحريني: مول طويل/2addr
يكون: div-long/2addr
فرنك بلجيكي: rem-long/2addr
c0: و-طويل/2addr
c1: أو طويل/2addr
c2: xor-long/2addr
c3:shl-long/2addr
c4: shr-long/2addr
c5: ushr-long/2addr
c6: إضافة تعويم/2addr
c7: تعويم فرعي/2addr
c8: متعدد التعويم/2addr
c9: div-float/2addr
كاليفورنيا: rem-float/2addr
cb: إضافة مزدوجة/2addr
نسخة إلى: فرعي/2addr
قرص مضغوط: متعدد مزدوج/2addr
م: شعبة مزدوجة/2addr
راجع: rem-double/2addr
A: سجل أو زوج الوجهة والمصدر الأول (4 بت)
B: سجل أو زوج المصدر الثاني (4 بت)
تنفيذ العملية الثنائية المحددة على السجلين المصدريين، وتخزين النتيجة في السجل المصدر الأول.

ملحوظة: على عكس العمليات الحسابية -long/2addr الأخرى (التي تأخذ أزواج تسجيل لكل من الوجهة/المصدر الأول والمصدر الثاني)، shl-long/2addr و shr-long/2addr و ushr-long/2addr تأخذ تسجيلًا زوج لوجهتهم/المصدر الأول (القيمة المراد إزاحتها)، ولكن سجل واحد لمصدرهم الثاني (مسافة الإزاحة).

d0..d7 22s binop /lit16 vA, vB, #+CCCC
d0: الوظيفة الإضافية/lit16
d1: rsub-int (طرح عكسي)
D2: مول-إنت/ليت16
d3: div-int/lit16
d4: ريم-int/lit16
d5: و-int/lit16
d6: أو-int/lit16
d7: xor-int/lit16
A: سجل الوجهة (4 بت)
B: سجل المصدر (4 بت)
C: ثابت ثابت (16 بت)
قم بإجراء العملية الثنائية المشار إليها على السجل المشار إليه (الوسيطة الأولى) والقيمة الحرفية (الوسيطة الثانية)، مع تخزين النتيجة في السجل الوجهة.

ملاحظة: لا يحتوي rsub-int على لاحقة نظرًا لأن هذا الإصدار هو رمز التشغيل الرئيسي لعائلته. انظر أيضًا أدناه للحصول على تفاصيل حول دلالاتها.

د8..ه2 22ب binop /lit8 vAA، vBB، #+CC
d8: الوظيفة الإضافية/lit8
d9: rsub-int/lit8
دا: مول-إنت/ليت8
ديسيبل: div-int/lit8
العاصمة: rem-int/lit8
dd: و-int/lit8
دي: أو-int/lit8
مدافع: xor-int/lit8
e0: shl-int/lit8
e1: shr-int/lit8
e2: ushr-int/lit8
A: سجل الوجهة (8 بت)
B: سجل المصدر (8 بت)
C: ثابت ثابت (8 بت)
قم بإجراء العملية الثنائية المشار إليها على السجل المشار إليه (الوسيطة الأولى) والقيمة الحرفية (الوسيطة الثانية)، مع تخزين النتيجة في السجل الوجهة.

ملاحظة: انظر أدناه للحصول على تفاصيل حول دلالات rsub-int .

e3..f9 10x (غير مستعمل) (غير مستعمل)
فا 45cc استدعاء متعدد الأشكال {vC، vD، vE، vF، vG}، meth@BBBB، proto@HHHH A: عدد كلمات الوسيطة (4 بت)
B: الفهرس المرجعي للطريقة (16 بت)
C: جهاز الاستقبال (4 بت)
D..G: سجلات الوسيطات (4 بتات لكل منها)
H: الفهرس المرجعي للنموذج الأولي (16 بت)
استدعاء طريقة التوقيع المتعددة الأشكال المشار إليها. قد يتم تخزين النتيجة (إن وجدت) مع متغير move-result* المناسب كالتعليمات اللاحقة مباشرة.

يجب أن يكون مرجع الطريقة إلى أسلوب متعدد الأشكال للتوقيع، مثل java.lang.invoke.MethodHandle.invoke أو java.lang.invoke.MethodHandle.invokeExact .

يجب أن يكون جهاز الاستقبال كائنًا يدعم طريقة التوقيع متعددة الأشكال التي يتم استدعاؤها.

يصف مرجع النموذج الأولي أنواع الوسائط المتوفرة ونوع الإرجاع المتوقع.

قد يثير كود البايت invoke-polymorphic استثناءات عند تنفيذه. تم توضيح الاستثناءات في وثائق واجهة برمجة التطبيقات (API) الخاصة بطريقة التوقيع متعددة الأشكال التي يتم استدعاؤها.

موجود في ملفات Dex بدءًا من الإصدار 038 وما بعده.
أف ب 4rcc استدعاء متعدد الأشكال/النطاق {vCCCC .. vNNNN}، meth@BBBB، proto@HHHH A: عدد كلمات الوسيطة (8 بت)
B: الفهرس المرجعي للطريقة (16 بت)
C: جهاز الاستقبال (16 بت)
H: الفهرس المرجعي للنموذج الأولي (16 بت)
N = A + C - 1
استدعاء مقبض الأسلوب المشار إليه. راجع وصف invoke-polymorphic أعلاه للحصول على التفاصيل.

موجود في ملفات Dex بدءًا من الإصدار 038 وما بعده.
نادي 35ج استدعاء مخصص {vC، vD، vE، vF، vG}، call_site@BBBB A: عدد كلمات الوسيطة (4 بت)
B: الفهرس المرجعي لموقع الاتصال (16 بت)
C..G: سجلات الوسيطات (4 بتات لكل منها)
حل واستدعاء موقع الاتصال المشار إليه. قد يتم تخزين نتيجة الاستدعاء (إن وجدت) بمتغير move-result* المناسب كالتعليمات اللاحقة مباشرة.

يتم تنفيذ هذه التعليمات على مرحلتين: تحليل موقع الاتصال واستدعاء موقع الاتصال.

يتحقق تحليل موقع الاتصال مما إذا كان موقع الاتصال المشار إليه يحتوي على مثيل java.lang.invoke.CallSite مرتبط. إذا لم يكن الأمر كذلك، فسيتم استدعاء أسلوب رابط التمهيد لموقع الاتصال المشار إليه باستخدام الوسائط الموجودة في ملف DEX (راجع call_site_item ). يقوم أسلوب رابط bootstrap بإرجاع نسخة java.lang.invoke.CallSite التي سيتم بعد ذلك ربطها بموقع الاتصال المشار إليه في حالة عدم وجود اقتران. من المحتمل أن يكون هناك مؤشر ترابط آخر قد قام بالفعل بإجراء الاقتران أولاً، وإذا كان الأمر كذلك، فسيستمر تنفيذ التعليمات مع أول مثيل java.lang.invoke.CallSite المرتبط.

يتم إجراء استدعاء موقع الاتصال على هدف java.lang.invoke.MethodHandle الخاص بمثيل java.lang.invoke.CallSite الذي تم حله. يتم استدعاء الهدف كما لو كان يتم تنفيذ invoke-polymorphic (الموصوف أعلاه) باستخدام مقبض الطريقة والوسائط الخاصة بتعليمات الاستدعاء invoke-custom كوسائط لاستدعاء مقبض الطريقة الدقيق.

يتم تغليف الاستثناءات التي تم رفعها بواسطة طريقة رابط bootstrap في java.lang.BootstrapMethodError . يُطلق خطأ BootstrapMethodError أيضًا في حالة:
  • يفشل أسلوب رابط bootstrap في إرجاع مثيل java.lang.invoke.CallSite .
  • يحتوي java.lang.invoke.CallSite الذي تم إرجاعه على هدف مقبض أسلوب null .
  • هدف مقبض الطريقة ليس من النوع المطلوب.
موجود في ملفات Dex بدءًا من الإصدار 038 وما بعده.
فد 3rc استدعاء مخصص/نطاق {vCCCC .. vNNNN}، call_site@BBBB A: عدد كلمات الوسيطة (8 بت)
B: الفهرس المرجعي لموقع الاتصال (16 بت)
C: تسجيل الوسيطة الأولى (16 بت)
N = A + C - 1
حل واستدعاء موقع الاتصال. راجع وصف invoke-custom أعلاه للحصول على التفاصيل.

موجود في ملفات Dex بدءًا من الإصدار 038 وما بعده.
الحديد 21 ج const-method-handle vAA،method_handle@BBBB A: سجل الوجهة (8 بت)
B: فهرس مقبض الطريقة (16 بت)
انقل مرجعًا إلى مقبض الطريقة المحدد بواسطة الفهرس المحدد إلى السجل المحدد.

موجود في ملفات Dex بدءًا من الإصدار 039 وما بعده.
صص.٢١ج const-method-type vAA، proto@BBBB A: سجل الوجهة (8 بت)
B: مرجع النموذج الأولي للطريقة (16 بت)
انقل مرجعًا إلى النموذج الأولي للطريقة المحدد بواسطة الفهرس المحدد إلى السجل المحدد.

موجود في ملفات Dex بدءًا من الإصدار 039 وما بعده.

تنسيق الحمولة المعبأة

اسم شكل وصف
معرف قصيرة = 0x0100 تحديد كود التشغيل الزائف
مقاس قصير عدد الإدخالات في الجدول
first_key كثافة العمليات قيمة حالة التبديل الأولى (والأدنى).
الأهداف كثافة العمليات [] قائمة أهداف الفروع النسبية size . ترتبط الأهداف بعنوان كود تشغيل المحول، وليس بهذا الجدول.

ملاحظة: إجمالي عدد وحدات التعليمات البرمجية لمثيل هذا الجدول هو (size * 2) + 4 .

تنسيق الحمولة النافعة متفرق

اسم شكل وصف
معرف قصيرة = 0x0200 تحديد كود التشغيل الزائف
مقاس قصير عدد الإدخالات في الجدول
مفاتيح كثافة العمليات [] قائمة القيم الرئيسية size ، مرتبة من الأدنى إلى الأعلى
الأهداف كثافة العمليات [] قائمة بأهداف الفروع ذات size النسبي، كل منها يتوافق مع القيمة الرئيسية في نفس الفهرس. ترتبط الأهداف بعنوان كود تشغيل المحول، وليس بهذا الجدول.

ملاحظة: إجمالي عدد وحدات التعليمات البرمجية لمثيل هذا الجدول هو (size * 4) + 2 .

تنسيق حمولة بيانات المصفوفة

اسم شكل وصف
معرف قصيرة = 0x0300 تحديد كود التشغيل الزائف
element_width قصير عدد البايتات في كل عنصر
مقاس uint عدد العناصر في الجدول
بيانات أوبايت[] قيم البيانات

ملاحظة: إجمالي عدد وحدات التعليمات البرمجية لمثيل هذا الجدول هو (size * element_width + 1) / 2 + 4 .

تفاصيل العمليات الحسابية

ملاحظة: يجب أن تتبع عمليات الفاصلة العائمة قواعد IEEE 754، باستخدام التدفق السفلي من التقريب إلى الأقرب والتدريجي، ما لم يُنص على خلاف ذلك.

رمز التشغيل ج- دلالات ملحوظات
neg-int int32 أ؛
نتيجة int32 = -a;
تكملة ثنائية أحادية.
ليس كثافة العمليات int32 أ؛
نتيجة int32 = ~a;
الأحادي منها مكمل.
نيج طويل كثافة العمليات64 أ؛
نتيجة int64 = -a;
تكملة ثنائية أحادية.
ليس طويل كثافة العمليات64 أ؛
نتيجة int64 = ~a;
الأحادي منها مكمل.
neg-float تعويم أ؛
النتيجة العائمة = -أ؛
نفي النقطة العائمة.
سلبي مزدوج مزدوج أ؛
نتيجة مزدوجة = -أ؛
نفي النقطة العائمة.
كثافة العمليات إلى فترة طويلة int32 أ؛
نتيجة int64 = (int64) أ;
قم بتسجيل امتداد int32 إلى int64 .
int-to-float int32 أ؛
نتيجة تعويم = (تعويم) أ ؛
تحويل int32 إلى float ، باستخدام جولة إلى أخرى. هذا يفقد الدقة لبعض القيم.
int-to-double int32 a ؛
نتيجة مزدوجة = (مزدوج) أ ؛
تحويل int32 إلى double .
منذ فترة طويلة int64 أ ؛
int32 النتيجة = (int32) a ؛
اقتطاع int64 في int32 .
طويل إلى طويل int64 أ ؛
نتيجة تعويم = (تعويم) أ ؛
تحويل int64 إلى float ، باستخدام جولة إلى أخرى. هذا يفقد الدقة لبعض القيم.
منذ فترة طويلة int64 أ ؛
نتيجة مزدوجة = (مزدوج) أ ؛
تحويل int64 إلى double ، باستخدام جولة إلى أخرى. هذا يفقد الدقة لبعض القيم.
تطفو إلى حد تعويم أ ؛
int32 النتيجة = (int32) a ؛
تحويل float إلى int32 ، باستخدام مستدير الصفر. NaN و -0.0 (صفر سلبي) تحويل إلى عدد صحيح 0 . لا يمكن تحويل الحجم والقيم بحجم كبير جدًا إلى إما إلى 0x7fffffff أو -0x80000000 اعتمادًا على العلامة.
تطفو إلى طول تعويم أ ؛
int64 النتيجة = (int64) a ؛
تحويل float إلى int64 ، باستخدام مستدير الصفر. تنطبق نفس قواعد الحالة الخاصة التي تنطبق هنا على float-to-int هنا ، باستثناء أن القيم خارج المدى يتم تحويلها إلى إما 0x7fffffffffffffff أو -0x8000000000000000 بناءً على علامة.
تعويم إلى مزدوج تعويم أ ؛
نتيجة مزدوجة = (مزدوج) أ ؛
تحويل float إلى double ، والحفاظ على القيمة بالضبط.
مزدوج إلى مضاعفة أ ؛
int32 النتيجة = (int32) a ؛
تحويل double إلى int32 ، باستخدام جولة الصفر. نفس قواعد الحالة الخاصة كما float-to-int هنا.
مزدوج إلى طويل مضاعفة أ ؛
int64 النتيجة = (int64) a ؛
تحويل double إلى int64 ، باستخدام جولة الجولة الصفر. نفس قواعد الحالة الخاصة كما float-to-long هنا.
مزدوج إلى حلو مضاعفة أ ؛
نتيجة تعويم = (تعويم) أ ؛
تحويل double إلى float ، باستخدام جولة إلى أكثر. هذا يفقد الدقة لبعض القيم.
int-to بايت int32 a ؛
int32 النتيجة = (A << 24) >> 24 ؛
اقتطاع int32 إلى int8 ، علامة توسيع النتيجة.
int-to-char int32 a ؛
int32 النتيجة = a & 0xffff ؛
اقتطاع int32 إلى uint16 ، دون تمديد علامة.
int-to-short int32 a ؛
int32 النتيجة = (a << 16) >> 16 ؛
اقتطاع int32 إلى int16 ، علامة توسيع النتيجة.
إضافة int32 a ، b ؛
int32 النتيجة = a + b ؛
إضافة التوحى.
فرعي int32 a ، b ؛
int32 النتيجة = a - b ؛
الطرح المزدوج.
rsub-int int32 a ، b ؛
int32 النتيجة = b - a ؛
الطرح عكس التكامل.
مول- int32 a ، b ؛
int32 النتيجة = a * b ؛
مضاعفة التكامل المزدوج.
div-int int32 a ، b ؛
int32 النتيجة = a / b ؛
تقسيم التكامل المزدوج ، يدور نحو الصفر (أي ، مقطوع إلى عدد صحيح). هذا يلقي ArithmeticException إذا b == 0 .
rem-int int32 a ، b ؛
int32 النتيجة = a ٪ b ؛
تبقى التوافق بينهما بعد الانقسام. علامة النتيجة هي نفس علامة a ، ويتم تعريفها بدقة أكبر result == a - (a / b) * b هذا يلقي ArithmeticException إذا b == 0 .
و int int32 a ، b ؛
int32 النتيجة = a & b ؛
bitwise و.
أو int32 a ، b ؛
int32 نتيجة = أ | ب؛
bitwise أو.
xor-int int32 a ، b ؛
int32 النتيجة = a ^ b ؛
bitwise xor.
shl-int int32 a ، b ؛
int32 النتيجة = a << (b & 0x1f) ؛
تحول bitwise إلى اليسار (مع حجة مقنعة).
sh-int int32 a ، b ؛
int32 النتيجة = a >> (b & 0x1f) ؛
موقعة bitwise موقعة اليمين (مع حجة مقنعة).
USHR-int uint32 a ، b ؛
int32 النتيجة = a >> (b & 0x1f) ؛
التحول غير الموقّع بشكل صحيح (مع حجة مقنعة).
إضافة طويلة int64 a ، b ؛
int64 النتيجة = a + b ؛
إضافة التوحى.
دونج int64 a ، b ؛
int64 النتيجة = a - b ؛
الطرح المزدوج.
طالبة int64 a ، b ؛
int64 النتيجة = a * b ؛
مضاعفة التكامل المزدوج.
Div-Long int64 a ، b ؛
int64 النتيجة = a / b ؛
تقسيم التكامل المزدوج ، يدور نحو الصفر (أي ، مقطوع إلى عدد صحيح). هذا يلقي ArithmeticException إذا b == 0 .
REM int64 a ، b ؛
int64 النتيجة = a ٪ b ؛
تبقى التوافق بينهما بعد الانقسام. علامة النتيجة هي نفس علامة a ، ويتم تعريفها بدقة أكبر result == a - (a / b) * b هذا يلقي ArithmeticException إذا b == 0 .
ومنذ فترة طويلة int64 a ، b ؛
int64 النتيجة = a & b ؛
bitwise و.
أو طويلة int64 a ، b ؛
int64 نتيجة = أ | ب؛
bitwise أو.
XOR-LONG int64 a ، b ؛
int64 النتيجة = a ^ b ؛
bitwise xor.
shl-long int64 أ ؛
int32 ب ؛
int64 النتيجة = a << (b & 0x3f) ؛
تحول bitwise إلى اليسار (مع حجة مقنعة).
shlong int64 أ ؛
int32 ب ؛
int64 النتيجة = a >> (b & 0x3f) ؛
موقعة bitwise موقعة اليمين (مع حجة مقنعة).
USHR-LONG uint64 أ ؛
int32 ب ؛
int64 النتيجة = a >> (b & 0x3f) ؛
التحول غير الموقّع بشكل صحيح (مع حجة مقنعة).
الإضافات تعويم أ ، ب ؛
نتيجة تعويم = A + B ؛
إضافة نقطة عائمة.
حلقة فرعية تعويم أ ، ب ؛
نتيجة تعويم = أ - ب ؛
طرح نقطة عائمة.
ملهى تعويم أ ، ب ؛
نتيجة تعويم = a * b ؛
تكاثر نقطة العائمة.
div-float تعويم أ ، ب ؛
نتيجة تعويم = A / B ؛
قسم نقطة العائمة.
طلاق REM تعويم أ ، ب ؛
نتيجة تعويم = a ٪ b ؛
نقطة عائمة تبقى بعد التقسيم. هذه الوظيفة مختلفة عن الباقي IEEE 754 ويتم تعريفها result == a - roundTowardZero(a / b) * b
الإضافات مضاعفة أ ، ب ؛
نتيجة مزدوجة = A + B ؛
إضافة نقطة عائمة.
الفرعية مضاعفة أ ، ب ؛
نتيجة مزدوجة = أ - ب ؛
طرح نقطة عائمة.
مول دوبل مضاعفة أ ، ب ؛
نتيجة مزدوجة = a * b ؛
تكاثر نقطة العائمة.
Div-Double مضاعفة أ ، ب ؛
نتيجة مزدوجة = A / B ؛
قسم نقطة العائمة.
rembble مضاعفة أ ، ب ؛
نتيجة مزدوجة = A ٪ B ؛
نقطة عائمة تبقى بعد التقسيم. هذه الوظيفة مختلفة عن الباقي IEEE 754 ويتم تعريفها result == a - roundTowardZero(a / b) * b