หน้านี้แสดงรายการรูปแบบคำสั่งที่ใช้โดยรูปแบบ Dalvik executable (DEX) และรหัสไบต์ Dalvik มีไว้เพื่อใช้ร่วมกับ เอกสารอ้างอิง bytecode
คำอธิบายระดับบิต
คอลัมน์แรกในตารางรูปแบบจะแสดงเค้าโครงระดับบิตของรูปแบบ ประกอบด้วย "คำ" ที่คั่นด้วยช่องว่างตั้งแต่หนึ่งคำขึ้นไป ซึ่งแต่ละคำจะอธิบายหน่วยโค้ด 16 บิต อักขระแต่ละตัวในคำแทนค่าสี่บิต อ่านจากบิตสูงไปต่ำ โดยมีแถบแนวตั้ง (" |
") สลับกันเพื่อช่วยในการอ่าน ตัวอักษรตัวพิมพ์ใหญ่ตามลำดับจาก " A
" ใช้เพื่อระบุฟิลด์ภายในรูปแบบ (ซึ่งจะถูกกำหนดเพิ่มเติมโดยคอลัมน์ไวยากรณ์) คำว่า " op
" ใช้เพื่อระบุตำแหน่งของ opcode แปดบิตภายในรูปแบบ เครื่องหมายทับศูนย์ (" Ø
") ใช้เพื่อระบุว่าบิตทั้งหมดต้องเป็นศูนย์ในตำแหน่งที่ระบุ
โดยส่วนใหญ่แล้ว การเรียงตัวอักษรจะดำเนินการจากหน่วยโค้ดก่อนหน้าไปยังหน่วยโค้ดในภายหลัง และลำดับจากต่ำไปอยู่ในลำดับสูงภายในหน่วยโค้ด อย่างไรก็ตาม มีข้อยกเว้นบางประการสำหรับกฎทั่วไปนี้ ซึ่งทำขึ้นเพื่อทำให้การตั้งชื่อส่วนที่มีความหมายคล้ายกันจะเหมือนกันในรูปแบบคำสั่งที่แตกต่างกัน กรณีเหล่านี้มีการระบุไว้อย่างชัดเจนในคำอธิบายรูปแบบ
ตัวอย่างเช่น รูปแบบ " B|A| op CCCC
" ระบุว่ารูปแบบประกอบด้วยหน่วยโค้ด 16 บิตสองหน่วย คำแรกประกอบด้วย opcode ในแปดบิตต่ำและคู่ของค่าสี่บิตในแปดบิตสูง และคำที่สองประกอบด้วยค่า 16 บิตเดียว
รหัสรูปแบบ
คอลัมน์ที่สองในตารางรูปแบบระบุตัวระบุแบบสั้นสำหรับรูปแบบ ซึ่งใช้ในเอกสารอื่นและในโค้ดเพื่อระบุรูปแบบ
รหัสรูปแบบส่วนใหญ่ประกอบด้วยอักขระสามตัว ตัวเลขสองหลักตามด้วยตัวอักษร ตัวเลขตัวแรกระบุจำนวนหน่วยโค้ด 16 บิตในรูปแบบ ตัวเลขตัวที่สองระบุจำนวนรีจิสเตอร์สูงสุดที่รูปแบบมี (สูงสุด เนื่องจากบางรูปแบบสามารถรองรับจำนวนรีจิสเตอร์ที่แปรผันได้) โดยมีการกำหนดพิเศษ " r
" ระบุว่าช่วงของรีจิสเตอร์ถูกเข้ารหัส ตัวอักษรตัวสุดท้ายแบบกึ่งช่วยจำระบุประเภทของข้อมูลเพิ่มเติมที่เข้ารหัสโดยรูปแบบ ตัวอย่างเช่น รูปแบบ " 21t
" มีความยาวสอง มีการอ้างอิงรีจิสเตอร์หนึ่งรายการ และมีเป้าหมายสาขาเพิ่มเติม
รูปแบบการเชื่อมโยงแบบคงที่ที่แนะนำจะมีส่วนต่อท้าย " s
" เพิ่มเติม ทำให้มีอักขระทั้งหมดสี่ตัว ในทำนองเดียวกัน รูปแบบการเชื่อมโยง "อินไลน์" ที่แนะนำจะมีคำต่อท้าย " i
" เพิ่มเติม (ในบริบทนี้ การเชื่อมโยงแบบอินไลน์ก็เหมือนกับการเชื่อมโยงแบบคงที่ ยกเว้นว่ามีความสัมพันธ์โดยตรงกับการใช้งานเครื่อง) ท้ายที่สุด รูปแบบที่แนะนำแบบคี่บอลคู่ (เช่น " 20bc
") จะรวมข้อมูลสองชิ้นซึ่งทั้งคู่แสดงใน ID รูปแบบของมัน .
รายการตัวอักษรรหัสประเภททั้งหมดมีดังนี้ โปรดทราบว่าบางแบบฟอร์มมีขนาดแตกต่างกัน ขึ้นอยู่กับรูปแบบ:
ช่วยในการจำ | ขนาดบิต | ความหมาย |
---|---|---|
ข | 8 | ลงนามทันที โดย yte |
ค | 16, 32 | c ดัชนีพูลทันที |
ฉ | 16 | ค่าคงที่ระหว่าง อินเตอร์ (ใช้เฉพาะในรูปแบบที่เชื่อมโยงแบบคงที่) |
ชม. | 16 | h at ที่เซ็นชื่อทันที (บิตลำดับสูงของค่า 32- หรือ 64-บิต บิตลำดับต่ำทั้งหมดเป็น 0 ) |
ฉัน | 32 | เซ็น ชื่อ ทันทีหรือลอย 32 บิต |
ล | 64 | เซ็นชื่อแบบ ยาว ทันทีหรือ 64 บิตสองเท่า |
ม | 16 | ค่าคงที่วิธีการ m (ใช้เฉพาะในรูปแบบที่เชื่อมโยงแบบคงที่) |
n | 4 | ลงนามทันที และ พูดได้คำเดียว |
ส | 16 | ลง นาม ทันที |
ที | 8, 16, 32 | สาขา เป้าหมาย |
x | 0 | ไม่มีข้อมูลเพิ่มเติม |
ไวยากรณ์
คอลัมน์ที่สามของตารางรูปแบบระบุไวยากรณ์เชิงมนุษย์สำหรับคำแนะนำที่ใช้รูปแบบที่ระบุ แต่ละคำสั่งเริ่มต้นด้วย opcode ที่มีชื่อ และตามด้วยอาร์กิวเมนต์ตั้งแต่ 1 รายการขึ้นไป โดยคั่นด้วยเครื่องหมายจุลภาค
เมื่อใดก็ตามที่อาร์กิวเมนต์อ้างถึงฟิลด์จากคอลัมน์แรก ตัวอักษรสำหรับฟิลด์นั้นจะถูกระบุในรูปแบบไวยากรณ์ โดยจะทำซ้ำหนึ่งครั้งสำหรับแต่ละสี่บิตของฟิลด์ ตัวอย่างเช่น ฟิลด์แปดบิตชื่อ " BB
" ในคอลัมน์แรกก็จะมีป้ายกำกับว่า " BB
" ในคอลัมน์ไวยากรณ์ด้วย
อาร์กิวเมนต์ที่ตั้งชื่อรีจิสเตอร์จะมีรูปแบบ " v X
" คำนำหน้า " v
" ถูกเลือกแทนคำนำหน้า " r
" ทั่วไปเพื่อหลีกเลี่ยงความขัดแย้งกับสถาปัตยกรรม (ไม่ใช่เสมือน) ซึ่งรูปแบบปฏิบัติการ Dalvik อาจถูกนำมาใช้ซึ่งตัวมันเองใช้คำนำหน้า " r
" สำหรับการลงทะเบียน (นั่นคือ การตัดสินใจครั้งนี้ทำให้สามารถพูดคุยเกี่ยวกับการลงทะเบียนทั้งเสมือนและจริงร่วมกันได้โดยไม่จำเป็นต้องมีการปิดล้อม)
อาร์กิวเมนต์ที่ระบุค่าตามตัวอักษรจะมีรูปแบบ " #+ X
" บางรูปแบบระบุตัวอักษรที่มีเฉพาะบิตที่ไม่เป็นศูนย์ในบิตที่มีลำดับสูง สำหรับสิ่งเหล่านี้ ค่าศูนย์จะถูกแสดงอย่างชัดเจนในรูปแบบไวยากรณ์ แม้ว่าค่าเหล่านั้นจะไม่ปรากฏในค่าระดับบิตก็ตาม
อาร์กิวเมนต์ที่ระบุที่อยู่ออฟเซ็ตคำสั่งแบบสัมพันธ์จะมีรูปแบบ " + X
"
อาร์กิวเมนต์ที่บ่งชี้ดัชนีพูลคงที่ตามตัวอักษรจะมีรูปแบบ " kind @ X
" โดยที่ " kind
" ระบุว่าพูลคงที่ใดที่ถูกอ้างอิงถึง แต่ละ opcode ที่ใช้รูปแบบดังกล่าวอนุญาตให้ใช้ค่าคงที่เพียงชนิดเดียวเท่านั้น ดูการอ้างอิง opcode เพื่อค้นหาความสอดคล้อง ประเภทของพูลคงที่คือ " string
" (ดัชนีพูลสตริง), " type
" (ดัชนีพูลประเภท), " field
" (ดัชนีพูลฟิลด์), " meth
" (ดัชนีพูลเมธอด) และ " site
" (ดัชนีไซต์การโทร ).
เช่นเดียวกับการแสดงดัชนีพูลคงที่ ยังมีแบบฟอร์มที่แนะนำ (เป็นทางเลือก) ที่ระบุออฟเซ็ตหรือดัชนีที่ลิงก์ไว้ล่วงหน้า ค่าลิงก์ล่วงหน้าที่แนะนำมีสองประเภท: ออฟเซ็ต vtable (ระบุเป็น " vtaboff
") และออฟเซ็ตฟิลด์ (ระบุเป็น " fieldoff
")
ในกรณีที่ค่ารูปแบบไม่ได้เป็นส่วนหนึ่งของไวยากรณ์อย่างชัดเจนแต่เลือกรูปแบบต่างๆ แทน รูปแบบแต่ละรายการจะแสดงรายการด้วยคำนำหน้า " [ X = N ]
" (เช่น " [A=2]
") เพื่อระบุความสอดคล้อง .
รูปแบบ
รูปแบบ | บัตรประจำตัวประชาชน | ไวยากรณ์ | Opcodes ที่โดดเด่นครอบคลุม |
---|---|---|---|
ไม่มี | 00x | N/A | รูปแบบหลอกที่ใช้สำหรับ opcode ที่ไม่ได้ใช้ แนะนำให้ใช้เป็นรูปแบบที่กำหนดสำหรับ opcode ของเบรกพอยต์ |
ØØ| ปฏิบัติการ | 10x | op | |
บี|เอ| ปฏิบัติการ | 12x | op วีเอ วีบี | |
11น | op VA, #+B | ||
เอเอ| ปฏิบัติการ | 11x | op vAA | |
10 ตัน | op +AA | ไปที่ | |
ØØ| สหกรณ์ AAAA | 20ต | op +AAAA | ไปที่/16 |
เอเอ| สหกรณ์ BBBB | 20ปีก่อนคริสตกาล | op AA ใจดี@BBBB | รูปแบบที่แนะนำสำหรับข้อผิดพลาดในการตรวจสอบที่กำหนดแบบคงที่ A คือประเภทของข้อผิดพลาด และ B เป็นดัชนีลงในตารางประเภทที่เหมาะสม (เช่น การอ้างอิงวิธีการสำหรับข้อผิดพลาดที่ไม่มีวิธีการดังกล่าว) |
เอเอ| สหกรณ์ BBBB | 22x | op vAA, vBBBB | |
21ต | op vAA, +BBBB | ||
21ส | op vAA, #+BBBB | ||
21ชม | op vAA, #+BBBB0000op vAA, #+BBBB000000000000 | ||
21ค | op vAA พิมพ์@BBBBop vAA, field@BBBBop vAA, method_handle@BBBBop vAA, proto@BBBBop vAA, string@BBBB | เช็คคาสต์ const-คลาส const-วิธีจัดการ const-method-type const-สตริง | |
เอเอ| op CC|BB | 23x | op vAA, vBB, vCC | |
22บี | op vAA, vBB, #+CC | ||
บี|เอ| ปฏิบัติการ CCCC | 22ต | op vA, vB, +CCCC | |
22ส | op vA, vB, #+CCCC | ||
22ค | op vA, vB, พิมพ์@CCCCop vA, vB, field@CCCC | อินสแตนซ์ของ | |
22ซ | op VA, vB, fieldoff@CCCC | รูปแบบที่แนะนำสำหรับคำแนะนำการเข้าถึงฟิลด์ที่เชื่อมโยงแบบคงที่ของรูปแบบ 22c | |
ØØ| สหกรณ์ AAAA แท้จริง AAAA สวัสดี | 30ต | op +AAAAAAAA | ไปที่/32 |
ØØ| สหกรณ์ AAAA BBBB | 32x | op aAAAA, vBBBB | |
เอเอ| op BBBB แท้จริง BBBB สวัสดี | 31i | op vAA, #+BBBBBBBB | |
31ต | op vAA, +BBBBBBBB | ||
31ค | op vAA, string@BBBBBBBB | const-string/จัมโบ้ | |
เอ|ก| op BBBB F|E|D|C | 35ค | [ A=5 ] op {vC, vD, veE, 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, veE, vF}, kind @BBBB[ A=3 ] op {vC, vD, veE} kind @BBBB[ A=2 ] op {vC, vD} kind @BBBB[ A=1 ] op {vC} kind @BBBB[ A=0 ] op {} kind @BBBBตัวเลือกตัวอักษรที่ผิดปกติที่นี่สะท้อนถึงความปรารถนาที่จะนับและดัชนีอ้างอิงมีป้ายกำกับเดียวกันกับในรูปแบบ 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@BBBBตัวเลือกตัวอักษรที่ผิดปกติที่นี่สะท้อนถึงความปรารถนาที่จะนับและดัชนีอ้างอิงมีป้ายกำกับเดียวกันกับในรูปแบบ 3rms | รูปแบบที่แนะนำสำหรับคำแนะนำ invoke-virtual และคำสั่งการ invoke-super ที่เชื่อมโยงแบบคงที่ของรูปแบบ 35c | |
35ไมล์ | [ A=5 ] op {vC, vD, vE, vF, vG}, อินไลน์@BBBB[ A=4 ] op {vC, vD, veE, vF}, inline@BBBB[ A=3 ] op {vC, vD, veE}, inline@BBBB[ A=2 ] op {vC, vD}, inline@BBBB[ A=1 ] op {vC}, อินไลน์@BBBBตัวเลือกตัวอักษรที่ผิดปกติที่นี่สะท้อนถึงความปรารถนาที่จะนับและดัชนีอ้างอิงมีป้ายกำกับเดียวกันกับในรูปแบบ 3rmi | รูปแบบที่แนะนำสำหรับคำแนะนำ invoke-static และแบบ invoke-virtual ของรูปแบบ 35c | |
เอเอ| สหกรณ์ BBBB CCCC | 3rc | op {vCCCC .. vNNNN}, meth@BBBBop {vCCCC .. vNNNN}, site@BBBBop {vCCCC .. vNNNN}, type@BBBB โดยที่ | |
3 นาที | op {vCCCC .. vNNNN}, vtaboff@BBBB โดยที่ | รูปแบบที่แนะนำสำหรับคำแนะนำ invoke-virtual และคำสั่งการ invoke-super ที่เชื่อมโยงแบบคงที่ของรูปแบบ 3rc | |
3rmi | op {vCCCC .. vNNNN}, inline@BBBB โดยที่ | รูปแบบที่แนะนำสำหรับคำแนะนำแบบอินไลน์ที่ลิงก์แบบอินไลน์ invoke-static และ invoke-virtual ของรูปแบบ 3rc | |
เอ|ก| op BBBB F|E|D|C HHHH | 45ซีซี | [ A=5 ] op {vC, vD, veE, vF, vG}, meth@BBBB, proto@HHHH[ A=4 ] op {vC, vD, veE, vF}, meth@BBBB, proto@HHHH[ A=3 ] op {vC, vD, veE}, meth@BBBB, proto@HHHH[ A=2 ] op {vC, vD}, meth@BBBB, proto@HHHH[ A=1 ] op {vC}, meth@BBBB, โปรโต@HHHH | เรียกใช้-polymorphic |
เอเอ| สหกรณ์ BBBB CCCC HHHH | 4rcc | op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH โดยที่ | เรียกใช้-polymorphic/range |
เอเอ| op BBBB แท้จริง BBBB BBBB BBBB สวัสดี | 51ล | op vAA, #+BBBBBBBBBBBBBBBB | กว้าง const |