รูปแบบคำสั่งปฏิบัติการ Dalvik

หน้านี้แสดงรายการรูปแบบคำสั่งที่ใช้โดยรูปแบบ 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, #+BBBB0000
op vAA, #+BBBB000000000000
21ค op vAA พิมพ์@BBBB
op vAA, field@BBBB
op vAA, method_handle@BBBB
op vAA, proto@BBBB
op 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, พิมพ์@CCCC
op 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@BBBB
op {vCCCC .. vNNNN}, site@BBBB
op {vCCCC .. vNNNN}, type@BBBB

โดยที่ NNNN = CCCC+AA-1 นั่นคือ A กำหนดจำนวน 0..255 และ C กำหนดการลงทะเบียนครั้งแรก

3 นาที op {vCCCC .. vNNNN}, vtaboff@BBBB

โดยที่ NNNN = CCCC+AA-1 นั่นคือ A กำหนดจำนวน 0..255 และ C กำหนดการลงทะเบียนครั้งแรก

รูปแบบที่แนะนำสำหรับคำแนะนำ invoke-virtual และคำสั่งการ invoke-super ที่เชื่อมโยงแบบคงที่ของรูปแบบ 3rc
3rmi op {vCCCC .. vNNNN}, inline@BBBB

โดยที่ NNNN = CCCC+AA-1 นั่นคือ A กำหนดจำนวน 0..255 และ C กำหนดการลงทะเบียนครั้งแรก

รูปแบบที่แนะนำสำหรับคำแนะนำแบบอินไลน์ที่ลิงก์แบบอินไลน์ 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

โดยที่ NNNN = CCCC+AA-1 นั่นคือ A กำหนดจำนวน 0..255 และ C กำหนดการลงทะเบียนครั้งแรก

เรียกใช้-polymorphic/range
เอเอ| op BBBB แท้จริง BBBB BBBB BBBB สวัสดี 51ล op vAA, #+BBBBBBBBBBBBBBBB กว้าง const