Esta página enumera los formatos de instrucciones utilizados por el formato ejecutable de Dalvik y el código de bytes de Dalvik. Está destinado a ser utilizado junto con el documento de referencia de bytecode .
Descripciones bit a bit
La primera columna de la tabla de formato enumera el diseño bit a bit del formato. Consiste en una o más "palabras" separadas por espacios, cada una de las cuales describe una unidad de código de 16 bits. Cada carácter de una palabra representa cuatro bits, leídos de mayor a menor, con barras verticales (" |
") intercaladas para ayudar en la lectura. Las letras mayúsculas en secuencia desde " A
" se utilizan para indicar campos dentro del formato (que luego se definen más en la columna de sintaxis). El término " op
" se utiliza para indicar la posición de un código de operación de ocho bits dentro del formato. Se utiliza un cero con barra (" Ø
") para indicar que todos los bits deben ser cero en la posición indicada.
En su mayor parte, las letras proceden de unidades de código anteriores a unidades de código posteriores, y de orden inferior a orden superior dentro de una unidad de código. Sin embargo, hay algunas excepciones a esta regla general, que se realizan para que la denominación de partes de significado similar sea la misma en diferentes formatos de instrucción. Estos casos se indican explícitamente en las descripciones de formato.
Por ejemplo, el formato " B|A| op CCCC
" indica que el formato consta de dos unidades de código de 16 bits. La primera palabra consta del código de operación en los ocho bits inferiores y un par de valores de cuatro bits en los ocho bits superiores; y la segunda palabra consta de un único valor de 16 bits.
ID de formato
La segunda columna de la tabla de formato indica el identificador abreviado del formato, que se utiliza en otros documentos y en el código para identificar el formato.
La mayoría de los ID de formato constan de tres caracteres, dos dígitos seguidos de una letra. El primer dígito indica el número de unidades de código de 16 bits en el formato. El segundo dígito indica el número máximo de registros que contiene el formato (máximo, ya que algunos formatos pueden acomodar un número variable de registros), con la designación especial " r
" que indica que se codifica un rango de registros. La letra final indica semimnemónicamente el tipo de datos adicionales codificados por el formato. Por ejemplo, el formato " 21t
" tiene una longitud de dos, contiene una referencia de registro y, además, contiene un destino de bifurcación.
Los formatos de enlace estático sugeridos tienen un sufijo " s
" adicional, lo que los convierte en cuatro caracteres en total. De manera similar, los formatos de enlace "en línea" sugeridos tienen un sufijo " i
" adicional. (En este contexto, la vinculación en línea es como la vinculación estática, excepto que tiene vínculos más directos con la implementación de una máquina). Finalmente, un par de formatos sugeridos extraños (por ejemplo, " 20bc
") incluyen dos piezas de datos que están representadas en su ID de formato .
La lista completa de letras de código de tipo es la siguiente. Tenga en cuenta que algunos formularios tienen diferentes tamaños, dependiendo del formato:
Mnemotécnico | Tamaños de bits | Sentido |
---|---|---|
b | 8 | byte inmediato firmado |
C | 16, 32 | índice de grupo constante |
F | dieciséis | constantes de interfaz (solo se usan en formatos vinculados estáticamente) |
h | dieciséis | h con signo inmediato (bits de orden superior de un valor de 32 o 64 bits; los bits de orden inferior son todos 0 ) |
i | 32 | i nt firmado inmediato o flotante de 32 bits |
yo | 64 | inmediato firmado largo, o doble de 64 bits |
metro | dieciséis | constantes de método (solo se usan en formatos vinculados estáticamente) |
norte | 4 | n ibble inmediato firmado |
s | dieciséis | corto firmado inmediato |
t | 8, 16, 32 | destino de la rama |
X | 0 | sin datos adicionales |
Sintaxis
La tercera columna de la tabla de formato indica la sintaxis humana para las instrucciones que usan el formato indicado. Cada instrucción comienza con el código de operación nombrado y, opcionalmente, va seguida de uno o más argumentos, separados por comas.
Siempre que un argumento se refiera a un campo de la primera columna, la letra de ese campo se indica en la sintaxis, repetida una vez por cada cuatro bits del campo. Por ejemplo, un campo de ocho bits etiquetado como " BB
" en la primera columna también se etiquetaría como " BB
" en la columna de sintaxis.
Los argumentos que nombran un registro tienen la forma " v X
". Se eligió el prefijo " v
" en lugar del más común " r
" exactamente para evitar conflictos con arquitecturas (no virtuales) en las que se podría implementar el formato Dalvik Executable que utilizan el prefijo " r
" para sus registros. (Es decir, esta decisión hace posible hablar de registros tanto virtuales como reales sin necesidad de circunloquios).
Los argumentos que indican un valor literal tienen la forma " #+ X
". Algunos formatos indican literales que solo tienen bits distintos de cero en sus bits de orden superior; para estos, los ceros se representan explícitamente en la sintaxis, aunque no aparecen en la representación bit a bit.
Los argumentos que indican un desplazamiento de dirección de instrucción relativa tienen la forma " + X
".
Los argumentos que indican un índice de grupo de constantes literal tienen la forma " kind @ X
", donde " kind
" indica a qué grupo de constantes se hace referencia. Cada código de operación que usa dicho formato permite explícitamente solo un tipo de constante; consulte la referencia del código de operación para averiguar la correspondencia. Los tipos de conjuntos de constantes son " string
" (índice de conjunto de cadenas), " type
" (índice de conjunto de tipos), " field
" (índice de conjunto de campos), " meth
" (índice de conjunto de métodos) y " site
" (índice de sitio de llamadas). ).
Similar a la representación de índices de pool constante, también hay formas sugeridas (opcionales) que indican compensaciones o índices previnculados. Hay dos tipos de valores previnculados sugeridos: compensaciones de vtable (indicadas como " vtaboff
") y compensaciones de campo (indicadas como " fieldoff
").
En los casos en los que un valor de formato no forma parte explícitamente de la sintaxis, sino que elige una variante, cada variante se enumera con el prefijo " [ X = N ]
" (p. ej., " [A=2]
") para indicar la correspondencia. .
Los formatos
Formato | IDENTIFICACIÓN | Sintaxis | Códigos de operación notables cubiertos |
---|---|---|---|
N / A | 00x | N/A | pseudoformato utilizado para códigos de operación no utilizados; sugerido para su uso como formato nominal para un código de operación de punto de interrupción |
ØØ| op | 10x | op | |
B|A| op | 12x | op va, vB | |
11n | op vA, #+B | ||
AA| op | 11x | op vAA | |
10t | op +AA | ir | |
ØØ| en AAAA | 20t | op + AAAA | ir a/16 |
AA| Op BBBB | 20 ac | op AA, amable@BBBB | formato sugerido para errores de verificación determinados estáticamente; A es el tipo de error y B es un índice en una tabla apropiada para el tipo (por ejemplo, referencias de métodos para un error sin tal método) |
AA| Op BBBB | 22x | op vaA, vBBBB | |
21t | op vaA, +BBBB | ||
21s | op vaAA, #+BBBB | ||
21h | op vAA, #+BBBB0000op vAA, #+BBBB000000000000 | ||
21c | op vaA, escriba @ BBBBop vaA, campo@BBBBop vaA, identificador_método@BBBBop vaA, proto@BBBBop vaA, cadena@BBBB | cheque-cast clase constante manejo del método const tipo-método-const const-cadena | |
AA| op CC|BB | 23x | op vaA, vBB, vCC | |
22b | op vaA, vBB, #+CC | ||
B|A| op CCCC | 22t | op va, vB, +CCCC | |
22s | op va, vB, #+CCCC | ||
22c | op vA, vB, tipo@CCCCop vA, vB, campo@CCCC | en vez de | |
22cs | op vA, vB, fieldoff@CCCC | formato sugerido para instrucciones de acceso a campos vinculados estáticamente de formato 22c | |
ØØ| op AAAA lo AAAA hola | 30t | op +AAAAAAAA | ir a/32 |
ØØ| op AAAA BBBB | 32x | op vAAAA, vBBBB | |
AA| op BBBB lo BBBB hola | 31i | op vaAA, #+BBBBBBBB | |
31t | op vaAA, +BBBBBBBB | ||
31c | op vaA, cadena@BBBBBBBB | const-cadena/jumbo | |
A|G| op BBBB F|E|D|C | 35c | [ A=5 ] op {vC, vD, vE, vF, vG}, met@BBBB[ A=5 ] op {vC, vD, vE, vF, vG}, sitio@BBBB[ A=5 ] op {vC, vD, vE, vF, vG}, escriba @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 elección inusual de letras aquí refleja un deseo de contar y el índice de referencia tiene la misma etiqueta que en el formato 3rc. | |
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@BBBBLa elección inusual de las letras aquí refleja un deseo de contar y el índice de referencia tiene la misma etiqueta que en el formato 3rms. | formato sugerido para instrucciones de invoke-virtual e invoke-super vinculadas estáticamente de formato 35c | |
35 millas | [ A=5 ] op {vC, vD, vE, vF, vG}, en línea@BBBB[ A=4 ] op {vC, vD, vE, vF}, en línea@BBBB[ A=3 ] op {vC, vD, vE}, en línea@BBBB[ A=2 ] op {vC, vD}, en línea@BBBB[ A=1 ] op {vC}, en línea@BBBBLa elección inusual de letras aquí refleja un deseo de contar y el índice de referencia tiene la misma etiqueta que en el formato 3rmi. | formato sugerido para instrucciones invoke-static e invoke-virtual vinculadas en línea de formato 35c | |
AA| op BBBBCCCC | 3rc | op {vCCCC .. vNNNN}, met@BBBBop {vCCCC .. vNNNN}, sitio@BBBBop {vCCCC .. vNNNN}, escriba @BBBB donde | |
3rms | op {vCCCC .. vNNNN}, vtaboff@BBBB donde | formato sugerido para instrucciones de invoke-virtual e invoke-super vinculadas estáticamente de formato 3rc | |
3rmi | op {vCCCC .. vNNNN}, en línea@BBBB donde | formato sugerido para instrucciones invoke-static e invoke-virtual vinculadas en línea de formato 3rc | |
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}, met@BBBB, proto@HHHH[ A=2 ] op {vC, vD}, met@BBBB, proto@HHHH[ A=1 ] op {vC}, met@BBBB, proto@HHHH | invocar-polimórfico |
AA| op BBBB CCCC HHHH | 4rcc | op> {vCCCC .. vNNNN}, met@BBBB, proto@HHHH donde | invocar-polimórfico/rango |
AA| op BBBB bajo BBBB BBBB BBBB hola | 51l | op vaAA, #+BBBBBBBBBBBBBBBB | constante |