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

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

الأوصاف على مستوى الوحدات البِتّية

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

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

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

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

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

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

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

في ما يلي القائمة الكاملة لحروف رمز النوع. يُرجى العلم أنّ بعض النماذج لها أحجام مختلفة، حسب التنسيق:

وسيلة استذكار أحجام الوحدات المعنى
b 8 بايت موقَّع فوري
c 16، 32 مؤشر مجموعة ثابتة
f 16 ثوابِت interface (تُستخدَم فقط في التنسيقات المرتبطة بشكل ثابت)
ساعة 16 عدد hat فوري موقّع (البتات ذات الترتيب الأعلى لقيمة 32 أو 64 بت، وتكون البتات ذات الترتيب الأدنى كلها 0)
i 32 عدد صحيح i موقَّت وموجب، أو عدد عائم بسعة 32 بت
l 64 عدد صحيح طويل موقَّع فورًا أو عدد صحيح مزدوج بسعة 64 بت
د 16 ثوابت مالعلاقة (تُستخدَم فقط في التنسيقات المرتبطة بشكل ثابت)
n 4 nibble موقَّع فوري
s 16 قصيرة موقَّعة فورًا
t 8 أو 16 أو 32 استهداف فرع
x 0 لا تتوفّر بيانات إضافية

بناء الجملة

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

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

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

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

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

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

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

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

التنسيقات

التنسيق رقم التعريف بناء الجملة رموز التشغيل البارزة التي يتمّ تضمينها
لا ينطبق 00x N/A تنسيق زائف يُستخدَم لتعليمات التشغيل غير المستخدَمة، ويُنصح باستخدامه كتنسيق عادي لتعليمات التشغيل الخاصة بنقطة التوقف
ØØ|op ‫10x op  
ب|أ|op ‫12x op vA وvB  
11n op vA, #+B  
AA|op 11x op vAA  
‫10t op +AA الانتقال إلى
ØØ|op AAAA 20t op +AAAA goto/16
AA|op BBBB 20bc op AA، kind@BBBB التنسيق المقترَح لأخطاء إثبات الملكية التي يتم تحديدها بشكلٍ ثابت: "أ" هو نوع الخطأ و"ب" هو فهرس في جدول مناسب للنوع (مثل مراجع الطريقة لخطأ "لا تتوفّر طريقة بهذا الاسم")
AA|op BBBB ‫22x op vAA وvBBBB  
21t op vAA, +BBBB  
21 ثانية op vAA، #+BBBB  
21 ساعة op vAA, #+BBBB0000
op vAA, #+BBBB000000000000
 
21c op vAA, type@BBBB
op vAA, field@BBBB
op vAA, method_handle@BBBB
op vAA, proto@BBBB
op vAA, string@BBBB
check-cast
const-class
const-method-handle
const-method-type
const-string
AA|op CC|BB ‫23 مرة op vAA وvBB وvCC  
22b op vAA وvBB و‎#+CC  
ب|أ|op CCCC 22t op vA, vB, +CCCC  
22 ثانية op vA, vB, #+CCCC  
22c op vA, vB, type@CCCC
op vA, vB, field@CCCC
instance-of
22cs op vA, vB, fieldoff@CCCC التنسيق المقترَح لتعليمات الوصول إلى الحقول المرتبطة بشكل ثابت من التنسيق 22c
ØØ|op AAAAlo AAAAhi 30t op +AAAAAAAA goto/32
ØØ|op AAAA BBBB ۳۲x op vAAAA، vBBBB  
AA|op BBBBlo BBBBhi 31i op vAA, #+BBBBBBBB  
31t op vAA, +BBBBBBBB  
31(ج) op vAA, string@BBBBBBBB const-string/jumbo
A|G|op BBBB F|E|D|C 35c [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
56.3 كم [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
AA|op BBBB CCCC 3rc op {vCCCC .. vNNNN}, meth@BBBB
op {vCCCC .. vNNNN}, site@BBBB
op {vCCCC .. vNNNN}, type@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
أ|ج|op ببب ف|هـ|د|ج ححح ‫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
invoke-polymorphic
AA|op BBBB CCCC HHHH 4rcc op> {vCCCC .. vNNNN}، meth@BBBB، proto@HHHH

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

invoke-polymorphic/range
AA|op BBBBlo BBBB BBBB BBBBhi 51 لتر op vAA, #+BBBBBBBBBBBBBBBB const-wide