หน้านี้แสดงรูปแบบคำสั่งที่ใช้โดยรูปแบบไฟล์ปฏิบัติการ Dalvik (DEX) และไบต์โค้ด Dalvik เอกสารนี้มีไว้เพื่อใช้ร่วมกับเอกสารอ้างอิงเกี่ยวกับไบต์โค้ด
คำอธิบายแบบบิตต่อบิต
คอลัมน์แรกในตารางรูปแบบจะแสดงเลย์เอาต์แบบบิตของรูปแบบ โดยประกอบด้วย "คํา" ที่คั่นด้วยเว้นวรรคอย่างน้อย 1 คํา ซึ่งแต่ละคําจะอธิบายหน่วยโค้ด 16 บิต อักขระแต่ละตัวในคำจะแสดงถึง 4 บิต โดยอ่านจากบิตสูงไปต่ำ โดยมีแถบแนวตั้ง ("|") แทรกไว้เพื่อช่วยให้อ่านได้ง่าย อักษรตัวพิมพ์ใหญ่ตามลำดับจาก "A" ใช้เพื่อระบุช่องภายในรูปแบบ (ซึ่งคอลัมน์ไวยากรณ์จะกำหนดเพิ่มเติม) คำว่า "op" ใช้เพื่อระบุตําแหน่งของรหัสปฏิบัติการ 8 บิตภายในรูปแบบ เลข 0 ที่มีขีดกลาง ("Ø") ใช้เพื่อระบุว่าบิตทั้งหมดต้องเป็น 0 ในตำแหน่งที่ระบุ
ส่วนใหญ่แล้ว ตัวอักษรจะเรียงจากหน่วยโค้ดก่อนหน้าไปยังหน่วยโค้ดถัดไป และจากลําดับต่ำไปยังลําดับสูงภายในหน่วยโค้ด อย่างไรก็ตาม กฎทั่วไปนี้มีข้อยกเว้นบางประการ ซึ่งทำขึ้นเพื่อให้การเรียกชื่อส่วนที่มีความหมายคล้ายกันเหมือนกันในคำสั่งรูปแบบต่างๆ กรณีเหล่านี้จะระบุไว้อย่างชัดเจนในคำอธิบายรูปแบบ
เช่น รูปแบบ "B|A|op CCCC" บ่งชี้ว่ารูปแบบประกอบด้วยหน่วยโค้ด 16 บิต 2 หน่วย คำแรกประกอบด้วยอ็อปโค้ดใน 8 บิตต่ำและค่า 4 บิตคู่หนึ่งใน 8 บิตสูง ส่วนคำที่ 2 ประกอบด้วยค่า 16 บิตเดียว
รหัสรูปแบบ
คอลัมน์ที่ 2 ในตารางรูปแบบระบุตัวระบุแบบสั้นสำหรับรูปแบบ ซึ่งใช้ในเอกสารอื่นๆ และในโค้ดเพื่อระบุรูปแบบ
รหัสรูปแบบส่วนใหญ่ประกอบด้วยอักขระ 3 ตัว ตัวเลข 2 ตัวตามด้วยตัวอักษร ตัวเลขแรกระบุจํานวนหน่วยรหัส 16 บิตในรูปแบบ ตัวเลขหลักที่ 2 ระบุจํานวนรีจิสเตอร์สูงสุดที่รูปแบบมี (สูงสุด เนื่องจากรูปแบบบางรูปแบบรองรับจํานวนรีจิสเตอร์ที่ผันแปรได้) โดยมีการกำหนดพิเศษ "r" ซึ่งระบุว่ามีการเข้ารหัสช่วงรีจิสเตอร์ อักษรตัวสุดท้ายเป็นอักษรย่อที่บ่งบอกประเภทของข้อมูลเพิ่มเติมที่เข้ารหัสโดยรูปแบบ เช่น รูปแบบ "21t" มีความยาว 2 มีข้อมูลอ้างอิงรีจิสเตอร์ 1 รายการ และยังมีเป้าหมายสาขาด้วย
รูปแบบการลิงก์แบบคงที่ที่แนะนําจะมีส่วนต่อท้าย "s" เพิ่มเติม รวมเป็น 4 อักขระ ในทํานองเดียวกัน รูปแบบการลิงก์ "ในบรรทัด" ที่แนะนําจะมีส่วนต่อท้าย "i" เพิ่มเติม (ในบริบทนี้ การลิงก์ในบรรทัดนั้นเหมือนกับการลิงก์แบบคงที่ ยกเว้นการเชื่อมโยงโดยตรงมากขึ้นกับการใช้งานของเครื่อง)
สุดท้ายคือรูปแบบที่แปลกๆ 2-3 รูปแบบที่เราแนะนำ (เช่น
"20bc") มีข้อมูล 2 รายการที่แสดงในรหัสรูปแบบ
รายการตัวอักษรรหัสประเภททั้งหมดมีดังนี้ โปรดทราบว่าแบบฟอร์มบางรายการมีขนาดแตกต่างกันไป โดยขึ้นอยู่กับรูปแบบ
| Mnemonic | ขนาดบิต | ความหมาย | 
|---|---|---|
| b | 8 | byte ที่ลงนามแล้วทันที | 
| c | 16, 32 | ดัชนีพูลแบบคงที่ | 
| f | 16 | ค่าคงที่ interface (ใช้ในรูปแบบที่ลิงก์แบบคงที่เท่านั้น) | 
| h | 16 | hat ที่มีเครื่องหมายทันที (บิตลำดับสูงของค่า 32 หรือ 64 บิต โดยบิตลำดับต่ำเป็น 0ทั้งหมด) | 
| i | 32 | int ที่มีเครื่องหมายทันที หรือจำนวนลอยตัว 32 บิต | 
| l | 64 | long ที่มีค่าลงชื่อกำกับทันที หรือจำนวนทศนิยม 64 บิต | 
| m | 16 | ค่าคงที่ของเมธอด (ใช้ในรูปแบบที่ลิงก์แบบคงที่เท่านั้น) | 
| n | 4 | nibble ที่ลงชื่อแล้วทันที | 
| s | 16 | short ที่มีการเซ็นชื่อทันที | 
| t | 8, 16, 32 | branch target | 
| x | 0 | ไม่มีข้อมูลเพิ่มเติม | 
วากยสัมพันธ์
คอลัมน์ที่ 3 ของตารางรูปแบบจะระบุไวยากรณ์ที่มุ่งเน้นผู้ใช้สำหรับคำสั่งที่ใช้รูปแบบที่ระบุ คำสั่งแต่ละรายการจะเริ่มต้นด้วยอ็อปโค้ดที่มีชื่อ ตามด้วยอาร์กิวเมนต์อย่างน้อย 1 รายการ (ไม่บังคับ) โดยคั่นด้วยคอมมา
ในทุกที่ที่อาร์กิวเมนต์อ้างอิงถึงช่องจากคอลัมน์แรก ระบบจะระบุตัวอักษรของช่องนั้นในไวยากรณ์ โดยซ้ำกัน 1 ครั้งสำหรับแต่ละบิต 4 บิตของช่อง เช่น ช่อง 8 บิตที่ติดป้ายกำกับว่า BB ในคอลัมน์แรกจะมีป้ายกำกับว่า BB ในคอลัมน์ไวยากรณ์ด้วย
อาร์กิวเมนต์ที่ระบุชื่อรีจิสเตอร์อยู่ในรูปแบบ "vX"
เราเลือกคำนำหน้า "v" แทน "r" ที่พบได้ทั่วไปเพื่อหลีกเลี่ยงความขัดแย้งกับสถาปัตยกรรม (ที่ไม่ใช่เสมือนจริง) ที่อาจใช้รูปแบบ Dalvik Executable ซึ่งใช้คำนำหน้า "r" สำหรับรีจิสเตอร์ (กล่าวคือ การตัดสินใจนี้ช่วยให้เราสามารถพูดถึงทั้งรีจิสเตอร์เสมือนจริงและรีจิสเตอร์จริงร่วมกันได้โดยไม่ต้องใช้คำพูดอ้อม)
อาร์กิวเมนต์ที่ระบุค่าตัวอักษรล้วนมีรูปแบบเป็น "#+X" รูปแบบบางอย่างระบุตัวอักษรล้วนที่มีเฉพาะบิตที่ไม่ใช่ 0 ในบิตลำดับสูง สำหรับรูปแบบเหล่านี้ ระบบจะแสดงค่า 0 อย่างชัดเจนในไวยากรณ์ แม้ว่าค่าดังกล่าวจะไม่ปรากฏในการนําเสนอแบบบิตต่อบิตก็ตาม
อาร์กิวเมนต์ที่ระบุออฟเซตที่อยู่คำสั่งแบบสัมพัทธ์จะมีรูปแบบเป็น "+X"
โดยอาร์กิวเมนต์ที่ระบุดัชนีของพูลค่าคงที่แบบลิเทอรัลจะมีรูปแบบเป็น "kind@X" โดยที่ "kind" จะระบุพูลค่าคงที่ที่อ้างอิง ออปโค้ดแต่ละรายการที่ใช้รูปแบบดังกล่าวจะอนุญาตค่าคงที่เพียง 1 ประเภทเท่านั้น ดูการอ้างอิงออปโค้ดเพื่อหาความเชื่อมโยง ประเภทของพูลค่าคงที่ ได้แก่ "string" (ดัชนีพูลสตริง), "type" (ดัชนีพูลประเภท), "field" (ดัชนีพูลฟิลด์), "meth" (ดัชนีพูลเมธอด) และ "site" (ดัชนีตำแหน่งการเรียกใช้)
เช่นเดียวกับการแสดงดัชนีของพูลค่าคงที่ ยังมีรูปแบบที่แนะนำ (ไม่บังคับ) ซึ่งระบุออฟเซตหรือดัชนีที่ลิงก์ไว้ล่วงหน้าด้วย ค่าที่ลิงก์ไว้ล่วงหน้าที่แนะนำมี 2 ประเภท ได้แก่ การเลื่อนตำแหน่ง vtable (ระบุเป็น "vtaboff") และการเลื่อนตำแหน่งช่อง (ระบุเป็น "fieldoff")
ในกรณีที่ค่ารูปแบบไม่ได้เป็นส่วนหนึ่งของไวยากรณ์อย่างชัดเจนแต่เลือกตัวแปรแทน ตัวแปรแต่ละรายการจะแสดงพร้อมกับคำนำหน้า "[X=N]" (เช่น "[A=2]") เพื่อระบุการติดต่อ
รูปแบบ
| รูปแบบ | รหัส | วากยสัมพันธ์ | ออปโค้ดที่โดดเด่นซึ่งครอบคลุม | 
|---|---|---|---|
| ไม่ระบุ | 00x | N/A | รูปแบบจำลองที่ใช้สำหรับอ็อปโค้ดที่ไม่ได้ใช้ แนะนำให้ใช้เป็นรูปแบบทั่วไปสำหรับอ็อปโค้ดจุดหยุด | 
| ØØ|op | 10 เท่า | op | |
| B|A|op | 12 เท่า | opvA, vB | |
| 11n | opvA, #+B | ||
| AA|op | 11 เท่า | opvAA | |
| 10t | op+AA | goto | |
| ØØ|op AAAA | 20t | op+AAAA | goto/16 | 
| AA|op BBBB | 20bc | opAA, kind@BBBB | รูปแบบที่แนะนำสำหรับข้อผิดพลาดในการยืนยันที่ระบุแบบคงที่ โดย A คือประเภทของข้อผิดพลาด และ B คือดัชนีในตารางที่เหมาะสมกับประเภท (เช่น การอ้างอิงเมธอดสำหรับข้อผิดพลาด "ไม่มีเมธอดดังกล่าว") | 
| AA|op BBBB | 22 เท่า | opvAA, vBBBB | |
| 21t | opvAA, +BBBB | ||
| 21 วินาที | opvAA, #+BBBB | ||
| 21 ชม. | opvAA, #+BBBB0000opvAA, #+BBBB000000000000 | ||
| 21 องศาเซลเซียส | opvAA, type@BBBBopvAA, field@BBBBopvAA, method_handle@BBBBopvAA, proto@BBBBopvAA, string@BBBB | check-cast const-class const-method-handle const-method-type const-string | |
| AA|op CC|BB | 23 เท่า | opvAA, vBB, vCC | |
| 22ข | opvAA, vBB, #+CC | ||
| B|A|op CCCC | 22t | opvA, vB, +CCCC | |
| 22 วิ | opvA, vB, #+CCCC | ||
| 22c | opvA, vB, type@CCCCopvA, vB, field@CCCC | instance-of | |
| 22cs | opvA, vB, fieldoff@CCCC | รูปแบบที่แนะนำสำหรับคำสั่งการเข้าถึงช่องที่ลิงก์แบบคงที่ของรูปแบบ 22c | |
| ØØ|op AAAAlo AAAAhi | 30t | op+AAAAAAAA | goto/32 | 
| ØØ|op AAAA BBBB | 32x | opvAAAA, vBBBB | |
| AA|op BBBBlo BBBBhi | 31i | opvAA, #+BBBBBBBB | |
| 31t | opvAA, +BBBBBBBB | ||
| 31c | opvAA, string@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@BBBBการเลือกแบบอักษรที่ผิดปกตินี้แสดงถึงความต้องการที่จะทำให้การนับและดัชนีอ้างอิงมีป้ายกำกับเดียวกันกับในรูปแบบ 3rc | |
| 35 มิลลิวินาที | [ 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@BBBBการเลือกแบบอักษรที่ผิดปกตินี้แสดงถึงความต้องการที่จะทำให้จํานวนและการอ้างอิงมีป้ายกำกับเดียวกันกับในรูปแบบ 3rms | รูปแบบที่แนะนำสำหรับ invoke-virtualที่ลิงก์แบบคงที่ และinvoke-superวิธีการของรูปแบบ 35c | |
| 35 ไมล์ | [ 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@BBBBการเลือกแบบอักษรที่ผิดปกตินี้แสดงถึงความต้องการที่จะทำให้จํานวนและอัญประกาศอ้างอิงมีป้ายกำกับเดียวกันกับในรูปแบบ 3rmi | รูปแบบที่แนะนำสำหรับ invoke-staticและinvoke-virtualที่ลิงก์ในบรรทัดของวิธีการรูปแบบ 35c | |
| AA|op BBBB CCCC | 3rc | op{vCCCC .. vNNNN}, meth@BBBBop{vCCCC .. vNNNN}, site@BBBBop{vCCCC .. vNNNN}, type@BBBBโดยที่  | |
| 3rms | op{vCCCC .. vNNNN}, vtaboff@BBBBโดยที่  | รูปแบบที่แนะนำสำหรับ invoke-virtualที่ลิงก์แบบคงที่ และinvoke-superวิธีการของรูปแบบ3rc | |
| 3rmi | op{vCCCC .. vNNNN}, inline@BBBBโดยที่  | รูปแบบที่แนะนำสำหรับ invoke-staticที่ลิงก์ในบรรทัด และinvoke-virtualวิธีการของรูปแบบ 3rc | |
| A|G|op BBBB F|E|D|C HHHH | 45 ซีซี | [ 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 | opvAA, #+BBBBBBBBBBBBBBBB | const-wide | 
