فرمت های دستورات اجرایی دالویک

این صفحه فرمت‌های دستورالعمل استفاده شده توسط فرمت اجرایی Dalvik (DEX) و بایت کد Dalvik را فهرست می‌کند. قرار است در ارتباط با سند مرجع بایت کد استفاده شود.

توضیحات بیتی

ستون اول جدول فرمت، طرح بیتی قالب را فهرست می کند. این شامل یک یا چند کلمه "کلمه" جدا شده با فاصله است که هر کدام یک واحد کد 16 بیتی را توصیف می کنند. هر کاراکتر در یک کلمه نشان دهنده چهار بیت است که از بیت های بالا به پایین خوانده می شود، با نوارهای عمودی (" | ") که برای کمک به خواندن در هم قرار گرفته اند. حروف بزرگ به ترتیب از " A " برای نشان دادن فیلدهای درون قالب استفاده می شود (که سپس توسط ستون نحو مشخص می شود). اصطلاح " op " برای نشان دادن موقعیت یک کد عملیاتی هشت بیتی در قالب استفاده می شود. یک صفر بریده بریده (" Ø ") برای نشان دادن اینکه همه بیت ها باید در موقعیت مشخص شده صفر باشند استفاده می شود.

در بیشتر موارد، حروف از واحدهای کد قبلی به واحدهای کد بعدی و از مرتبه پایین به مرتبه بالا در واحد کد منتقل می شود. با این حال، چند استثنا برای این قاعده کلی وجود دارد، که به این منظور انجام می شود که نام گذاری قسمت های مشابه در قالب های مختلف دستورالعمل یکسان باشد. این موارد به صراحت در توضیحات قالب ذکر شده است.

به عنوان مثال، فرمت " B|A| op CCCC " نشان می دهد که فرمت از دو واحد کد 16 بیتی تشکیل شده است. کلمه اول شامل کد عملیاتی در هشت بیت کم و یک جفت مقدار چهار بیتی در هشت بیت بالا است. و کلمه دوم از یک مقدار 16 بیتی تشکیل شده است.

فرمت شناسه ها

ستون دوم جدول فرمت نشان دهنده شناسه کوتاه قالب است که در اسناد دیگر و در کد برای شناسایی قالب استفاده می شود.

اکثر شناسه‌های قالب شامل سه کاراکتر، دو رقم و یک حرف هستند. رقم اول تعداد واحدهای کد 16 بیتی در قالب را نشان می دهد. رقم دوم حداکثر تعداد رجیسترهایی را نشان می‌دهد که فرمت حاوی آن است (حداکثر، زیرا برخی فرمت‌ها می‌توانند تعداد متغیری از ثبات‌ها را در خود جای دهند)، با نام ویژه " r " که نشان می‌دهد محدوده‌ای از ثبات‌ها کدگذاری شده‌اند. حرف آخر به صورت نیمه یادگاری نوع هر گونه داده اضافی کدگذاری شده توسط قالب را نشان می دهد. به عنوان مثال، فرمت " 21t " به طول دو است، حاوی یک مرجع ثبت است، و علاوه بر این شامل یک هدف شاخه است.

فرمت‌های پیوند ثابت پیشنهادی دارای پسوند « s » اضافی هستند که در مجموع چهار کاراکتر می‌شوند. به طور مشابه، فرمت‌های پیوندی «داخلی» پیشنهادی پسوند « i » اضافی دارند. (در این زمینه، پیوند درون خطی مانند پیوند استاتیک است، به جز با پیوندهای مستقیم بیشتر با پیاده سازی ماشین.) در نهایت، چند فرمت پیشنهادی عجیب و غریب (مثلاً " 20bc ") شامل دو قطعه داده است که هر دو در ID فرمت آن نشان داده شده اند. .

لیست کامل حروف تایپ کد به شرح زیر است. توجه داشته باشید که برخی از فرم ها بسته به فرمت، اندازه های متفاوتی دارند:

حفظی اندازه بیت معنی
ب 8 امضای فوری b yte
ج 16، 32 ج شاخص مستمر استخر
f 16 ثابت های میانی (فقط در قالب های پیوندی استاتیک استفاده می شود)
ساعت 16 h امضا شده فوری در (بیت های مرتبه بالا با مقدار 32 یا 64 بیت؛ بیت های مرتبه پایین همه 0 هستند)
من 32 امضای فوری یا شناور 32 بیتی
ل 64 امضای فوری یا دوبل 64 بیتی
متر 16 ثابت‌های روش m (فقط در قالب‌های پیوندی استاتیک استفاده می‌شود)
n 4 امضای فوری n ibble
س 16 فورا امضا شده است
تی 8، 16، 32 شاخه t arget
ایکس 0 بدون داده های اضافی

نحو

ستون سوم جدول قالب، نحو انسان گرا را برای دستورالعمل هایی که از قالب مشخص شده استفاده می کنند، نشان می دهد. هر دستورالعمل با opcode نامگذاری شده شروع می شود و به صورت اختیاری با یک یا چند آرگومان دنبال می شود که خود با کاما از هم جدا می شوند.

هر جا که یک آرگومان به یک فیلد از ستون اول اشاره می کند، حرف مربوط به آن فیلد در نحو نشان داده می شود و برای هر چهار بیت فیلد یک بار تکرار می شود. به عنوان مثال، یک فیلد هشت بیتی با برچسب " BB " در ستون اول نیز دارای برچسب " BB " در ستون نحو است.

آرگومان هایی که یک ثبات را نامگذاری می کنند شکل " v X " دارند. پیشوند " v " به جای رایج تر " r " دقیقاً برای جلوگیری از تضاد با معماری های (غیر مجازی) انتخاب شد که قالب اجرایی Dalvik ممکن است روی آنها پیاده سازی شود و خودشان از پیشوند " r " برای ثبات های خود استفاده می کنند. (یعنی این تصمیم این امکان را فراهم می کند که در مورد هر دو رجیستر مجازی و واقعی بدون نیاز به دور و بری صحبت کنیم.)

آرگومان هایی که یک مقدار تحت اللفظی را نشان می دهند شکل " #+ X " دارند. برخی از قالب‌ها بیانگر کلماتی هستند که فقط بیت‌های غیرصفری در بیت‌های مرتبه بالا دارند. برای اینها، صفرها به صراحت در نحو نمایش داده می شوند، حتی اگر در نمایش بیتی ظاهر نمی شوند.

آرگومان هایی که نشان دهنده یک آفست آدرس دستورالعمل نسبی هستند به شکل " + X " هستند.

آرگومان‌هایی که نشان‌دهنده یک شاخص ثابت تحت اللفظی هستند به شکل " kind @ X " هستند، که در آن " kind " نشان می‌دهد که به کدام استخر ثابت اشاره می‌شود. هر کد عملیاتی که از چنین قالبی استفاده می کند به صراحت فقط یک نوع ثابت را مجاز می کند. برای پی بردن به متناظر به مرجع opcode مراجعه کنید. انواع استخر ثابت عبارتند از: " string " (شاخص استخر رشته)، " type " (شاخص استخر نوع)، " field " (شاخص استخر میدان)، " meth " (شاخص استخر روش) و " site " (شاخص سایت تماس). ).

مشابه نمایش شاخص‌های استخر ثابت، فرم‌های پیشنهادی (اختیاری) نیز وجود دارد که نشان‌دهنده افست‌ها یا شاخص‌های از پیش پیوند شده است. دو نوع مقدار پیش‌پیوندی پیشنهادی وجود دارد: آفست‌های vtable (که با « vtaboff » نشان داده می‌شوند) و آفست‌های فیلد (با نشان‌دادن « fieldoff »).

در مواردی که یک مقدار قالب به صراحت بخشی از نحو نیست اما در عوض یک نوع را انتخاب می کند، هر گونه با پیشوند " [ X = N ] " (مثلا، " [A=2] ") فهرست می شود تا مطابقت را نشان دهد. .

فرمت ها

قالب شناسه نحو Opcodes قابل توجه تحت پوشش
N/A 00x N/A شبه قالب مورد استفاده برای کدهای استفاده نشده. برای استفاده به عنوان فرمت اسمی برای کد نقطه شکست پیشنهاد شده است
ØØ| op 10 برابر op
ب|الف| op 12 برابر op vA، vB
11n op vA، #+B
AA| op 11 برابر op vAA
10 تن op +AA رفتن به
ØØ| عملیات AAAA 20 تن op +AAAA goto/16
AA| عملیات BBBB 20 قبل از میلاد op AA، kind@BBBB فرمت پیشنهادی برای خطاهای تأیید صحت تعیین شده به صورت ایستا؛ A نوع خطا و B شاخصی در جدول مناسب نوع است (مثلاً مراجع روش برای خطای بدون چنین روشی)
AA| عملیات BBBB 22 برابر op vAA، vBBBB
21 تن op vAA، +BBBB
21 op vAA، #+BBBB
ساعت 21 op vAA، #+BBBB0000
op vAA، #+BBBB000000000000
21c op vAA، نوع@BBBB
op vAA، field@BBBB
op vAA، method_handle@BBBB
op vAA، proto@BBBB
op vAA، string@BBBB
چک بازیگران
کلاس ثابت
const-روش-دسته
const-روش-نوع
const-string
AA| op CC|BB 23 برابر op vAA، vBB، vCC
22b op vAA، vBB، #+CC
ب|الف| عملیات CCCC 22 تن op vA، vB، +CCCC
22 ثانیه op vA، vB، #+CCCC
22c op vA، vB، type@CCCC
op vA، vB، field@CCCC
به عنوان مثال از
22cs op vA، vB، fieldoff@CCCC فرمت پیشنهادی برای دستورالعمل‌های دسترسی میدانی مرتبط با فرمت 22c
ØØ| op AAAA lo AAAA سلام 30 تن op +AAAAAAAA goto/32
ØØ| عملیات AAAA BBBB 32 برابر op vAAAA، vBBBB
AA| op BBBB lo BBBB سلام 31i op vAA، #+BBBBBBBB
31 تن op vAA، +BBBBBBBB
31c 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 با پیوند استاتیک
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
AA| عملیات 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 اولین ثبات را تعیین می کند.

3 میلی‌ثانیه 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 مرتبط شده
A|G| عملیات 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
فراخوانی-چند شکلی
AA| عملیات BBBB CCCC HHHH 4 سی سی op> {vCCCC .. vNNNN}، meth@BBBB، proto@HHHH

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

فراخوانی-چند شکلی/محدوده
AA| op BBBB lo BBBB BBBB BBBB سلام 51 لیتر op vAA، #+BBBBBBBBBBBBBBBBB به طور گسترده