หน้านี้แสดงรายการรูปแบบคำสั่งที่ใช้โดยรูปแบบ Dalvik Executable และ Dalvik bytecode มีขึ้นเพื่อใช้ร่วมกับ เอกสารอ้างอิง bytecode
คำอธิบายระดับบิต
คอลัมน์แรกในตารางรูปแบบแสดงรายการเค้าโครงระดับบิตของรูปแบบ ประกอบด้วย "คำ" ที่คั่นด้วยช่องว่างตั้งแต่หนึ่งคำขึ้นไป ซึ่งแต่ละคำอธิบายหน่วยรหัส 16 บิต อักขระแต่ละตัวในคำแสดงถึงสี่บิต อ่านจากบิตสูงไปต่ำ โดยมีแถบแนวตั้ง (" |
") กระจายเพื่อช่วยในการอ่าน ตัวอักษรตัวพิมพ์ใหญ่ในลำดับจาก " A
" ใช้เพื่อระบุฟิลด์ภายในรูปแบบ (ซึ่งจะถูกกำหนดเพิ่มเติมโดยคอลัมน์ไวยากรณ์) คำว่า " op
" ใช้เพื่อระบุตำแหน่งของ opcode แปดบิตภายในรูปแบบ เครื่องหมายทับศูนย์ (" Ø
") ใช้เพื่อระบุว่าบิตทั้งหมดต้องเป็นศูนย์ในตำแหน่งที่ระบุ
โดยส่วนใหญ่ การเขียนอักษรจะดำเนินการจากหน่วยรหัสก่อนหน้าไปยังหน่วยรหัสในภายหลัง และลำดับต่ำถึงลำดับสูงภายในหน่วยรหัส อย่างไรก็ตาม มีข้อยกเว้นบางประการสำหรับกฎทั่วไปนี้ ซึ่งทำขึ้นเพื่อให้การตั้งชื่อส่วนที่มีความหมายคล้ายกันเหมือนกันในทุกรูปแบบคำสั่ง กรณีเหล่านี้ระบุไว้อย่างชัดเจนในคำอธิบายรูปแบบ
ตัวอย่างเช่น รูปแบบ " B|A| op CCCC
" ระบุว่ารูปแบบประกอบด้วยหน่วยโค้ด 16 บิตสองหน่วย คำแรกประกอบด้วย opcode ในแปดบิตต่ำและคู่ของค่าสี่บิตในแปดบิตสูง และคำที่สองประกอบด้วยค่า 16 บิตเดียว
รหัสรูปแบบ
คอลัมน์ที่สองในตารางรูปแบบระบุตัวระบุแบบสั้นสำหรับรูปแบบ ซึ่งใช้ในเอกสารอื่นๆ และในโค้ดเพื่อระบุรูปแบบ
รหัสรูปแบบส่วนใหญ่ประกอบด้วยอักขระสามตัว ตัวเลขสองหลักตามด้วยตัวอักษร หลักแรกระบุจำนวนหน่วยรหัส 16 บิตในรูปแบบ ตัวเลขหลักที่สองระบุจำนวนรีจิสเตอร์สูงสุดที่รูปแบบมีอยู่ (สูงสุด เนื่องจากบางรูปแบบสามารถรองรับจำนวนรีจิสเตอร์ที่แปรผันได้) โดยมีการกำหนดพิเศษ " r
" ระบุว่าช่วงของรีจิสเตอร์ถูกเข้ารหัส อักษรตัวสุดท้ายกึ่งช่วยในการจำระบุประเภทของข้อมูลพิเศษใดๆ ที่เข้ารหัสโดยรูปแบบ ตัวอย่างเช่น รูปแบบ " 21t
" มีความยาวสอง มีการอ้างอิงการลงทะเบียนหนึ่งรายการ และมีเป้าหมายสาขาเพิ่มเติม
รูปแบบการลิงก์แบบคงที่ที่แนะนำมีส่วนต่อท้าย " s
" เพิ่มเติม ทำให้มีอักขระทั้งหมดสี่ตัว ในทำนองเดียวกัน รูปแบบลิงก์ "อินไลน์" ที่แนะนำมีส่วนต่อท้าย " i
" เพิ่มเติม (ในบริบทนี้ การเชื่อมโยงแบบอินไลน์เป็นเหมือนการลิงก์แบบสแตติก ยกเว้นมีการเชื่อมโยงโดยตรงมากขึ้นในการปรับใช้เครื่อง) สุดท้าย รูปแบบที่แนะนำคู่แปลก ๆ (เช่น " 20bc
") รวมข้อมูลสองส่วนซึ่งทั้งสองแสดงอยู่ในรหัสรูปแบบ .
รายการตัวอักษรพิมพ์ดีดทั้งหมดมีดังนี้ โปรดทราบว่าบางรูปแบบมีขนาดแตกต่างกัน ขึ้นอยู่กับรูปแบบ:
ช่วยในการจำ | ขนาดบิต | ความหมาย |
---|---|---|
ข | 8 | ลงนามทันทีโดย yte |
ค | 16, 32 | c ดัชนีสระทันที |
ฉ | 16 | ค่าคงที่ระหว่าง f ace (ใช้เฉพาะในรูปแบบที่ลิงก์แบบสแตติกเท่านั้น) |
ชม. | 16 | ลงนามทันที h ที่ (บิตลำดับสูงของค่า 32- หรือ 64- บิต; บิตลำดับต่ำทั้งหมด 0 ) |
ผม | 32 | ลงชื่อทันที i nt หรือ float แบบ 32 บิต |
l | 64 | ลงนามทันที l ong หรือ 64-bit double |
ม | 16 | ค่าคงที่ ethod (ใช้เฉพาะในรูปแบบที่เชื่อมโยงแบบสแตติกเท่านั้น) |
น | 4 | ลงนามทันที n ibble |
ส | 16 | ลงนามทันที s hort |
t | 8, 16, 32 | สาขา t arget |
x | 0 | ไม่มีข้อมูลเพิ่มเติม |
ไวยากรณ์
คอลัมน์ที่สามของตารางรูปแบบระบุไวยากรณ์ที่มนุษย์กำหนดสำหรับคำแนะนำที่ใช้รูปแบบที่ระบุ แต่ละคำสั่งเริ่มต้นด้วยชื่อ opcode และตามด้วยอาร์กิวเมนต์อย่างน้อยหนึ่งอาร์กิวเมนต์ โดยคั่นด้วยเครื่องหมายจุลภาค
เมื่อใดก็ตามที่อาร์กิวเมนต์อ้างอิงถึงฟิลด์จากคอลัมน์แรก ตัวอักษรสำหรับฟิลด์นั้นจะถูกระบุในไวยากรณ์ ทำซ้ำหนึ่งครั้งสำหรับแต่ละสี่บิตของฟิลด์ ตัวอย่างเช่น ฟิลด์แปดบิตที่มีป้ายกำกับ " BB
" ในคอลัมน์แรกจะถูกระบุว่าเป็น " BB
" ในคอลัมน์ไวยากรณ์ด้วย
อาร์กิวเมนต์ที่ชื่อรีจิสเตอร์มีรูปแบบ " v X
" คำนำหน้า " v
" ถูกเลือกแทนที่จะเป็น " r
" ทั่วไป เพื่อหลีกเลี่ยงความขัดแย้งกับสถาปัตยกรรม (ไม่ใช่เสมือน) ซึ่งรูปแบบ Dalvik Executable อาจถูกนำไปใช้ซึ่งตัวเองใช้คำนำหน้า " r
" สำหรับการลงทะเบียน (นั่นคือ การตัดสินใจครั้งนี้ทำให้สามารถพูดคุยเกี่ยวกับการลงทะเบียนทั้งแบบเสมือนและของจริงร่วมกันได้โดยไม่จำเป็นต้องมีการล้อมรอบ)
อาร์กิวเมนต์ที่ระบุค่าตามตัวอักษรมีรูปแบบ " #+ X
" บางรูปแบบระบุตัวอักษรที่มีเฉพาะบิตที่ไม่ใช่ศูนย์ในบิตที่มีลำดับสูงเท่านั้น สำหรับสิ่งเหล่านี้ ศูนย์จะแสดงอย่างชัดเจนในไวยากรณ์ แม้ว่าจะไม่ปรากฏในการแสดงระดับบิต
อาร์กิวเมนต์ซึ่งระบุออฟเซ็ตที่อยู่คำสั่งสัมพัทธ์มีรูปแบบ " + X
"
อาร์กิวเมนต์ซึ่งระบุดัชนีพูลค่าคงที่ตามตัวอักษรมีรูปแบบ " kind @ X
" โดยที่ " kind
" ระบุว่ากำลังอ้างอิงพูลค่าคงที่ใด opcode แต่ละตัวที่ใช้รูปแบบดังกล่าวจะยอมให้มีค่าคงที่เพียงชนิดเดียวเท่านั้น ดูการอ้างอิง opcode เพื่อหาการติดต่อ ประเภทของพูลค่าคงที่คือ " string
" (ดัชนี string pool), " type
" (ดัชนีประเภท pool), " field
" (ดัชนี field pool), " meth
" (ดัชนี method pool) และ " site
" (ดัชนี call site ).
เช่นเดียวกับการแสดงดัชนีพูลคงที่ ยังมีรูปแบบที่แนะนำ (เป็นทางเลือก) ที่ระบุออฟเซ็ตหรือดัชนีที่เชื่อมโยงล่วงหน้า ค่าพรีลิงก์ที่แนะนำมีสองประเภท: vtable offsets (ระบุเป็น " vtaboff
") และ field offsets (ระบุเป็น " fieldoff
")
ในกรณีที่ค่ารูปแบบไม่ได้เป็นส่วนหนึ่งของไวยากรณ์อย่างชัดเจน แต่เลือกตัวแปรแทน แต่ละตัวแปรจะแสดงรายการด้วยคำนำหน้า " [ X = N ]
" (เช่น " [A=2]
") เพื่อระบุความสอดคล้อง .
รูปแบบ
รูปแบบ | ไอดี | ไวยากรณ์ | ครอบคลุม Opcodes ที่โดดเด่น |
---|---|---|---|
ไม่มี | 00x | N/A | รูปแบบหลอกที่ใช้สำหรับ opcodes ที่ไม่ได้ใช้ แนะนำให้ใช้เป็นรูปแบบเล็กน้อยสำหรับเบรกพอยต์ opcode |
ØØ| op | 10x | op | |
B|A| op | 12x | ตรงข้าม op , vB | |
11n | เทียบกับ op , #+B | ||
AA| op | 11x | op vAA | |
10t | op +AA | ไปที่ | |
ØØ| op AAAA | 20t | op +AAAA | goto/16 |
AA| op BBBB | 20bc | op AA ใจดี@BBBB | รูปแบบที่แนะนำสำหรับข้อผิดพลาดในการตรวจสอบที่กำหนดแบบคงที่ A คือประเภทของข้อผิดพลาด และ B เป็นดัชนีในตารางที่เหมาะสมกับประเภท (เช่น การอ้างอิงวิธีการสำหรับข้อผิดพลาดที่ไม่มีวิธีดังกล่าว) |
AA| op BBBB | 22x | op vAA, vBBBB | |
21t | กับ op , +BBBB | ||
21s | op vAA, #+BBBB | ||
21 ชม | กับ op , #+BBBB0000กับ op , #+BBBB000000000000 | ||
21c | op vAA พิมพ์@BBBBop vAA, field@BBBBop vAA, method_handle@BBBBop vAA, proto@BBBBop vAA, string@BBBB | เช็คคาสต์ const-class const-วิธีจัดการ const-method-type const-string | |
AA| op CC|BB | 23x | op vAA, vBB, vCC | |
22b | กับ op , vBB, #+CC | ||
B|A| op CCCC | 22t | ตรงข้าม op , vB, +CCCC | |
22s | op vA, vB, #+CCCC | ||
22c | op vA, vB, type@CCCCop vA, vB, field@CCCC | อินสแตนซ์ของ | |
22cs | op vA, vB, fieldoff@CCCC | รูปแบบที่แนะนำสำหรับคำแนะนำการเข้าถึงฟิลด์ที่เชื่อมโยงแบบสถิตของรูปแบบ 22c | |
ØØ| op AAAA lo AAAA สวัสดี | 30t | อ๊อฟ + op | goto/32 |
ØØ| อ๊อฟ AAAA BBBB | 32x | โดย op , vBBBB | |
AA| op bbbb lo bbbb hi | 31i | บน op , #+BBBBBBBB | |
31t | บน op , +BBBBBBBB | ||
31c | op vAA, string@BBBBBBBB | const-string/jumbo | |
A|G| ที่ 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 | |
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 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 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 invoke-virtual และ invoke invoke-super ลิงก์แบบสแตติกของรูปแบบ 3rc | |
3rmi | op {vCCCC .. vNNNN}, inline@BBBB โดยที่ | รูปแบบที่แนะนำสำหรับคำสั่ง invoke invoke-static และ invoke invoke-virtual ลิงก์แบบอินไลน์ของรูปแบบ3rc | |
A|G| ที่ 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 | เรียก-polymorphic |
AA| op BBBB CCCC HHHH | 4rcc | op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH โดยที่ | เรียก-polymorphic/range |
AA| op bbbb lo bbbb bbbb bbbb hi | 51l | บน op , #+BBBBBBBBBBBBBBBB | const-wide |