قالب‌های دستورالعمل اجرایی Dalvik

این صفحه قالب‌های دستورالعمل استفاده‌شده توسط قالب اجرایی 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, #+BBBB0000
op vAA, #+BBBB000000000000
 
۲۱ سانتی‌متر 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 ‫۲۳ برابر 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@CCCC
op 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@BBBB
op {vCCCC .. vNNNN}, site@BBBB
op {vCCCC .. vNNNN}, type@BBBB

که در آن NNNN = CCCC+AA-1، یعنی A تعداد 0..255 را تعیین می‌کند، و C اولین ثبت را تعیین می‌کند

 
‫۳ اتاق op {vCCCC .. vNNNN}, vtaboff@BBBB

که در آن NNNN = CCCC+AA-1، یعنی A تعداد 0..255 را تعیین می‌کند، و C اولین ثبت را تعیین می‌کند

قالب پیشنهادی برای پیوند ثابت invoke-virtual و دستورالعمل‌های قالب invoke-super3rc
‫۳rmi op {vCCCC .. vNNNN}, inline@BBBB

که در آن NNNN = CCCC+AA-1، یعنی A تعداد 0..255 را تعیین می‌کند، و C اولین ثبت را تعیین می‌کند

قالب پیشنهادی برای 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

که در آن NNNN = CCCC+AA-1، یعنی A تعداد 0..255 را تعیین می‌کند، و C اولین ثبت را تعیین می‌کند

فراخوانی-چندریختی/محدوده
AA|op BBBBlo BBBB BBBB BBBBhi ‫51l op vAA،‏ #+BBBBBBBBBBBBBBBB const-wide