تعرض هذه الصفحة تنسيقات التعليمات المستخدَمة في تنسيق ملف 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, #+BBBB0000op vAA, #+BBBB000000000000
|
||
21c | op vAA, type@BBBBop vAA, field@BBBBop vAA, method_handle@BBBBop vAA, proto@BBBBop 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@CCCCop 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@BBBBop {vCCCC .. vNNNN}, site@BBBBop {vCCCC .. vNNNN}, type@BBBBحيث يحدّد |
|
3rms | op {vCCCC .. vNNNN}, vtaboff@BBBBحيث يحدّد |
التنسيق المقترَح لملف invoke-virtual
المرتبط بشكل ثابت وتعليمات invoke-super بتنسيق 3rc
|
|
3rmi | op {vCCCC .. vNNNN}, inline@BBBBحيث يحدّد |
التنسيق المقترَح لـ 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
حيث يحدّد |
invoke-polymorphic/range |
AA|op BBBBlo BBBB BBBB BBBBhi | 51 لتر | op vAA, #+BBBBBBBBBBBBBBBB |
const-wide |