Questa pagina elenca i formati di istruzioni utilizzati dal formato eseguibile Dalvik (DEX) e dal bytecode Dalvik. È pensato per essere utilizzato insieme al documento di riferimento del bytecode .
Descrizioni bit a bit
La prima colonna nella tabella del formato elenca il layout bit a bit del formato. È costituito da una o più "parole" separate da spazi, ciascuna delle quali descrive un'unità di codice a 16 bit. Ogni carattere in una parola rappresenta quattro bit, letti dai bit più alti a quelli più bassi, con barre verticali (" |
") intervallate per facilitare la lettura. Le lettere maiuscole in sequenza dalla " A
" vengono utilizzate per indicare i campi all'interno del formato (che vengono poi definiti ulteriormente dalla colonna della sintassi). Il termine " op
" viene utilizzato per indicare la posizione di un codice operativo a otto bit all'interno del formato. Uno zero barrato (" Ø
") viene utilizzato per indicare che tutti i bit devono essere zero nella posizione indicata.
Per la maggior parte, i caratteri procedono dalle unità di codice precedenti alle unità di codice successive e dall'ordine inferiore a quello superiore all'interno di un'unità codice. Tuttavia, ci sono alcune eccezioni a questa regola generale, che vengono fatte per fare in modo che la denominazione di parti con significato simile sia la stessa nei diversi formati di istruzioni. Questi casi sono indicati esplicitamente nelle descrizioni del formato.
Ad esempio, il formato " B|A| op CCCC
" indica che il formato è costituito da due unità di codice a 16 bit. La prima parola è costituita dal codice operativo negli otto bit bassi e da una coppia di valori a quattro bit negli otto bit alti; e la seconda parola è costituita da un singolo valore a 16 bit.
Formato ID
La seconda colonna nella tabella dei formati indica l'identificatore breve del formato, utilizzato in altri documenti e nel codice per identificare il formato.
La maggior parte degli ID formato sono costituiti da tre caratteri, due cifre seguite da una lettera. La prima cifra indica il numero di unità di codice a 16 bit nel formato. La seconda cifra indica il numero massimo di registri contenuti nel formato (massimo, poiché alcuni formati possono ospitare un numero variabile di registri), con la designazione speciale " r
" che indica che è codificato un intervallo di registri. La lettera finale indica semi-mnemonicamente il tipo di eventuali dati aggiuntivi codificati dal formato. Ad esempio, il formato " 21t
" ha lunghezza due, contiene un riferimento al registro e contiene inoltre una destinazione di diramazione.
I formati di collegamento statico suggeriti hanno un suffisso " s
" aggiuntivo, per un totale di quattro caratteri. Allo stesso modo, i formati di collegamento "inline" suggeriti hanno un suffisso " i
" aggiuntivo. (In questo contesto, il collegamento in linea è come il collegamento statico, tranne che con legami più diretti con l'implementazione di una macchina.) Infine, un paio di formati stravaganti suggeriti (ad esempio, " 20bc
") includono due pezzi di dati che sono entrambi rappresentati nel suo ID di formato .
L'elenco completo delle lettere del codice tipo è il seguente. Tieni presente che alcuni moduli hanno dimensioni diverse, a seconda del formato:
Mnemonico | Dimensioni in bit | Senso |
---|---|---|
B | 8 | firmato immediatamente da yte |
C | 16, 32 | indice del pool costante |
F | 16 | costanti di interfaccia (usate solo nei formati collegati staticamente) |
H | 16 | immediato con segno h at (bit di ordine superiore di un valore a 32 o 64 bit; i bit di ordine inferiore sono tutti 0 ) |
io | 32 | immediato con segno int o float a 32 bit |
l | 64 | immediato firmato lungo o doppio a 64 bit |
M | 16 | costanti del metodo (utilizzate solo nei formati collegati staticamente) |
N | 4 | bocconcino firmato immediato |
S | 16 | breve firmato immediato |
T | 8, 16, 32 | ramo t obiettivo |
X | 0 | nessun dato aggiuntivo |
Sintassi
La terza colonna della tabella dei formati indica la sintassi orientata all'uomo per le istruzioni che utilizzano il formato indicato. Ogni istruzione inizia con il codice operativo indicato ed è facoltativamente seguita da uno o più argomenti, a loro volta separati da virgole.
Ogni volta che un argomento si riferisce a un campo della prima colonna, nella sintassi è indicata la lettera corrispondente a quel campo, ripetuta una volta per ogni quattro bit del campo. Ad esempio, un campo a otto bit etichettato " BB
" nella prima colonna verrebbe etichettato anche " BB
" nella colonna della sintassi.
Gli argomenti che nominano un registro hanno la forma " v X
". Il prefisso " v
" è stato scelto al posto del più comune " r
" proprio per evitare conflitti con le architetture (non virtuali) su cui potrebbe essere implementato il formato Dalvik Executable che utilizzano a loro volta il prefisso " r
" per i loro registri. (Cioè, questa decisione rende possibile parlare insieme sia dei registri virtuali che di quelli reali senza bisogno di circonlocuzioni.)
Gli argomenti che indicano un valore letterale hanno la forma " #+ X
". Alcuni formati indicano valori letterali che hanno solo bit diversi da zero nei bit di ordine superiore; per questi, gli zeri sono rappresentati esplicitamente nella sintassi, anche se non compaiono nella rappresentazione bit a bit.
Gli argomenti che indicano un offset relativo dell'indirizzo dell'istruzione hanno la forma " + X
".
Gli argomenti che indicano un indice di pool costante letterale hanno la forma " kind @ X
", dove " kind
" indica a quale pool costante si fa riferimento. Ogni codice operativo che utilizza tale formato consente esplicitamente solo un tipo di costante; vedere il riferimento al codice operativo per capire la corrispondenza. I tipi di pool costante sono " string
" (indice del pool di stringhe), " type
" (indice del pool di tipi), " field
" (indice del pool di campi), " meth
" (indice del pool di metodi) e " site
" (indice del pool di chiamate ).
Analogamente alla rappresentazione degli indici del pool costante, sono disponibili anche forme suggerite (facoltative) che indicano offset o indici precollegati. Esistono due tipi di valori precollegati suggeriti: offset vtable (indicati come " vtaboff
") e offset campo (indicati come " fieldoff
").
Nei casi in cui un valore di formato non è esplicitamente parte della sintassi ma sceglie invece una variante, ciascuna variante è elencata con il prefisso " [ X = N ]
" (ad esempio, " [A=2]
") per indicare la corrispondenza .
Formati
Formato | ID | Sintassi | Codici operativi notevoli coperti |
---|---|---|---|
N / A | 00x | N/A | pseudo-formato utilizzato per codici operativi non utilizzati; suggerito per l'uso come formato nominale per un codice operativo del punto di interruzione |
ØØ| operazione | 10x | op | |
B|A| operazione | 12x | op vA, vB | |
11n | op vA, #+B | ||
AA| operazione | 11x | op vAA | |
10t | op +AA | vai a | |
ØØ| su AAAA | 20 t | op +AAAA | vai a/16 |
AA| su BBBB | 20 a.C | op AA, gentile@BBBB | formato suggerito per errori di verifica determinati staticamente; A è il tipo di errore e B è un indice in una tabella appropriata al tipo (ad esempio riferimenti al metodo per un errore di metodo senza tale metodo) |
AA| su BBBB | 22x | op vAA, vBBBB | |
21t | op vAA, +BBBB | ||
21s | op vAA, #+BBBB | ||
21h | op vAA, #+BBBB0000op vAA, #+BBBB000000000000 | ||
21c | op vAA, digitare@BBBBop vAA, campo@BBBBop vAA, metodo_handle@BBBBop vAA, proto@BBBBop vAA, stringa@BBBB | check-cast classe const const-metodo-handle tipo-metodo const const-string | |
AA| su CC|BB | 23x | op vAA, vBB, vCC | |
22b | op vAA, vBB, #+CC | ||
B|A| su CCCC | 22t | op vA, vB, +CCCC | |
22 secondi | op vA, vB, #+CCCC | ||
22c | op vA, vB, digitare@CCCCop vA, vB, campo@CCCC | istanza di | |
22cs | op vA, vB, fieldoff@CCCC | formato suggerito per le istruzioni di accesso al campo collegate staticamente del formato 22c | |
ØØ| op AAAA lo AAAA ciao | 30 t | op +AAAAAAAA | vai a/32 |
ØØ| su AAAA BBBB | 32x | op vAAAA, vBBBB | |
AA| op BBBB lo BBBB ciao | 31i | op vAA, #+BBBBBBBB | |
31t | op vAA, +BBBBBBBB | ||
31c | op vAA, stringa@BBBBBBBB | const-string/jumbo | |
A|G| op SIBB FA|MI|RE|DO | 35c | [ A=5 ] op {vC, vD, vE, vF, vG}, meth@BBBB[ A=5 ] op {vC, vD, vE, vF, vG}, sito@BBBB[ A=5 ] op {vC, vD, vE, vF, vG}, tipo@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 @BBBBLa scelta insolita dei caratteri qui riflette la volontà di contare e l'indice di riferimento ha la stessa etichetta del formato 3rc. | |
35 ms | [ 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@BBBBLa scelta insolita del lettering qui riflette il desiderio di contare e l'indice di riferimento ha la stessa etichetta del formato 3rms. | formato suggerito per le istruzioni invoke-virtual e invoke-super collegate staticamente in formato 35c | |
35 miglia | [ 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@BBBBLa scelta insolita del lettering qui riflette la volontà di contare e l'indice di riferimento ha la stessa etichetta del formato 3rmi. | formato suggerito per le istruzioni invoke-static e invoke-virtual collegate in linea del formato 35c | |
AA| su BBBB CCCC | 3rc | op {vCCCC .. vNNNN}, meth@BBBBop {vCCCC .. vNNNN}, sito@BBBBop {vCCCC .. vNNNN}, digitare@BBBB dove | |
3rms | op {vCCCC .. vNNNN}, vtaboff@BBBB dove | formato suggerito per le istruzioni invoke-virtual e invoke-super collegate staticamente in formato 3rc | |
3mi | op {vCCCC .. vNNNN}, inline@BBBB dove | formato suggerito per le istruzioni invoke-static e invoke-virtual collegate in linea del formato 3rc | |
A|G| op SIBB FA|MI|RE|DO 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 | invocare-polimorfico |
AA| su BBBB CCCC HHHH | 4cc | op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH dove | invoca-polimorfico/intervallo |
AA| op BBBB lo BBBB BBBB BBBB hi | 51l | op vAA, #+BBBBBBBBBBBBBBBB | const-wide |