Bu sayfada, Dalvik yürütülebilir (DEX) biçimi ve Dalvik bayt kodu tarafından kullanılan talimat biçimleri listelenmektedir. Bayt kodu referans dokümanı ile birlikte kullanılması amaçlanmıştır.
Bit açıklamaları
Biçim tablosunun ilk sütununda, biçimin bit düzeni listelenir. Boşlukla ayrılmış bir veya daha fazla "kelime"den oluşur. Her kelime 16 bitlik bir kod birimini tanımlar. Bir kelimedeki her karakter, dört biti temsil eder. Bu bitler, okumaya yardımcı olmak için dikey çubuklarla ("|
") ayrılmış şekilde yüksek bitlerden düşük bitlere doğru okunur. "A
" ile başlayan büyük harflerden oluşan sıra, biçim içindeki alanları belirtmek için kullanılır (bu alanlar daha sonra söz dizimi sütununda daha ayrıntılı şekilde tanımlanır). "op
" terimi, sekiz bitlik bir kod komutunun biçim içindeki konumunu belirtmek için kullanılır. Belirtilen konumdaki tüm bitlerin sıfır olması gerektiğini belirtmek için eğik çizgiyle ayrılmış sıfır ("Ø
") kullanılır.
Harfler çoğunlukla önceki kod birimlerinden sonraki kod birimlerine ve bir kod birimi içinde düşük öncelikliden yüksek öncelikliye doğru ilerler. Ancak bu genel kuralın birkaç istisnası vardır. Bu istisnalar, benzer anlamlı parçaların farklı talimat biçimlerinde aynı şekilde adlandırılması için yapılır. Bu durumlar, biçim açıklamalarında açıkça belirtilir.
Örneğin, "B|A|op CCCC
" biçimi, biçimin iki 16 bit kod biriminden oluştuğunu gösterir. İlk kelime, alttaki sekiz bitte işlev kodu ve üstteki sekiz bitte bir çift dört bitlik değerden oluşur. İkinci kelime ise tek bir 16 bitlik değerden oluşur.
Biçim kimlikleri
Biçim tablosundaki ikinci sütunda, biçimin kısa tanımlayıcısını görebilirsiniz. Bu tanımlayıcı, biçimi tanımlamak için diğer belgelerde ve kodda kullanılır.
Çoğu biçim kimliği, iki basamaklı sayının ardından gelen bir harften ve üç karakterden oluşur. İlk hane, biçimdeki 16 bitlik kod birimlerinin sayısını belirtir. İkinci basamak, biçimin içerdiği maksimum kaydedici sayısını belirtir (bazı biçimler değişken sayıda kaydediciyi barındırabileceğinden maksimum değerdir). "r
" özel işareti ise bir kaydedici aralığının kodlandığını gösterir. Son harf, biçim tarafından kodlanan ek verilerin türünü yarım anımsatıcı olarak belirtir. Örneğin, "21t
" biçimi iki uzunluktadır, bir kayıt referansı ve ayrıca bir dal hedefi içerir.
Önerilen statik bağlantı biçimlerinde ek bir "s
" son eki bulunur. Bu nedenle, bu biçimlerin toplam uzunluğu dört karakterdir. Benzer şekilde, önerilen "satır içi" bağlantı biçimlerinde ek bir "i
" son eki bulunur. (Bu bağlamda satır içi bağlantı, bir makinenin uygulamasıyla daha doğrudan bağlantılar dışında sabit bağlantıya benzer.)
Son olarak, önerilen birkaç sıra dışı biçim (ör.
"20bc
") biçim kimliğinde temsil edilen iki veri parçası içerir.
Tür kodu harflerinin tam listesi aşağıda verilmiştir. Bazı formların, biçime bağlı olarak farklı boyutlara sahip olduğunu unutmayın:
Hafıza güçlendirici | Bit Boyutları | Anlamı |
---|---|---|
b | 8 | anında imzalanan byt |
c | 16, 32 | sabit havuz dizini |
f | 16 | arayfaz sabitleri (yalnızca statik olarak bağlı biçimlerde kullanılır) |
sa. | 16 | hemen imzalanmış hat (32 veya 64 bitlik bir değerin yüksek değerli bitleri; düşük değerli bitlerin tümü 0 )
|
i | 32 | Anında imzalı int veya 32 bit kayan nokta |
l | 64) | hemen imzalanan long veya 64 bit double |
m | 16 | Yöntem sabitleri (yalnızca statik olarak bağlı biçimlerde kullanılır) |
n | 4 | anında imzalanan nibble |
s | 16 | immediate signed short |
t | 8, 16, 32 | şube hedef |
x | 0 | ek veri yok |
Sözdizimi
Biçim tablosunun üçüncü sütunu, belirtilen biçimi kullanan talimatlar için kullanıcılara yönelik söz dizimi gösterir. Her talimat, adlandırılmış bir kodla başlar ve isteğe bağlı olarak virgülle ayrılmış bir veya daha fazla bağımsız değişkenle takip edilir.
Bir bağımsız değişken ilk sütundaki bir alanı ifade ettiğinde, söz konusu alanın harfi söz diziminde belirtilir ve alanın her dört biti için bir kez tekrarlanır. Örneğin, ilk sütunda "BB
" olarak etiketlenmiş sekiz bitlik bir alan, söz dizimi sütununda da "BB
" olarak etiketlenir.
Bir kaydediciyi adlandıran bağımsız değişkenler "vX
" biçimindedir. Daha yaygın olan "r
" yerine "v
" ön eki, Dalvik yürütülebilir biçiminin uygulanabileceği (sanal olmayan) mimarilerle çakışmayı önlemek için seçilmiştir. Bu mimariler de kaydedicileri için "r
" ön ekini kullanır. (Yani bu karar, dolaylı ifadeye gerek kalmadan hem sanal hem de gerçek kayıtlardan bahsetmeyi mümkün kılar.)
Değeri belirten bağımsız değişkenler "#+X
" biçimindedir. Bazı biçimler, yalnızca yüksek değerli bitlerinde sıfır olmayan bitlere sahip olan değişmez değerleri belirtir. Bu değerlerde, sıfırlar bit gösterimde görünmese bile söz dizimi içinde açıkça temsil edilir.
Göreli bir talimat adresi ofsetini belirten bağımsız değişkenler "+X
" biçimindedir.
Değişmez dize havuzu dizesini belirten bağımsız değişkenler "kind@X
" biçimindedir. Burada "kind
", hangi sabit dize havuzuna atıfta bulunulduğunu belirtir. Bu tür bir biçim kullanan her kod komutu, açıkça yalnızca bir tür sabit değere izin verir. Eşleşmeyi öğrenmek için kod komutu 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 dizinlerinin temsiline benzer şekilde, önceden bağlanmış ofsetleri veya dizinleri belirten önerilen (isteğe bağlı) formlar da vardır. Önerilen iki tür önceden bağlı değer vardır: vtable ofset'leri ("vtaboff
" olarak gösterilir) ve alan ofset'leri ("fieldoff
" olarak gösterilir).
Bir biçim değerinin açıkça söz dizimi parçası olmadığı ancak bunun yerine bir varyantın seçildiği durumlarda her varyant "[X=N]
" ön ekiyle listelenir (ör. "[A=2]
") ekleyin.
Biçimler
Biçim | Kimlik | Sözdizimi | Kapsanan Önemli Kod İşlemleri |
---|---|---|---|
Yok | 00x | N/A |
Kullanılmayan işlem kodları için kullanılan sanal biçim; bir kesme noktası işlem kodu için nominal biçim olarak kullanılması önerilir |
ØØ|op | 10 kat | op |
|
B|A|op | 12x | op vA, vB |
|
11n | op vA, #+B |
||
AA|op | 11x | op vAA |
|
10 ton | op +AA |
şuraya git | |
ØØ|op AAAA | 20 ton | op +AAAA |
goto/16 |
AA|op BBBB | 20bc | op AA, kind@BBBB |
Statik olarak belirlenen doğrulama hataları için önerilen biçim; A, hata türüdür ve B, türe uygun bir tablodaki bir dizindir (ör. böyle bir yöntem yok hatası için yöntem referansları) |
AA|op BBBB | 22 kat | op vAA, vBBBB |
|
21t | op vAA, +BBBB |
||
21 saniye | op vAA, #+BBBB |
||
21 saat | 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 kat | op vAA, vBB, vCC |
|
22b | op vAA, vBB, #+CC |
||
B|A|op CCCC | 22t | op vA, vB, +CCCC |
|
22 saniye | op vA, vB, #+CCCC |
||
22c | op vA, vB, type@CCCCop vA, vB, field@CCCC
|
instance-of | |
22cs | op vA, vB, fieldoff@CCCC |
22c biçiminde statik olarak bağlı alan erişim talimatları için önerilen biçim | |
ØØ|op AAAAlo AAAAhi | 30 ton | op +AAAAAAAA |
goto/32 |
ØØ|op AAAA BBBB | 32x | op vAAAA, vBBBB |
|
AA|op BBBBlo BBBBhi | 31i | op vAA, #+BBBBBBBB |
|
31t | op vAA, +BBBBBBBB |
||
31c | op vAA, dize@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 @BBBBBurada kullanılan sıra dışı yazım tercihi, sayının ve referans dizininin 3. biçimle aynı etikete sahip olmasını sağlama isteğini yansıtır. |
|
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@BBBBBurada kullanılan sıra dışı yazım tercihi, sayının ve referans dizininin 3rms biçimindekiyle aynı etikete sahip olmasını sağlama isteğini yansıtır. |
Statik olarak bağlı invoke-virtual ve invoke-super için önerilen biçim
ve 35c biçimi talimatları
|
|
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},
inline@BBBBBurada kullanılan sıra dışı yazım tercihi, sayının ve referans dizininin 3rmi biçimindekiyle aynı etikete sahip olmasını sağlama isteğini yansıtır. |
satır içi bağlantılı invoke-static ve invoke-virtual için önerilen biçim
ve 35c biçimi talimatları
|
|
AA|op BBBB CCCC | 3rc | op {vCCCC .. vNNNN}, meth@BBBBop {vCCCC .. vNNNN}, site@BBBBop {vCCCC .. vNNNN}, type@BBBB
|
|
3rms | op {vCCCC .. vNNNN}, vtaboff@BBBB
|
statik olarak bağlı invoke-virtual ve invoke-super için önerilen biçim
3rc biçimi talimatları
|
|
3rmi | op {vCCCC .. vNNNN}, satır içi@BBBB
|
satır içi bağlantılı invoke-static ve invoke-virtual için önerilen biçim
ve 3rc biçimi talimatları
|
|
A|G|op BBBB F|E|D|C HHHH | 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
|
invoke-polymorphic |
AA|op BBBB CCCC HHHH | 4rcc |
op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH
|
invoke-polymorphic/range |
AA|op BBBBlo BBBB BBBB BBBBhi | 51l | op vAA, #+BBBBBBBBBBBBBBBB |
const-wide |