Trang này liệt kê các định dạng hướng dẫn được sử dụng bởi định dạng thực thi Dalvik (DEX) và mã byte Dalvik. Nó được sử dụng cùng với tài liệu tham chiếu mã byte .
Mô tả theo bit
Cột đầu tiên trong bảng định dạng liệt kê cách bố trí theo từng bit của định dạng. Nó bao gồm một hoặc nhiều "từ" được phân tách bằng dấu cách, mỗi từ mô tả một đơn vị mã 16 bit. Mỗi ký tự trong một từ đại diện cho bốn bit, đọc từ bit cao đến bit thấp, với các thanh dọc (" |
") xen kẽ để hỗ trợ việc đọc. Các chữ cái viết hoa theo thứ tự từ " A
" được sử dụng để biểu thị các trường trong định dạng (sau đó được xác định thêm bằng cột cú pháp). Thuật ngữ " op
" được sử dụng để chỉ vị trí của opcode tám bit trong định dạng. Số 0 bị gạch chéo (" Ø
") được sử dụng để chỉ ra rằng tất cả các bit phải bằng 0 ở vị trí được chỉ định.
Phần lớn, việc viết chữ diễn ra từ các đơn vị mã trước đó đến các đơn vị mã sau và từ bậc thấp đến bậc cao trong một đơn vị mã. Tuy nhiên, có một số ngoại lệ đối với quy tắc chung này, được thực hiện để đặt tên cho các phần có ý nghĩa tương tự giống nhau trên các định dạng lệnh khác nhau. Những trường hợp này được ghi chú rõ ràng trong phần mô tả định dạng.
Ví dụ: định dạng " B|A| op CCCC
" chỉ ra rằng định dạng bao gồm hai đơn vị mã 16 bit. Từ đầu tiên bao gồm opcode ở tám bit thấp và một cặp giá trị bốn bit ở tám bit cao; và từ thứ hai bao gồm một giá trị 16 bit.
ID định dạng
Cột thứ hai trong bảng định dạng cho biết mã định danh ngắn gọn cho định dạng, được sử dụng trong các tài liệu khác và trong mã để xác định định dạng.
Hầu hết các ID định dạng bao gồm ba ký tự, hai chữ số theo sau là một chữ cái. Chữ số đầu tiên cho biết số lượng đơn vị mã 16 bit trong định dạng. Chữ số thứ hai cho biết số lượng thanh ghi tối đa mà định dạng chứa (tối đa, vì một số định dạng có thể chứa số lượng thanh ghi thay đổi), với ký hiệu đặc biệt " r
" cho biết rằng một phạm vi thanh ghi được mã hóa. Chữ cái cuối cùng mang tính chất bán ghi nhớ cho biết loại dữ liệu bổ sung được mã hóa theo định dạng. Ví dụ: định dạng " 21t
" có độ dài hai, chứa một tham chiếu thanh ghi và ngoài ra còn chứa mục tiêu nhánh.
Các định dạng liên kết tĩnh được đề xuất có thêm hậu tố " s
", làm cho chúng có tổng cộng bốn ký tự. Tương tự, các định dạng liên kết "nội tuyến" được đề xuất có thêm hậu tố " i
". (Trong ngữ cảnh này, liên kết nội tuyến giống như liên kết tĩnh, ngoại trừ có nhiều mối liên hệ trực tiếp hơn với việc triển khai của máy.) Cuối cùng, một số định dạng được đề xuất kỳ quặc (ví dụ: " 20bc
") bao gồm hai phần dữ liệu đều được biểu thị bằng ID định dạng của nó .
Danh sách đầy đủ các chữ cái mã kiểu như sau. Lưu ý rằng một số biểu mẫu có kích thước khác nhau, tùy thuộc vào định dạng:
ghi nhớ | Kích thước bit | Nghĩa |
---|---|---|
b | số 8 | được ký ngay lập tức bởi yte |
c | 16, 32 | c chỉ số nhóm liên tục |
f | 16 | các hằng số giao diện (chỉ được sử dụng trong các định dạng liên kết tĩnh) |
h | 16 | được ký ngay lập tức h tại (các bit bậc cao có giá trị 32 hoặc 64 bit; các bit bậc thấp đều là 0 ) |
Tôi | 32 | i nt được ký ngay lập tức hoặc float 32 bit |
tôi | 64 | ký dài ngay lập tức hoặc gấp đôi 64 bit |
tôi | 16 | hằng số phương thức (chỉ được sử dụng trong các định dạng liên kết tĩnh) |
N | 4 | ký ngay lập tức và ibble |
S | 16 | được ký ngay lập tức |
t | 8, 16, 32 | nhánh t |
x | 0 | không có dữ liệu bổ sung |
Cú pháp
Cột thứ ba của bảng định dạng cho biết cú pháp hướng tới con người đối với các hướng dẫn sử dụng định dạng được chỉ định. Mỗi lệnh bắt đầu bằng opcode được đặt tên và được theo sau tùy ý bởi một hoặc nhiều đối số, chúng được phân tách bằng dấu phẩy.
Bất cứ khi nào một đối số đề cập đến một trường từ cột đầu tiên, chữ cái của trường đó sẽ được biểu thị trong cú pháp, được lặp lại một lần cho mỗi bốn bit của trường. Ví dụ: trường 8 bit có nhãn " BB
" trong cột đầu tiên cũng sẽ được gắn nhãn " BB
" trong cột cú pháp.
Các đối số đặt tên cho một thanh ghi có dạng " v X
". Tiền tố " v
" đã được chọn thay vì chính xác là " r
" phổ biến hơn để tránh xung đột với các kiến trúc (không ảo) mà định dạng Thực thi Dalvik có thể được triển khai mà chính chúng sử dụng tiền tố " r
" cho các thanh ghi của chúng. (Nghĩa là, quyết định này giúp có thể nói về cả thanh ghi ảo và thực cùng nhau mà không cần phải nói vòng vo.)
Các đối số biểu thị giá trị bằng chữ có dạng " #+ X
". Một số định dạng chỉ ra các chữ chỉ có các bit khác 0 trong các bit bậc cao của chúng; đối với những điều này, các số 0 được biểu diễn rõ ràng trong cú pháp, mặc dù chúng không xuất hiện trong cách biểu diễn theo bit.
Các đối số biểu thị độ lệch địa chỉ lệnh tương đối có dạng " + X
".
Các đối số biểu thị chỉ số nhóm hằng số theo nghĩa đen có dạng " kind @ X
", trong đó " kind
" cho biết nhóm hằng số nào đang được đề cập đến. Mỗi opcode sử dụng định dạng như vậy chỉ cho phép một loại hằng số một cách rõ ràng; xem tài liệu tham khảo opcode để tìm ra sự tương ứng. Các loại nhóm không đổi là " string
" (chỉ mục nhóm chuỗi), " type
" (chỉ mục nhóm loại), " field
" (chỉ mục nhóm trường), " meth
" (chỉ mục nhóm phương thức) và " site
" (gọi chỉ mục trang web ).
Tương tự như cách biểu thị các chỉ số nhóm không đổi, cũng có các biểu mẫu được đề xuất (tùy chọn) cho biết các chỉ số hoặc độ lệch được liên kết trước. Có hai loại giá trị được liên kết trước được đề xuất: độ lệch vtable (được biểu thị là " vtaboff
") và độ lệch trường (được biểu thị là " fieldoff
").
Trong trường hợp giá trị định dạng không phải là một phần rõ ràng của cú pháp mà thay vào đó chọn một biến thể, mỗi biến thể được liệt kê với tiền tố " [ X = N ]
" (ví dụ: " [A=2]
") để biểu thị sự tương ứng .
Định dạng
Định dạng | NHẬN DẠNG | Cú pháp | Các Opcode đáng chú ý được đề cập |
---|---|---|---|
không áp dụng | 00x | N/A | định dạng giả được sử dụng cho các opcode không được sử dụng; được đề xuất sử dụng làm định dạng danh nghĩa cho opcode điểm dừng |
ØØ| op | 10 lần | op | |
B|A| op | 12x | op vA, vB | |
11 giờ trưa | op vA, #+B | ||
AA| op | 11x | op vAA | |
10t | op +AA | đi đến | |
ØØ| op AAAA | 20t | op +AAAA | đi/16 |
AA| op BBBB | 20bc | op AA, loại @BBBB | định dạng được đề xuất cho các lỗi xác minh được xác định tĩnh; A là loại lỗi và B là một chỉ mục trong một bảng phù hợp với loại (ví dụ: tham chiếu phương thức cho lỗi không có phương thức như vậy) |
AA| op BBBB | 22x | op vAA, vBBBB | |
21t | op vAA, +BBBB | ||
21 giây | op vAA, #+BBBB | ||
21h | op vAA, #+BBBB0000op vAA, #+BBBB000000000000 | ||
21c | op vAA, gõ@BBBBop vAA, field@BBBBop vAA, phương thức_handle@BBBBop vAA, proto@BBBBop vAA, string@BBBB | kiểm tra lớp const const-phương thức-xử lý const-phương thức-loại chuỗi const | |
AA| op CC|BB | 23x | op vAA, vBB, vCC | |
22b | op vAA, vBB, #+CC | ||
B|A| op CCCC | 22t | op vA, vB, +CCCC | |
22 tuổi | op vA, vB, #+CCCC | ||
22c | op vA, vB, type@CCCCop vA, vB, field@CCCC | ví dụ của | |
22cs | op vA, vB, fieldoff@CCCC | định dạng được đề xuất cho hướng dẫn truy cập trường được liên kết tĩnh ở định dạng 22c | |
ØØ| op AAAA lo AAAA xin chào | 30t | op +AAAAAAAA | đi/32 |
ØØ| op AAAA BBBB | 32x | op vAAAA, vBBBB | |
AA| op BBBB lo BBBB chào | 31i | op vAA, #+BBBBBBBB | |
31t | op vAA, +BBBBBBBB | ||
31c | op vAA, string@BBBBBBBB | chuỗi const/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 @BBBBSự lựa chọn bất thường về cách viết chữ ở đây phản ánh mong muốn làm cho số đếm và chỉ mục tham chiếu có cùng nhãn như ở định dạng 3rc. | |
35 mili giây | [ 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@BBBBSự lựa chọn bất thường về cách viết chữ ở đây phản ánh mong muốn làm cho số đếm và chỉ mục tham chiếu có cùng nhãn như ở định dạng 3rms. | định dạng được đề xuất cho các hướng invoke-virtual và invoke-super ở định dạng 35c | |
35 dặm | [ 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@BBBBSự lựa chọn bất thường về cách viết chữ ở đây phản ánh mong muốn làm cho số đếm và chỉ mục tham chiếu có cùng nhãn như ở định dạng 3rmi. | định dạng được đề xuất cho các hướng dẫn invoke-static và invoke-virtual kết nội tuyến có định dạng 35c | |
AA| op BBBB CCCC | 3rc | op {vCCCC .. vNNNN}, meth@BBBBop {vCCCC .. vNNNN}, site@BBBBop {vCCCC.. vNNNN}, type@BBBB trong đó | |
3rms | op {vCCCC.. vNNNN}, vtaboff@BBBB trong đó | định dạng được đề xuất cho các hướng invoke-virtual và invoke-super ở định dạng 3rc | |
3rmi | op {vCCCC .. vNNNN}, inline@BBBB trong đó | định dạng được đề xuất cho các hướng dẫn invoke-static và invoke-virtual ở định dạng 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}, meth@BBBB, proto@HHHH[ A=2 ] op {vC, vD}, meth@BBBB, proto@HHHH[ A=1 ] op {vC}, meth@BBBB, proto@HHHH | gọi đa hình |
AA| op BBBB CCCC HHHH | 4rcc | op> {vCCCC.. vNNNN}, meth@BBBB, proto@HHHH trong đó | gọi-đa hình/phạm vi |
AA| op BBBB lo BBBB BBBB BBBB chào | 51l | op vAA, #+BBBBBBBBBBBBBBBB | const-rộng |