این صفحه قالبهای دستورالعمل استفادهشده توسط قالب اجرایی Dalvik (DEX) و بایتکد Dalvik را فهرست میکند. این سند باید همراه با سند مرجع بایتکد استفاده شود.
شرحهای بیتی
ستون اول در جدول قالب، چیدمان بیتی قالب را فهرست میکند. این رشته از یک یا چند «کلمه» تشکیل شده است که با فاصله از هم جدا شدهاند و هرکدام
یک واحد کد ۱۶ بیتی را توصیف میکنند. هر نویسه در یک کلمه
نشاندهنده چهار بیت است که از بیتهای بالا به پایین خوانده میشود و نوارهای عمودی
(«|») برای کمک به خواندن در میان آنها قرار گرفته است. حروف بزرگ
بهصورت متوالی از «A» برای نشان دادن فیلدهای درون
قالب استفاده میشود (که سپس توسط ستون نحو بیشتر تعریف میشوند). اصطلاح
«op» برای نشان دادن موقعیت یک کد عملیاتی هشت بیتی
در قالب استفاده میشود. از صفر خطخورده ("Ø") برای نشان دادن اینکه همه بیتها باید در موقعیت نشاندادهشده صفر باشند استفاده میشود.
در بیشتر موارد، حروفگذاری از واحدهای کد قبلی به واحدهای کد بعدی، و از ترتیب پایین به ترتیب بالا در یک واحد کد پیش میرود. بااینحال، چند استثنا برای این قانون کلی وجود دارد که بهمنظور یکسانسازی نامگذاری بخشهای با معنای مشابه در قالبهای مختلف دستورالعمل انجام میشود. این موارد بهطور صریح در توضیحات قالب ذکر شدهاند.
برای مثال، قالب «B|A|op CCCC» نشان میدهد
که قالب از دو واحد کد ۱۶ بیتی تشکیل شده است. کلمه اول شامل کد عملیات در هشت بیت پایین و یک جفت مقدار چهار بیتی در هشت بیت بالا است؛ و کلمه دوم شامل یک مقدار ۱۶ بیتی تکی است.
شناسههای قالب
ستون دوم در جدول قالب نشاندهنده شناسه کوتاه برای قالب است که در اسناد دیگر و در کد برای شناسایی قالب استفاده میشود.
اکثر شناسههای قالب از سه نویسه تشکیل شدهاند، دو رقم و سپس یک حرف. اولین رقم نشاندهنده تعداد واحدهای کد ۱۶ بیتی در
قالب است. رقم دوم نشاندهنده حداکثر تعداد ثباتهایی است که قالب دربرمیگیرد (حداکثر، زیرا برخیاز قالبها میتوانند تعداد متغیری از ثباتها را در خود جای دهند)، با تعیین ویژه «r» که نشان میدهد محدودهای از ثباتها کدبندی شده است. حرف آخر بهصورت نیمهیادآور
نوع هرگونه داده اضافی کدبندیشده توسط قالب را نشان میدهد. برای مثال،
قالب «21t» دارای طول دو است، شامل یک مرجع ثبت است،
و علاوهبراین شامل یک هدف شاخه است.
قالبهای پیونددهی ایستا پیشنهادی دارای پسوند اضافی
«s» هستند که درمجموع چهار نویسه میشود. بههمین ترتیب،
قالبهای پیونددهی «درونخطی» پیشنهادی دارای پسوند اضافی «i»
هستند. (در این زمینه، پیونددهی درونخطی مانند پیونددهی ایستا است،
با این تفاوت که ارتباط مستقیمتری با پیادهسازی ماشین دارد.)
درنهایت، چند قالب پیشنهادی عجیب (برای نمونه،
"20bc") شامل دو بخش داده است که هر دو
در شناسه قالب آن نشان داده میشوند.
فهرست کامل حروف کد نوع بهشرح زیر است. توجه داشته باشید که برخیاز فرمها بسته به قالب، اندازههای مختلفی دارند:
| یادآور | اندازههای بیت | معنی |
|---|---|---|
| b | 8 | بایت b امضاشده فوری |
| c | ۱۶، ۳۲ | شاخص استخر constant |
| f | 16 | ثابتهای واسط (فقط در قالبهای پیوندشده ایستا استفاده میشود) |
| ساعت | 16 | امضای فوری hat (بیتهای مرتبه بالای مقدار ۳۲ یا ۶۴ بیتی؛
بیتهای مرتبه پایین همه 0 هستند)
|
| i | 32 | عدد صحیح int، یا شناور ۳۲ بیتی |
| م | 64 | long علامتدار فوری، یا double ۶۴ بیتی |
| پشت | 16 | ثابتهای method (فقط در قالبهای پیوندشده ایستا استفاده میشود) |
| تصویر | 4 | nibble امضاشده فوری |
| ث | 16 | کوتهویدیو امضاشده فوری |
| t | ۸، ۱۶، ۳۲ | هدف انشعاب |
| x | 0 | دادههای اضافی وجود ندارد |
نحو
ستون سوم جدول قالب نشاندهنده نحو انسانمحور برای دستورالعملهایی است که از قالب نشاندادهشده استفاده میکنند. هر دستورالعمل با کد عملیاتی نامگذاریشده شروع میشود و بهصورت اختیاری با یک یا چند آرگومان دنبال میشود که خودشان با کاما از هم جدا میشوند.
هرجا که آرگومان به فیلدی از ستون اول اشاره میکند، حرف مربوط به آن فیلد در دستورگان نشان داده میشود و برای هر چهار بیت فیلد یکبار تکرار میشود. برای مثال، فیلد هشت بیتی با برچسب
«BB» در ستون اول، در ستون نحو نیز برچسب
«BB» خواهد داشت.
متغیرهای مستقلی که نام ثبات را مشخص میکنند، بهصورت «vX» هستند.
پیشوند «v» بهجای پیشوند رایجتر
«r» انتخاب شده است تا دقیقاً از تداخل با معماریهای (غیرمجازی)
که ممکن است قالب Dalvik Executable در آنها پیادهسازی شود و خودشان
از پیشوند «r» برای ثباتهایشان استفاده میکنند جلوگیری شود. (یعنی این تصمیم امکان صحبت کردن درباره هر دو ثبت مجازی و واقعی را با هم فراهم میکند
بدون نیاز به استفاده از عبارات غیرمستقیم.)
آرگومانهایی که مقدار حرفی را نشان میدهند بهصورت
"#+X" هستند. برخیاز قالبها حروفهایی را نشان میدهند که فقط
در بیتهای مرتبه بالای خود بیتهای غیرصفر دارند؛ برای این حروف، صفرها
بهطور صریح در دستورگان نشان داده میشوند، حتی اگر در
نمایش بیتبهبیت ظاهر نشوند.
آرگومانهایی که نشاندهنده انحراف نشانی دستورالعمل نسبی هستند،
بهصورت «+X» هستند.
آرگومانهایی که نشاندهنده شاخص استخر ثابت تحتاللفظی هستند، شکل
«kind@X» را دارند، که در آن «kind»
نشان میدهد به کدام استخر ثابت ارجاع داده میشود. هر کد عملیاتی که از چنین قالبی استفاده میکند، بهطور صریح فقط یک نوع ثابت را مجاز میکند؛ برای فهمیدن مطابقت، به مرجع کد عملیاتی مراجعه کنید. انواع استخر ثابت عبارتاند از «string» (شاخص استخر رشته)، «type» (شاخص استخر نوع)، «field» (شاخص استخر فیلد)، «meth» (شاخص استخر روش)، و «site» (شاخص سایت تماس).
مشابه با نمایش شاخصهای استخر ثابت، شکلهای پیشنهادی (اختیاری) نیز وجود دارد که نشاندهنده افستها یا شاخصهای پیشپیوندشده هستند. دو نوع مقدار پیشپیوندشده پیشنهادی وجود دارد: جابهجاییهای جدول مجازی
(با «vtaboff» نشان داده میشود) و جابهجاییهای فیلد (با
«fieldoff» نشان داده میشود).
در مواردی که مقدار قالب بهطور صریح بخشی از نحو نیست
اما درعوض گونهای را انتخاب میکند، هر گونه با پیشوند
«[X=N]» (مثلاً «[A=2]») فهرست میشود تا
مطابقت را نشان دهد.
قالب ها
| قالب | شناسه | نحو | کدهای عملیاتی مهم پوشش دادهشده |
|---|---|---|---|
| نامشخص | ۰۰ برابر | N/A |
قالب شبه استفادهشده برای کدهای عملیاتی استفادهنشده؛ پیشنهادشده برای استفاده بهعنوان قالب اسمی برای کد عملیاتی نقطه توقف |
| ØØ|op | ۱۰ برابر | op |
|
| B|A|op | ۱۲ برابر | op vA، vB |
|
| ۱۱n | op vA، #+B |
||
| AA|op | ۱۱ برابر | op vAA |
|
| ۱۰ | op +AA |
رفتن به | |
| ØØ|op AAAA | ۲۰ تن | op +AAAA |
goto/16 |
| AA|op BBBB | ۲۰ قبلاز میلاد | op AA, kind@BBBB |
قالب پیشنهادی برای خطاهای درستیسنجی تعیینشده بهصورت ایستا؛ A نوع خطا و B نمایهای در جدول مناسب نوع است (مثلاً ارجاعهای روش برای خطای «چنین روشی وجود ندارد») |
| AA|op BBBB | ۲۲ برابر | op vAA, vBBBB |
|
| 21t | op vAA, +BBBB |
||
| ۲۱ ثانیه | op vAA, #+BBBB |
||
| ۲۱ ساعت | op vAA, #+BBBB0000op vAA, #+BBBB000000000000
|
||
| ۲۱ سانتیمتر | 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 | ۲۳ برابر | op vAA, vBB, vCC |
|
| ۲۲ب | op vAA، vBB، #+CC |
||
| B|A|op CCCC | 22t | op vA، vB، +CCCC |
|
| ۲۲ ثانیه | op vA، vB، #+CCCC |
||
| ۲۲c | op vA، vB، type@CCCCop vA، vB، field@CCCC
|
نمونهای از | |
| ۲۲ سنت | op vA، vB، fieldoff@CCCC |
قالب پیشنهادی برای دستورالعملهای دسترسی به فیلد پیوندشده ایستا از قالب 22c | |
| ØØ|op AAAAlo AAAAhi | ۳۰ تن | op +AAAAAAAA |
goto/32 |
| ØØ|op AAAA BBBB | ۳۲x | op vAAAA, vBBBB |
|
| AA|op BBBBlo BBBBhi | 31i | op vAA, #+BBBBBBBB |
|
| ۳۱t | op vAA، +BBBBBBBB |
||
| ۳۱ سنت | op vAA، string@BBBBBBBB |
const-string/jumbo | |
| A|G|op BBBB F|E|D|C | ۳۵ سنت | [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 داشته باشند. |
|
| ۳۵ میلیثانیه | [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
|
|
| ۳۵ مایل | [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که در آن |
|
| ۳ اتاق | op {vCCCC .. vNNNN}, vtaboff@BBBBکه در آن |
قالب پیشنهادی برای پیوند ثابت invoke-virtual
و دستورالعملهای قالب invoke-super3rc
|
|
| ۳rmi | op {vCCCC .. vNNNN}, inline@BBBBکه در آن |
قالب پیشنهادی برای invoke-static پیوندشده درونخطی
و invoke-virtual دستورالعمل قالب 3rc
|
|
| A|G|op BBBB F|E|D|C HHHH | ۴۵ سانتیمتر مکعب |
[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
|
فراخوانی چندریختی |
| AA|op BBBB CCCC HHHH | 4rcc |
op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH
که در آن |
فراخوانی-چندریختی/محدوده |
| AA|op BBBBlo BBBB BBBB BBBBhi | 51l | op vAA، #+BBBBBBBBBBBBBBBB |
const-wide |