Bu sayfa, Dalvik çalıştırılabilir (DEX) formatı ve Dalvik bayt kodu tarafından kullanılan talimat formatlarını listeler. Bayt kodu referans belgesiyle birlikte kullanılması amaçlanmıştır.
Bit bazında açıklamalar
Biçim tablosundaki ilk sütun, biçimin bit düzeyinde düzenini listeler. Her biri 16 bitlik bir kod birimini tanımlayan bir veya daha fazla boşlukla ayrılmış "kelimeden" oluşur. Bir sözcükteki her karakter, okumaya yardımcı olmak için serpiştirilmiş dikey çubuklarla (" |
") yüksek bitlerden düşüğe doğru okunan dört biti temsil eder. " A
" harfinden itibaren sıralanan büyük harfler, format içindeki alanları belirtmek için kullanılır (bunlar daha sonra sözdizimi sütunu tarafından daha ayrıntılı olarak tanımlanır). " op
" terimi, sekiz bitlik bir işlem kodunun format içindeki konumunu belirtmek için kullanılır. Belirtilen konumda tüm bitlerin sıfır olması gerektiğini belirtmek için kesikli sıfır (" Ø
") kullanılır.
Çoğunlukla, harflendirme önceki kod birimlerinden sonraki kod birimlerine ve bir kod birimi içinde düşük düzeyden yüksek düzeye doğru ilerler. Ancak bu genel kuralın birkaç istisnası vardır ve bunlar, benzer anlamdaki parçaların isimlendirilmesinin farklı talimat formatlarında aynı olmasını sağlamak için yapılır. Bu durumlar format açıklamalarında açıkça belirtilmiştir.
Örneğin, " B|A| op CCCC
" formatı, formatın iki adet 16 bitlik kod biriminden oluştuğunu belirtir. İlk kelime, düşük sekiz bitteki işlem kodundan ve yüksek sekiz bitteki bir çift dört bitlik değerden oluşur; ve ikinci kelime 16 bitlik tek bir değerden oluşur.
Kimlikleri biçimlendir
Format tablosundaki ikinci sütun, diğer belgelerde ve kodda formatı tanımlamak için kullanılan formatın kısa tanımlayıcısını gösterir.
Çoğu format kimliği üç karakterden, iki rakamdan ve ardından bir harften oluşur. İlk hane, formattaki 16 bitlik kod birimlerinin sayısını gösterir. İkinci hane, formatın içerdiği maksimum kayıt sayısını belirtir (bazı formatlar değişken sayıda kayıt barındırabildiğinden maksimum), " r
" özel tanımı, bir kayıt aralığının kodlandığını belirtir. Son harf, format tarafından kodlanan herhangi bir ekstra verinin türünü yarı anımsatıcı olarak belirtir. Örneğin, " 21t
" formatı iki uzunluktadır, bir kayıt referansı içerir ve ayrıca bir dal hedefi içerir.
Önerilen statik bağlantı formatlarında ek bir " s
" son eki bulunur, bu da onları toplamda dört karakter yapar. Benzer şekilde, önerilen "satır içi" bağlantı formatlarında ek bir " i
" son eki bulunur. (Bu bağlamda, satır içi bağlantı, bir makinenin uygulamasına daha doğrudan bağlantıların olması dışında statik bağlantıya benzer.) Son olarak, önerilen birkaç tuhaf format (örneğin, " 20bc
"), her ikisi de format kimliğinde temsil edilen iki veri parçasını içerir. .
Typecode harflerinin tam listesi aşağıdaki gibidir. Bazı formların formata bağlı olarak farklı boyutları olduğunu unutmayın:
anımsatıcı | Bit Boyutları | Anlam |
---|---|---|
B | 8 | anında imzalanmış bayt |
C | 16, 32 | sabit havuz indeksi |
F | 16 | arayüz sabitleri (yalnızca statik olarak bağlantılı formatlarda kullanılır) |
H | 16 | anında imzalı h at (32 veya 64 bitlik bir değerin yüksek dereceli bitleri; düşük dereceli bitlerin tümü 0 ) |
Ben | 32 | anında imzalı i nt veya 32 bit kayan nokta |
ben | 64 | anında imzalı uzun veya 64 bit çift |
M | 16 | yöntem sabitleri (yalnızca statik olarak bağlantılı formatlarda kullanılır) |
N | 4 | hemen imzalı n ibble |
S | 16 | hemen imzalandı kısa |
T | 8, 16, 32 | şube hedefi |
X | 0 | ek veri yok |
Sözdizimi
Format tablosunun üçüncü sütunu, belirtilen formatı kullanan talimatlar için insan odaklı sözdizimini gösterir. Her talimat, adlandırılmış işlem koduyla başlar ve isteğe bağlı olarak, kendileri de virgülle ayrılmış bir veya daha fazla bağımsız değişkenle takip edilir.
Bir argümanın ilk sütundaki bir alana gönderme yaptığı her yerde, o alanın harfi sözdiziminde belirtilir ve alanın her dört biti için bir kez tekrarlanır. Örneğin, ilk sütunda " BB
" olarak etiketlenen sekiz bitlik bir alan, sözdizimi sütununda da " BB
" olarak etiketlenecektir.
Bir kaydı adlandıran argümanlar " v X
" biçimindedir. Daha yaygın olan " v
" yerine " r
" ön eki, Dalvik Yürütülebilir formatının uygulanabileceği (sanal olmayan) mimarilerle çakışmayı önlemek için seçildi; bu mimariler, kendi kayıtları için " r
" ön ekini kullanıyordu. (Yani bu karar, dolaylı anlatımlara gerek kalmadan hem sanal hem de gerçek kayıtlardan bir arada bahsetmeyi mümkün kılmaktadır.)
Bir değişmez değeri belirten bağımsız değişkenler " #+ X
" biçimindedir. Bazı formatlar, yüksek dereceli bitlerinde yalnızca sıfır olmayan bitlere sahip olan değişmez değerleri belirtir; bunlar için sıfırlar, bit düzeyinde gösterimde görünmeseler bile sözdiziminde açıkça temsil edilir.
Göreceli talimat adresi uzaklığını gösteren bağımsız değişkenler " + X
" biçimindedir.
Gerçek bir sabit havuz indeksini belirten bağımsız değişkenler " kind @ X
" biçimindedir; burada " kind
" hangi sabit havuza atıfta bulunulduğunu belirtir. Böyle bir formatı kullanan her işlem kodu açıkça yalnızca bir tür sabite izin verir; yazışmayı anlamak için işlem kodu referansına bakın. Sabit havuz türleri şunlardır: " string
" (dize havuzu dizini), " type
" (tür havuzu dizini), " field
" (alan havuzu dizini), " meth
" (yöntem havuzu dizini) ve " site
" (çağrı sitesi dizini) ).
Sabit havuz endekslerinin temsiline benzer şekilde, önceden bağlantılı ofsetleri veya endeksleri gösteren önerilen (isteğe bağlı) formlar da vardır. Önerilen önceden bağlantılı değerin iki türü vardır: vtable uzaklıkları (" vtaboff
" olarak gösterilir) ve alan uzaklıkları (" fieldoff
" olarak gösterilir).
Bir biçim değerinin açıkça sözdiziminin bir parçası olmadığı ancak bunun yerine bir değişken seçtiği durumlarda, her değişken, yazışmayı belirtmek için " [ X = N ]
" (örneğin, " [A=2]
") önekiyle listelenir. .
Formatlar
Biçim | İD | Sözdizimi | Kapsanan Önemli Opcode'lar |
---|---|---|---|
Yok | 00x | N/A | kullanılmayan işlem kodları için kullanılan sözde format; kesme noktası işlem kodu için nominal format olarak kullanılması önerilir |
ØØ| operasyon | 10x | op | |
B|A| operasyon | 12x | op vA, vB | |
11n | op vA, #+B | ||
AA| operasyon | 11x | op vAA | |
10 ton | op +AA | git | |
ØØ| op AAAA | 20 ton | op +AAAA | git/16 |
AA| BBBB'den | MÖ 20 | op AA, tür@BBBB | Statik olarak belirlenen doğrulama hataları için önerilen format; A, hatanın türüdür ve B, türe uygun bir tablonun indeksidir (örneğin, böyle bir yöntem olmayan hata için yöntem referansları) |
AA| BBBB'den | 22x | op vAA, vBBBB | |
21.00 | op vAA, +BBBB | ||
21'ler | op vAA, #+BBBB | ||
21 saat | op vAA, #+BBBB0000op vAA, #+BBBB000000000000 | ||
21c | op vAA, @BBBB yazınop vAA, field@BBBBop vAA, method_handle@BBBBop vAA, proto@BBBBop vAA, string@BBBB | kontrol dökümü const sınıfı const-yöntem-tanıtıcı const-yöntem türü const-string | |
AA| op CC|BB | 23x | op vAA, vBB, vCC | |
22b | op vAA, vBB, #+CC | ||
B|A| CCCC'nin kullanımı | 22 ton | op vA, vB, +CCCC | |
22'li yaşlar | op vA, vB, #+CCCC | ||
22c | op vA, vB, type@CCCCop vA, vB, alan@CCCC | örneği | |
22cs | op vA, vB, fieldoff@CCCC | 22c formatındaki statik olarak bağlantılı alan erişim talimatları için önerilen format | |
ØØ| op AAAA lo AAAA merhaba | 30 ton | op +AAAAAAAA | git/32 |
ØØ| op AAAA BBBB | 32x | op vAAAA, vBBBB | |
AA| op BBBB ve BBBB merhaba | 31i | op vAA, #+BBBBBBBB | |
31 ton | op vAA, +BBBBBBBB | ||
31c | op vAA, string@BBBBBBBB | const-string/jumbo | |
A|G| BBBB F|E|D|C'de | 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 @BBBBBuradaki harflerdeki alışılmadık seçim, sayım ve referans indeksinin 3rc formatındakiyle aynı etikete sahip olması isteğini yansıtıyor. | |
35ms | [ 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@BBBBBuradaki harflerdeki olağandışı seçim, sayım ve referans indeksinin 3rms formatındakiyle aynı etikete sahip olması isteğini yansıtıyor. | 35c biçimindeki statik olarak bağlantılı invoke-virtual ve invoke-super talimatları için önerilen format | |
35 mil | [ 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}, satır içi@BBBBBuradaki harflerdeki alışılmadık seçim, sayım ve referans indeksinin 3rmi formatındakiyle aynı etikete sahip olması isteğini yansıtıyor. | 35c biçiminin satır içi bağlantılı invoke-static ve invoke-virtual talimatları için önerilen format | |
AA| BBBB CCCC'den | 3rc | op {vCCCC .. vNNNN}, meth@BBBBop {vCCCC .. vNNNN}, site@BBBBop {vCCCC .. vNNNN}, @BBBB yazın burada | |
3rms | op {vCCCC .. vNNNN}, vtaboff@BBBB burada | 3rc formatındaki statik olarak bağlantılı invoke-virtual ve invoke-super talimatları için önerilen format | |
3rmi | op {vCCCC .. vNNNN}, satır içi@BBBB burada | 3rc biçimindeki satır içi bağlantılı invoke-static ve invoke-virtual talimatları için önerilen format | |
A|G| BBBB F|E|D|C HHHH'de | 45cc | [ 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 | çağırma-polimorfik |
AA| BBBB CCCC'den HHHH | 4rcc | op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH burada | çağırma-polimorfik/aralık |
AA| BBBB ve BBBB BBBB BBBB merhaba | 51 litre | op vAA, #+BBBBBBBBBBBBBBBB | yapı çapında |