Dalvik تنسيقات التعليمات القابلة للتنفيذ

تسرد هذه الصفحة تنسيقات التعليمات المستخدمة بواسطة تنسيق Dalvik القابل للتنفيذ (DEX) وكود Dalvik الثانوي. ومن المفترض أن يتم استخدامه مع المستند المرجعي للرمز الثانوي .

أوصاف bitwise

يسرد العمود الأول في جدول التنسيق تخطيط التنسيق الخاص بالبت. وتتكون من "كلمة" واحدة أو أكثر مفصولة بمسافات، وتصف كل منها وحدة كود مكونة من 16 بت. يمثل كل حرف في الكلمة أربع بتات، تُقرأ من البتات العالية إلى المنخفضة، مع وجود أشرطة عمودية (" | ") تتخللها للمساعدة في القراءة. تُستخدم الأحرف الكبيرة بالتسلسل من " A " للإشارة إلى الحقول داخل التنسيق (والتي يتم تعريفها بعد ذلك بشكل أكبر من خلال عمود بناء الجملة). يتم استخدام المصطلح " op " للإشارة إلى موضع كود تشغيل مكون من ثمانية بتات داخل التنسيق. يتم استخدام الصفر المائل (" Ø ") للإشارة إلى أن جميع البتات يجب أن تكون صفرًا في الموضع المشار إليه.

بالنسبة للجزء الأكبر، تستمر عملية الكتابة من وحدات التعليمات البرمجية السابقة إلى وحدات التعليمات البرمجية اللاحقة، ومن الترتيب المنخفض إلى الترتيب العالي داخل وحدة التعليمات البرمجية. ومع ذلك، هناك بعض الاستثناءات لهذه القاعدة العامة، والتي يتم إجراؤها من أجل جعل تسمية الأجزاء ذات المعنى المتشابه هي نفسها عبر تنسيقات التعليمات المختلفة. تتم الإشارة إلى هذه الحالات بوضوح في أوصاف التنسيق.

على سبيل المثال، يشير التنسيق " B|A| op CCCC " إلى أن التنسيق يتكون من وحدتي تعليمات برمجية ذات 16 بت. تتكون الكلمة الأولى من كود التشغيل في البتات الثمانية المنخفضة وزوج من قيم الأربع بتات في البتات الثمانية العليا؛ وتتكون الكلمة الثانية من قيمة واحدة مكونة من 16 بت.

معرفات التنسيق

يشير العمود الثاني في جدول التنسيق إلى المعرف القصير للتنسيق، والذي يتم استخدامه في المستندات الأخرى وفي التعليمات البرمجية لتعريف التنسيق.

تتكون معظم معرفات التنسيق من ثلاثة أحرف ورقمين متبوعين بحرف. يشير الرقم الأول إلى عدد وحدات التعليمات البرمجية ذات 16 بت في التنسيق. يشير الرقم الثاني إلى الحد الأقصى لعدد السجلات التي يحتوي عليها التنسيق (الحد الأقصى، نظرًا لأن بعض التنسيقات يمكن أن تستوعب عددًا متغيرًا من السجلات)، مع الإشارة الخاصة " r " إلى أنه تم ترميز نطاق من السجلات. يشير الحرف الأخير بشكل شبه تذكيري إلى نوع أي بيانات إضافية مشفرة بواسطة التنسيق. على سبيل المثال، التنسيق " 21t " يبلغ طوله اثنين، ويحتوي على مرجع تسجيل واحد، ويحتوي بالإضافة إلى ذلك على هدف فرعي.

تحتوي تنسيقات الارتباط الثابتة المقترحة على لاحقة " s " إضافية، مما يجعلها في المجمل أربعة أحرف. وبالمثل، تحتوي تنسيقات الارتباط "المضمّنة" المقترحة على لاحقة " i " إضافية. (في هذا السياق، يشبه الارتباط المضمن الارتباط الثابت، باستثناء وجود روابط أكثر مباشرة في تنفيذ الجهاز.) وأخيرًا، تتضمن بعض التنسيقات الغريبة المقترحة (على سبيل المثال، " 20bc ") قطعتين من البيانات يتم تمثيلهما في معرف التنسيق الخاص به .

القائمة الكاملة لأحرف typecode هي كما يلي. لاحظ أن بعض النماذج لها أحجام مختلفة، اعتمادًا على التنسيق:

ذاكري أحجام البت معنى
ب 8 توقيع فوري ب yte
ج 16، 32 ج مؤشر التجمع المستمر
F 16 ثوابت inter f (تُستخدم فقط في التنسيقات المرتبطة بشكل ثابت)
ح 16 تم التوقيع الفوري على h (البتات ذات الترتيب العالي بقيمة 32 أو 64 بت؛ والبتات ذات الترتيب المنخفض كلها 0 )
أنا 32 وقعت على الفور أنا الإقليم الشمالي، أو تعويم 32 بت
ل 64 توقيع فوري لونغ ، أو 64 بت مزدوج
م 16 ثوابت الأسلوب m (تستخدم فقط في التنسيقات المرتبطة بشكل ثابت)
ن 4 وقع فوري ن ibble
س 16 التوقيع الفوري قصير
ر 8، 16، 32 فرع ر الهدف
س 0 لا توجد بيانات إضافية

بناء الجملة

يشير العمود الثالث من جدول التنسيق إلى بناء الجملة الموجه نحو الإنسان للتعليمات التي تستخدم التنسيق المشار إليه. تبدأ كل تعليمات بكود التشغيل المسمى ويتبعها اختياريًا وسيطة واحدة أو أكثر، مفصولة بفواصل.

عندما تشير الوسيطة إلى حقل من العمود الأول، تتم الإشارة إلى حرف هذا الحقل في بناء الجملة، ويتكرر مرة واحدة لكل أربع بتات من الحقل. على سبيل المثال، الحقل المكون من ثمانية بتات المسمى " BB " في العمود الأول سيتم أيضًا تسميته " BB " في عمود بناء الجملة.

الوسيطات التي تحمل اسم السجل لها الشكل " v X ". تم اختيار البادئة " v " بدلاً من " r " الأكثر شيوعًا لتجنب التعارض مع البنى (غير الافتراضية) التي يمكن تنفيذ تنسيق Dalvik القابل للتنفيذ عليها والتي تستخدم هي نفسها البادئة " r " لسجلاتها. (أي أن هذا القرار يجعل من الممكن التحدث عن كل من السجلات الافتراضية والحقيقية معًا دون الحاجة إلى الإطناب.)

الوسائط التي تشير إلى قيمة حرفية لها الشكل " #+ X ". تشير بعض التنسيقات إلى قيم حرفية لا تحتوي إلا على بتات غير صفرية في البتات ذات الترتيب العالي؛ بالنسبة لهذه، يتم تمثيل الأصفار بشكل واضح في بناء الجملة، على الرغم من أنها لا تظهر في تمثيل البت.

الوسائط التي تشير إلى إزاحة عنوان التعليمات النسبية لها النموذج " + X ".

الوسائط التي تشير إلى فهرس تجمع ثابت حرفيًا لها النموذج " kind @ X "، حيث يشير " kind " إلى التجمع الثابت الذي تتم الإشارة إليه. كل كود تشغيل يستخدم مثل هذا التنسيق بشكل صريح يسمح بنوع واحد فقط من الثوابت؛ راجع مرجع كود التشغيل لمعرفة المراسلات. أنواع التجمع الثابت هي " string " (فهرس تجمع السلاسل)، و" type " (فهرس تجمع النوع)، و" field " (فهرس تجمع الحقول)، و" meth " (فهرس تجمع الأساليب)، و" site " (فهرس موقع الاتصال) ).

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

في الحالات التي لا تكون فيها قيمة التنسيق جزءًا صريحًا من بناء الجملة ولكن بدلاً من ذلك تختار متغيرًا، يتم إدراج كل متغير بالبادئة " [ X = N ] " (على سبيل المثال، " [A=2] ") للإشارة إلى المراسلات .

التنسيقات

شكل بطاقة تعريف بناء الجملة تمت تغطية رموز التشغيل البارزة
لا يوجد 00x N/A التنسيق الزائف المستخدم لأكواد التشغيل غير المستخدمة؛ مقترح للاستخدام كتنسيق اسمي لرمز تشغيل نقطة التوقف
ØØ| مرجع سابق 10x op
ب|أ| مرجع سابق 12x op vA، vB
11 ن op الخامس أ، #+ب
أأ| مرجع سابق 11x op vAA
10 طن op + أأ اذهب إلى
ØØ| المرجع AAAA 20 طن op + AAAA غوتو/16
أأ| المرجع BBBB 20 قبل الميلاد op AA، kind@BBBB التنسيق المقترح لأخطاء التحقق المحددة بشكل ثابت؛ A هو نوع الخطأ وB هو فهرس في جدول مناسب للنوع (على سبيل المثال، مراجع الطريقة لخطأ لا يوجد مثل هذا الأسلوب)
أأ| المرجع BBBB 22x op vAA، vBBBB
21 طن op vAA، +BBBB
21 ثانية op vAA، #+BBBB
21 ساعة op vAA، #+BBBB0000
op vAA، #+BBBB000000000000
21 ج op vAA، اكتب@BBBB
op vAA، field@BBBB
op vAA،method_handle@BBBB
op vAA، proto@BBBB
op vAA، string@BBBB
تحقق من الصب
فئة ثابتة
مقبض طريقة ثابت
نوع طريقة ثابت
سلسلة ثابتة
أأ| المرجع CC|BB 23x op vAA، vBB، vCC
22 ب op vAA، vBB، #+CC
ب|أ| المرجع CCCC 22 طن op vA، vB، + CCCC
22 ثانية op vA، vB، #+CCCC
22 ج op vA، vB، اكتب@CCCC
op vA، vB، field@CCCC
حالة
22cs op vA، vB، fieldoff@CCCC التنسيق المقترح لتعليمات الوصول إلى الحقول المرتبطة بشكل ثابت بالتنسيق 22c
ØØ| على AAAA لو AAAA مرحبا 30 طن op +AAAAAAAA غوتو/32
ØØ| على AAAA BBBB 32x op vAAAA، vBBBB
أأ| على BBBB لو BBBB مرحبا 31ط op vAA، #+BBBBBBBB
31 طن op vAA، +BBBBBBBB
31 ج op vAA، string@BBBBBBBB سلسلة ثابتة/جامبو
أ|ز| في BBBB F|E|D|C 35 ج [ A=5 ] op {vC, vD, vE, vF, vG}, meth@BBBB
[ A=5 ] op {vC, vD, vE, vF, vG}, site@BBBB
[ A=5 ] op {vC, vD, vE, vF, vG}, type@BBBB
[ A=4 ] op {vC, vD, vE, vF}، kind @BBBB
[ A=3 ] op {vC, vD, vE}، kind @BBBB
[ A=2 ] op {vC, vD}، kind @BBBB
[ A=1 ] op {vC}، kind @BBBB
[ A=0 ] op {}، kind @BBBB

يعكس الاختيار غير المعتاد في الكتابة هنا الرغبة في إجراء العد ويكون للفهرس المرجعي نفس التسمية كما في التنسيق 3rc.

35 مللي ثانية [ A=5 ] op {vC, vD, vE, vF, vG}, vtaboff@BBBB
[ A=4 ] op {vC, vD, vE, vF}, vtaboff@BBBB
[ A=3 ] op {vC, vD, vE}, vtaboff@BBBB
[ A=2 ] op {vC, vD}, vtaboff@BBBB
[ A=1 ] op {vC}، vtaboff@BBBB

يعكس الاختيار غير المعتاد في الكتابة هنا الرغبة في إجراء العد ويكون للفهرس المرجعي نفس التسمية كما في التنسيق 3rms.

التنسيق المقترح لتعليمات invoke-virtual والاستدعاء invoke-super بالتنسيق 35c
35 ميل [ A=5 ] op {vC، vD، vE، vF، vG}، inline@BBBB
[ A=4 ] op {vC, vD, vE, vF}, inline@BBBB
[ A=3 ] op {vC, vD, vE}, inline@BBBB
[ A=2 ] op {vC, vD}, inline@BBBB
[ A=1 ] op {vC}، inline@BBBB

يعكس الاختيار غير المعتاد في الكتابة هنا الرغبة في إجراء العد والفهرس المرجعي بنفس التسمية كما في التنسيق 3rmi.

التنسيق المقترح لتعليمات invoke-static والتعليمات invoke-virtual بالتنسيق 35c
أأ| على BBBB CCCC 3rc op {vCCCC .. vNNNN}، meth@BBBB
op {vCCCC .. vNNNN}، site@BBBB
op {vCCCC .. vNNNN}، اكتب@BBBB

حيث NNNN = CCCC+AA-1 ، أي أن A يحدد العدد 0..255 ، و C يحدد السجل الأول

3rms op {vCCCC .. vNNNN}، vtaboff@BBBB

حيث NNNN = CCCC+AA-1 ، أي أن A يحدد العدد 0..255 ، و C يحدد السجل الأول

التنسيق المقترح لتعليمات invoke-virtual والاستدعاء invoke-super بالتنسيق 3rc
3rmi op {vCCCC .. vNNNN}، inline@BBBB

حيث NNNN = CCCC+AA-1 ، أي أن A يحدد العدد 0..255 ، و C يحدد السجل الأول

التنسيق المقترح لتعليمات invoke-static والاستدعاء invoke-virtual بالتنسيق 3rc
أ|ز| على BBBB F|E|D|C HHHH 45 سم مكعب [ A=5 ] op {vC، vD، vE، vF، vG}، meth@BBBB، proto@HHHH
[ A=4 ] op {vC، vD، vE، vF}، meth@BBBB، proto@HHHH
[ A=3 ] op {vC، vD، vE}، meth@BBBB، proto@HHHH
[ A=2 ] op {vC، vD}، meth@BBBB، proto@HHHH
[ A=1 ] op {vC}، meth@BBBB، proto@HHHH
استدعاء متعدد الأشكال
أأ| المرجع BBBB CCCC HHHH 4rcc op> {vCCCC .. vNNNN}، meth@BBBB، proto@HHHH

حيث NNNN = CCCC+AA-1 ، أي أن A يحدد العدد 0..255 ، و C يحدد السجل الأول

استدعاء متعدد الأشكال/النطاق
أأ| على BBBB لو BBBB BBBB BBBB مرحبا 51 لتر op vAA، #+BBBBBBBBBBBBBB على نطاق ثابت