সাধারণ নকশা
- মেশিন মডেল এবং কলিং কনভেনশনগুলি প্রায় সাধারণ বাস্তব আর্কিটেকচার এবং সি-স্টাইল কলিং কনভেনশনগুলি অনুকরণ করার জন্য বোঝানো হয়েছে:
- মেশিনটি রেজিস্টার-ভিত্তিক, এবং ফ্রেম তৈরির সময় আকারে স্থির করা হয়। প্রতিটি ফ্রেমে একটি নির্দিষ্ট সংখ্যক রেজিস্টার (পদ্ধতি দ্বারা নির্দিষ্ট) এবং সেই সাথে পদ্ধতিটি চালানোর জন্য প্রয়োজনীয় যেকোন সহায়ক ডেটা থাকে, যেমন (তবে সীমাবদ্ধ নয়) প্রোগ্রাম কাউন্টার এবং
.dex
ফাইলের একটি রেফারেন্স যাতে পদ্ধতিটি রয়েছে। . - যখন বিট মানগুলির জন্য ব্যবহার করা হয় (যেমন পূর্ণসংখ্যা এবং ফ্লোটিং পয়েন্ট সংখ্যা), তখন রেজিস্টারগুলি 32 বিট প্রশস্ত হিসাবে বিবেচিত হয়। সংলগ্ন রেজিস্টার জোড়া 64-বিট মানের জন্য ব্যবহৃত হয়। রেজিস্টার জোড়া জন্য কোন প্রান্তিককরণ প্রয়োজন নেই.
- অবজেক্ট রেফারেন্সের জন্য যখন ব্যবহার করা হয়, তখন রেজিস্টারগুলিকে ঠিক এরকম একটি রেফারেন্স রাখার জন্য যথেষ্ট প্রশস্ত বলে মনে করা হয়।
- বিটওয়াইজ উপস্থাপনের ক্ষেত্রে,
(Object) null == (int) 0
। - ক্রম অনুসারে পদ্ধতির আমন্ত্রণ ফ্রেমের শেষ N রেজিস্টারে একটি পদ্ধতিতে N আর্গুমেন্ট রয়েছে। প্রশস্ত আর্গুমেন্ট দুটি রেজিস্টার গ্রাস করে। উদাহরণ পদ্ধতি একটি তাদের প্রথম যুক্তি হিসাবে
this
রেফারেন্স পাস করা হয়.
- মেশিনটি রেজিস্টার-ভিত্তিক, এবং ফ্রেম তৈরির সময় আকারে স্থির করা হয়। প্রতিটি ফ্রেমে একটি নির্দিষ্ট সংখ্যক রেজিস্টার (পদ্ধতি দ্বারা নির্দিষ্ট) এবং সেই সাথে পদ্ধতিটি চালানোর জন্য প্রয়োজনীয় যেকোন সহায়ক ডেটা থাকে, যেমন (তবে সীমাবদ্ধ নয়) প্রোগ্রাম কাউন্টার এবং
- নির্দেশ প্রবাহে স্টোরেজ ইউনিট হল একটি 16-বিট স্বাক্ষরবিহীন পরিমাণ। কিছু নির্দেশাবলীর কিছু বিট উপেক্ষা করা হয়/অবশ্যই শূন্য।
- নির্দেশাবলী অকারণে একটি নির্দিষ্ট ধরণের মধ্যে সীমাবদ্ধ নয়। উদাহরণস্বরূপ, নির্দেশাবলী যা ব্যাখ্যা ছাড়াই 32-বিট রেজিস্টার মানগুলিকে স্থানান্তরিত করে সেগুলিকে ints বা ফ্লোটগুলি চলন্ত কিনা তা নির্দিষ্ট করতে হবে না।
- স্ট্রিং, প্রকার, ক্ষেত্র এবং পদ্ধতির রেফারেন্সের জন্য আলাদাভাবে গণনা করা এবং সূচীকৃত ধ্রুবক পুল রয়েছে।
- বিটওয়াইজ আক্ষরিক ডেটা নির্দেশ স্ট্রীমে ইন-লাইন উপস্থাপন করা হয়।
- কারণ, বাস্তবে, একটি পদ্ধতির জন্য 16টির বেশি রেজিস্টারের প্রয়োজন হওয়া অস্বাভাবিক, এবং যেহেতু আটটির বেশি রেজিস্টারের প্রয়োজন যুক্তিসঙ্গতভাবে সাধারণ , অনেক নির্দেশাবলী শুধুমাত্র প্রথম 16টি রেজিস্টারকে সম্বোধন করার জন্য সীমাবদ্ধ। যখন যুক্তিসঙ্গতভাবে সম্ভব, নির্দেশাবলী প্রথম 256টি রেজিস্টার পর্যন্ত রেফারেন্সের অনুমতি দেয়। এছাড়াও, কিছু নির্দেশাবলীর ভেরিয়েন্ট রয়েছে যা অনেক বড় রেজিস্টার গণনার জন্য অনুমতি দেয়, যার মধ্যে এক জোড়া ক্যাচ-অল
move
নির্দেশাবলী রয়েছে যাv0
–v65535
রেঞ্জের রেজিস্টারগুলিকে সম্বোধন করতে পারে। এমন ক্ষেত্রে যেখানে একটি পছন্দসই রেজিস্টারের ঠিকানা দেওয়ার জন্য একটি নির্দেশের বৈকল্পিক উপলব্ধ নয়, এটি প্রত্যাশিত যে রেজিস্টারের বিষয়বস্তুগুলি মূল রেজিস্টার থেকে একটি নিম্ন রেজিস্টারে (অপারেশনের আগে) এবং/অথবা নিম্ন ফলাফলের রেজিস্টার থেকে উচ্চে স্থানান্তরিত হবে। নিবন্ধন (অপারেশনের পরে)। - বেশ কিছু "ছদ্ম-নির্দেশ" আছে যা পরিবর্তনশীল-দৈর্ঘ্যের ডেটা পেলোডগুলি ধরে রাখতে ব্যবহৃত হয়, যা নিয়মিত নির্দেশাবলী দ্বারা উল্লেখ করা হয় (উদাহরণস্বরূপ,
fill-array-data
)। এই ধরনের নির্দেশাবলী কার্যকর করার স্বাভাবিক প্রবাহের সময় কখনই সম্মুখীন হতে হবে না। উপরন্তু, নির্দেশাবলী অবশ্যই সমান-সংখ্যাযুক্ত বাইটকোড অফসেটগুলিতে অবস্থিত হওয়া আবশ্যক (অর্থাৎ, 4-বাইট সারিবদ্ধ)। এই প্রয়োজনীয়তা পূরণ করার জন্য, ডেক্স জেনারেশন টুলগুলিকে স্পেসার হিসাবে একটি অতিরিক্তnop
নির্দেশনা নির্গত করতে হবে যদি এই ধরনের নির্দেশ অন্যথায় আনলাইন করা হয়। অবশেষে, যদিও প্রয়োজন নেই, এটা প্রত্যাশিত যে বেশিরভাগ টুল পদ্ধতির শেষে এই নির্দেশগুলি নির্গত করতে বেছে নেবে, কারণ অন্যথায় এটি এমন হতে পারে যে তাদের চারপাশে শাখার জন্য অতিরিক্ত নির্দেশাবলীর প্রয়োজন হবে। - একটি চলমান সিস্টেমে ইনস্টল করা হলে, কিছু নির্দেশাবলী পরিবর্তন করা হতে পারে, তাদের বিন্যাস পরিবর্তন করে, একটি ইনস্টল-টাইম স্ট্যাটিক লিঙ্কিং অপ্টিমাইজেশান হিসাবে। লিঙ্কেজ জানা হয়ে গেলে এটি দ্রুত কার্যকর করার অনুমতি দেওয়ার জন্য। প্রস্তাবিত রূপগুলির জন্য সংশ্লিষ্ট নির্দেশ বিন্যাস নথি দেখুন। "প্রস্তাবিত" শব্দটি পরামর্শের সাথে ব্যবহার করা হয়; এগুলো বাস্তবায়ন করা বাধ্যতামূলক নয়।
- মানব-সিনট্যাক্স এবং স্মৃতিবিদ্যা:
- আর্গুমেন্টের জন্য গন্তব্য-তখন-উৎস ক্রম।
- কিছু অপকোডের একটি দ্ব্যর্থহীন নাম প্রত্যয় রয়েছে যা তারা যে প্রকারে কাজ করে তা নির্দেশ করে:
- টাইপ-সাধারণ 32-বিট অপকোডগুলি অচিহ্নিত।
- টাইপ-জেনারেল 64-বিট অপকোড-এর সাথে প্রত্যয় যুক্ত হয়
-wide
। - টাইপ-নির্দিষ্ট অপকোডগুলি তাদের টাইপের সাথে প্রত্যয়িত হয় (বা একটি সরল সংক্ষেপ), যার মধ্যে একটি:
-boolean
-byte
-char
-short
-int
-long
-float
-double
-object
-string
-class
-void
।
- কিছু অপকোডের অন্যথায়-অভিন্ন ক্রিয়াকলাপগুলিকে আলাদা করার জন্য একটি দ্ব্যর্থহীন প্রত্যয় রয়েছে যেখানে বিভিন্ন নির্দেশ বিন্যাস বা বিকল্প রয়েছে। এই প্রত্যয়গুলিকে একটি স্ল্যাশ ("
/
") দিয়ে প্রধান নাম থেকে পৃথক করা হয়েছে এবং প্রধানত বিদ্যমান থাকে যাতে কোডে স্ট্যাটিক ধ্রুবকগুলির সাথে এক-টু-ওয়ান ম্যাপিং থাকে যা এক্সিকিউটেবল তৈরি করে এবং ব্যাখ্যা করে (অর্থাৎ, অস্পষ্টতা কমাতে) মানুষের জন্য)। - এখানে বর্ণনায়, একটি মানের প্রস্থ (উদাহরণস্বরূপ, একটি ধ্রুবকের পরিসীমা বা সম্ভাব্যভাবে সম্বোধন করা নিবন্ধন সংখ্যা) প্রতি চার বিট প্রস্থে একটি অক্ষর ব্যবহার করে জোর দেওয়া হয়েছে।
- উদাহরণস্বরূপ, নির্দেশে "
move-wide/from16 vAA, vBBBB
":- "
move
" হল বেস অপকোড, বেস অপারেশন নির্দেশ করে (একটি রেজিস্টারের মান সরান)। - "
wide
" হল নাম প্রত্যয়, ইঙ্গিত করে যে এটি প্রশস্ত (64 বিট) ডেটাতে কাজ করে। - "
from16
" হল opcode প্রত্যয়, একটি বৈকল্পিক নির্দেশ করে যার একটি উৎস হিসেবে 16-বিট রেজিস্টার রেফারেন্স রয়েছে। - "
vAA
" হল গন্তব্য রেজিস্টার (অপারেশন দ্বারা উহ্য; আবার, নিয়ম হল যে গন্তব্য আর্গুমেন্ট সর্বদা প্রথমে আসে), যা অবশ্যইv0
–v255
রেঞ্জের মধ্যে থাকতে হবে। - "
vBBBB
" হল সোর্স রেজিস্টার, যা অবশ্যইv0
–v65535
রেঞ্জের মধ্যে থাকতে হবে।
- "
- বিভিন্ন নির্দেশ বিন্যাস ("অপ এবং ফরম্যাট"-এর অধীনে তালিকাভুক্ত) এবং অপকোড সিনট্যাক্স সম্পর্কে বিশদ বিবরণের জন্য নির্দেশ বিন্যাস নথি দেখুন।
- বাইটকোডটি বড় ছবিতে কোথায় ফিট করে সে সম্পর্কে আরও বিশদ বিবরণের জন্য
.dex
ফাইল বিন্যাস নথিটি দেখুন।
বাইটকোড সেটের সারাংশ
অপশন এবং ফরম্যাট | স্মৃতিবিদ্যা / সিনট্যাক্স | যুক্তি | বর্ণনা |
---|---|---|---|
00 10x | না | বর্জ্য চক্র। দ্রষ্টব্য: ডেটা-বহনকারী ছদ্ম-নির্দেশগুলি এই অপকোডের সাথে ট্যাগ করা হয়েছে, এই ক্ষেত্রে অপকোড ইউনিটের হাই-অর্ডার বাইট ডেটার প্রকৃতি নির্দেশ করে। নীচে " | |
01 12x | vA, vB সরান | A: গন্তব্য রেজিস্টার (4 বিট)B: সোর্স রেজিস্টার (4 বিট) | একটি নন-অবজেক্ট রেজিস্টারের বিষয়বস্তু অন্যটিতে সরান। |
02 22x | সরান/১৬ vAA, vBBBB থেকে | A: গন্তব্য রেজিস্টার (8 বিট)B: সোর্স রেজিস্টার (16 বিট) | একটি নন-অবজেক্ট রেজিস্টারের বিষয়বস্তু অন্যটিতে সরান। |
03 32x | move/16 vAAAA, vBBBB | A: গন্তব্য রেজিস্টার (16 বিট)B: সোর্স রেজিস্টার (16 বিট) | একটি নন-অবজেক্ট রেজিস্টারের বিষয়বস্তু অন্যটিতে সরান। |
04 12x | মুভ-ওয়াইড VA, vB | A: গন্তব্য রেজিস্টার জোড়া (4 বিট)B: সোর্স রেজিস্টার পেয়ার (4 বিট) | একটি রেজিস্টার-জোড়ার বিষয়বস্তু অন্যটিতে সরান। দ্রষ্টব্য: |
05 22x | move-wide/from16 vAA, vBBBB | A: গন্তব্য রেজিস্টার জোড়া (8 বিট)B: সোর্স রেজিস্টার পেয়ার (16 বিট) | একটি রেজিস্টার-জোড়ার বিষয়বস্তু অন্যটিতে সরান। দ্রষ্টব্য: বাস্তবায়নের বিবেচ্যগুলি উপরে, |
06 32x | move-wide/16 vAAAA, vBBBB | A: গন্তব্য রেজিস্টার জোড়া (16 বিট)B: সোর্স রেজিস্টার পেয়ার (16 বিট) | একটি রেজিস্টার-জোড়ার বিষয়বস্তু অন্যটিতে সরান। দ্রষ্টব্য: বাস্তবায়নের বিবেচ্যগুলি উপরে, |
07 12x | মুভ-অবজেক্ট vA, vB | A: গন্তব্য রেজিস্টার (4 বিট)B: সোর্স রেজিস্টার (4 বিট) | একটি বস্তু-বহনকারী রেজিস্টারের বিষয়বস্তু অন্যটিতে সরান। |
08 22x | move-object/from16 vAA, vBBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: সোর্স রেজিস্টার (16 বিট) | একটি বস্তু-বহনকারী রেজিস্টারের বিষয়বস্তু অন্যটিতে সরান। |
09 32x | move-object/16 vAAAA, vBBBB | A: গন্তব্য রেজিস্টার (16 বিট)B: সোর্স রেজিস্টার (16 বিট) | একটি বস্তু-বহনকারী রেজিস্টারের বিষয়বস্তু অন্যটিতে সরান। |
0a 11x | সরানো-ফলাফল vAA | A: গন্তব্য রেজিস্টার (8 বিট) | ইঙ্গিত রেজিস্টারে সাম্প্রতিক invoke- kind একক-শব্দ অ-অবজেক্ট ফলাফল সরান। এটি একটি invoke- kind পর অবিলম্বে নির্দেশ হিসাবে করা উচিত যার (একক-শব্দ, অ-বস্তু) ফলাফল উপেক্ষা করা যাবে না; অন্য কোথাও অবৈধ। |
0b 11x | সরানো-ফলাফল-ব্যাপী vAA | A: গন্তব্য রেজিস্টার জোড়া (8 বিট) | সবচেয়ে সাম্প্রতিক invoke- kind দ্বি-শব্দের ফলাফল নির্দেশিত রেজিস্টার জোড়ায় সরান। এটি অবশ্যই একটি invoke- kind পরপরই নির্দেশ হিসাবে করা উচিত যার (দ্বৈত শব্দ) ফলাফল উপেক্ষা করা যাবে না; অন্য কোথাও অবৈধ। |
0c 11x | সরানো-ফলাফল-অবজেক্ট vAA | A: গন্তব্য রেজিস্টার (8 বিট) | ইঙ্গিত রেজিস্টারে সাম্প্রতিক invoke- kind বস্তুর ফলাফলটি সরান। এটি একটি invoke- kind বা filled-new-array যার (অবজেক্ট) ফলাফল উপেক্ষা করা উচিত নয় তার পরে অবিলম্বে নির্দেশ হিসাবে করা উচিত; অন্য কোথাও অবৈধ। |
0d 11x | সরানো-ব্যতিক্রম vAA | A: গন্তব্য রেজিস্টার (8 বিট) | প্রদত্ত রেজিস্টারে একটি মাত্র ধরা ব্যতিক্রম সংরক্ষণ করুন। এটি অবশ্যই কোনো ব্যতিক্রম হ্যান্ডলারের প্রথম নির্দেশ হতে হবে যার ধরা ব্যতিক্রম উপেক্ষা করা যাবে না, এবং এই নির্দেশটি শুধুমাত্র ব্যতিক্রম হ্যান্ডলারের প্রথম নির্দেশ হিসাবে ঘটতে হবে; অন্য কোথাও অবৈধ। |
0e 10x | প্রত্যাবর্তন-অকার্যকর | একটি void পদ্ধতি থেকে ফিরে. | |
0f 11x | vAA ফেরত দিন | A: রিটার্ন ভ্যালু রেজিস্টার (8 বিট) | একটি একক-প্রস্থ (32-বিট) নন-অবজেক্ট মান-রিটার্নিং পদ্ধতি থেকে রিটার্ন করুন। |
10 11x | রিটার্ন-ওয়াইড vAA | A: রিটার্ন ভ্যালু রেজিস্টার-পেয়ার (8 বিট) | একটি দ্বিগুণ-প্রস্থ (64-বিট) মান-রিটার্নিং পদ্ধতি থেকে রিটার্ন করুন। |
11 11x | রিটার্ন-অবজেক্ট vAA | A: রিটার্ন ভ্যালু রেজিস্টার (8 বিট) | একটি অবজেক্ট-রিটার্নিং পদ্ধতি থেকে ফিরে আসুন। |
12 11n | const/4 vA, #+B | A: গন্তব্য রেজিস্টার (4 বিট)B: স্বাক্ষরিত int (4 বিট) | নির্দিষ্ট রেজিস্টারে প্রদত্ত আক্ষরিক মান (চিহ্ন-প্রসারিত 32 বিটে) সরান। |
13 21 সে | const/16 vAA, #+BBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: স্বাক্ষরিত int (16 বিট) | নির্দিষ্ট রেজিস্টারে প্রদত্ত আক্ষরিক মান (চিহ্ন-প্রসারিত 32 বিটে) সরান। |
14 31i | const vAA, #+BBBBBBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: নির্বিচারে 32-বিট ধ্রুবক | প্রদত্ত আক্ষরিক মানটি নির্দিষ্ট রেজিস্টারে সরান। |
15 21 ঘন্টা | const/high16 vAA, #+BBBB0000 | A: গন্তব্য রেজিস্টার (8 বিট)B: স্বাক্ষরিত int (16 বিট) | প্রদত্ত আক্ষরিক মান (ডান-শূন্য-32 বিটে প্রসারিত) নির্দিষ্ট রেজিস্টারে সরান। |
16 21 সে | const-wide/16 vAA, #+BBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: স্বাক্ষরিত int (16 বিট) | প্রদত্ত আক্ষরিক মান (চিহ্ন-প্রসারিত 64 বিট) নির্দিষ্ট রেজিস্টার-জোড়ায় সরান। |
17 31i | const-wide/32 vAA, #+BBBBBBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: স্বাক্ষরিত int (32 বিট) | প্রদত্ত আক্ষরিক মান (চিহ্ন-প্রসারিত 64 বিট) নির্দিষ্ট রেজিস্টার-জোড়ায় সরান। |
18 51 লি | const-wide vAA, #+BBBBBBBBBBBBBBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: নির্বিচারে দ্বিগুণ-প্রস্থ (64-বিট) ধ্রুবক | প্রদত্ত আক্ষরিক মানটি নির্দিষ্ট রেজিস্টার-জোড়ায় সরান। |
19 21 ঘন্টা | const-wide/high16 vAA, #+BBBB000000000000 | A: গন্তব্য রেজিস্টার (8 বিট)B: স্বাক্ষরিত int (16 বিট) | প্রদত্ত আক্ষরিক মান (ডান-শূন্য-64 বিটে প্রসারিত) নির্দিষ্ট রেজিস্টার-জোড়ায় সরান। |
1a 21c | const-স্ট্রিং vAA, string@BBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: স্ট্রিং ইনডেক্স | নির্দিষ্ট রেজিস্টারে প্রদত্ত সূচক দ্বারা নির্দিষ্ট করা স্ট্রিংয়ের একটি রেফারেন্স সরান। |
1b 31c | const-string/jumbo vAA, string@BBBBBBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: স্ট্রিং ইনডেক্স | নির্দিষ্ট রেজিস্টারে প্রদত্ত সূচক দ্বারা নির্দিষ্ট করা স্ট্রিংয়ের একটি রেফারেন্স সরান। |
1c 21c | const-শ্রেণীর vAA, টাইপ@BBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: টাইপ ইনডেক্স | নির্দিষ্ট রেজিস্টারে প্রদত্ত সূচক দ্বারা নির্দিষ্ট শ্রেণির একটি রেফারেন্স সরান। যে ক্ষেত্রে নির্দেশিত প্রকারটি আদিম, এটি আদিম প্রকারের অধঃপতিত শ্রেণীর একটি রেফারেন্স সংরক্ষণ করবে। |
1d 11x | মনিটর-এন্টার vAA | A: রেফারেন্স-বিয়ারিং রেজিস্টার (8 বিট) | নির্দেশিত বস্তুর জন্য মনিটর অর্জন করুন. |
1e 11x | মনিটর-প্রস্থান vAA | A: রেফারেন্স-বিয়ারিং রেজিস্টার (8 বিট) | নির্দেশিত বস্তুর জন্য মনিটর ছেড়ে দিন। দ্রষ্টব্য: যদি এই নির্দেশটি একটি ব্যতিক্রম ছুঁড়ে দেওয়ার প্রয়োজন হয়, তাহলে এটি এমনভাবে করতে হবে যেন পিসি ইতিমধ্যেই নির্দেশকে অতিক্রম করেছে। নির্দেশনাটি সফলভাবে কার্যকর করা (এক অর্থে) এবং নির্দেশের পরে ব্যতিক্রমটি ছুড়ে দেওয়া কিন্তু পরবর্তীটি চালানোর সুযোগ পাওয়ার আগে এটিকে ভাবতে কার্যকর হতে পারে। এই সংজ্ঞাটি একটি পদ্ধতির জন্য একটি মনিটর ক্লিনআপ ক্যাচ-অল (যেমন, |
1f 21c | চেক-কাস্ট vAA, টাইপ@BBBB | A: রেফারেন্স-বিয়ারিং রেজিস্টার (8 বিট)B: টাইপ ইনডেক্স (16 বিট) | একটি ClassCastException নিক্ষেপ করুন যদি প্রদত্ত রেজিস্টারের রেফারেন্স নির্দেশিত প্রকারে কাস্ট করা না যায়। দ্রষ্টব্য: যেহেতু |
20 22c | vA, vB, type@CCCC-এর উদাহরণ | A: গন্তব্য রেজিস্টার (4 বিট)B: রেফারেন্স বহনকারী রেজিস্টার (4 বিট)C: টাইপ ইনডেক্স (16 বিট) | প্রদত্ত গন্তব্য রেজিস্টার 1 এ সংরক্ষণ করুন যদি নির্দেশিত রেফারেন্সটি প্রদত্ত ধরণের একটি উদাহরণ হয়, অথবা যদি না হয় 0 । দ্রষ্টব্য: যেহেতু |
21 12x | অ্যারে-দৈর্ঘ্য vA, vB | A: গন্তব্য রেজিস্টার (4 বিট)B: অ্যারে রেফারেন্স-বিয়ারিং রেজিস্টার (4 বিট) | প্রদত্ত গন্তব্যে স্টোর করুন এন্ট্রিতে নির্দেশিত অ্যারের দৈর্ঘ্য নিবন্ধন করুন |
22 21 গ | নতুন-ইনস্ট্যান্স vAA, টাইপ@BBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: টাইপ ইনডেক্স | গন্তব্যে এটির একটি রেফারেন্স সংরক্ষণ করে নির্দেশিত প্রকারের একটি নতুন উদাহরণ তৈরি করুন। টাইপ একটি নন-অ্যারে ক্লাস উল্লেখ করতে হবে। |
23 22c | new-array vA, vB, type@CCCC | A: গন্তব্য রেজিস্টার (4 বিট)B: সাইজ রেজিস্টারC: টাইপ ইনডেক্স | নির্দেশিত প্রকার এবং আকারের একটি নতুন অ্যারে তৈরি করুন। ধরনটি অবশ্যই একটি অ্যারের প্রকার হতে হবে। |
24 35c | ভর্তি-নতুন-অ্যারে {vC, vD, vE, vF, vG}, type@BBBB | A: অ্যারের আকার এবং আর্গুমেন্ট শব্দ সংখ্যা (4 বিট)B: টাইপ ইনডেক্স (16 বিট)C..G: আর্গুমেন্ট রেজিস্টার (প্রতিটি 4 বিট) | প্রদত্ত প্রকার এবং আকারের একটি অ্যারে তৈরি করুন, সরবরাহকৃত বিষয়বস্তু দিয়ে এটি পূরণ করুন। ধরনটি অবশ্যই একটি অ্যারের প্রকার হতে হবে। অ্যারের বিষয়বস্তু অবশ্যই একক-শব্দ হতে হবে (অর্থাৎ, long বা double কোনো অ্যারে নয়, তবে রেফারেন্স প্রকার গ্রহণযোগ্য)। নির্মাণকৃত দৃষ্টান্তটি "ফলাফল" হিসাবে সংরক্ষণ করা হয় যেভাবে পদ্ধতি আহ্বানের নির্দেশাবলী তাদের ফলাফলগুলি সঞ্চয় করে, তাই নির্মিত উদাহরণটি অবিলম্বে পরবর্তী move-result-object নির্দেশ সহ একটি রেজিস্টারে স্থানান্তরিত করা আবশ্যক (যদি এটি ব্যবহার করা হয়) ) |
25 3rc | ভর্তি-নতুন-অ্যারে/রেঞ্জ {vCCCC .. vNNNN}, type@BBBB | A: অ্যারের আকার এবং আর্গুমেন্ট শব্দ সংখ্যা (8 বিট)B: টাইপ ইনডেক্স (16 বিট)C: প্রথম আর্গুমেন্ট রেজিস্টার (16 বিট)N = A + C - 1 | প্রদত্ত প্রকার এবং আকারের একটি অ্যারে তৈরি করুন, সরবরাহকৃত বিষয়বস্তু দিয়ে এটি পূরণ করুন। স্পষ্টীকরণ এবং সীমাবদ্ধতাগুলি উপরে বর্ণিত filled-new-array মতোই। |
26 31t | ফিল-অ্যারে-ডেটা vAA, +BBBBBBBB (নিচে " fill-array-data-payload ফরম্যাটে" উল্লেখ করা সম্পূরক ডেটা সহ) | A: অ্যারে রেফারেন্স (8 বিট)B: সাক্ষরিত "শাখা" অফসেট সারণী ডেটা সিউডো-নির্দেশনা (32 বিট) | নির্দেশিত ডেটা দিয়ে প্রদত্ত অ্যারেটি পূরণ করুন। রেফারেন্সটি অবশ্যই প্রাইমিটিভের একটি অ্যারের হতে হবে এবং ডেটা টেবিলটি অবশ্যই এটির প্রকারের সাথে মেলে এবং অ্যারেতে ফিট হওয়ার চেয়ে বেশি উপাদান থাকবে না। অর্থাৎ, অ্যারেটি টেবিলের চেয়ে বড় হতে পারে এবং যদি তাই হয়, তবে কেবলমাত্র অ্যারের প্রাথমিক উপাদানগুলি সেট করা হয়, বাকিগুলিকে একা রেখে। |
27 11x | vAA নিক্ষেপ | A: ব্যতিক্রম-বহনকারী রেজিস্টার (8 বিট) | নির্দেশিত ব্যতিক্রম নিক্ষেপ. |
28 10t | +AA যান | A: স্বাক্ষরিত শাখা অফসেট (8 বিট) | নিঃশর্তভাবে নির্দেশিত নির্দেশে ঝাঁপ দাও। দ্রষ্টব্য: শাখা অফসেট |
29 20t | goto/16 +AAAA | A: স্বাক্ষরিত শাখা অফসেট (16 বিট) | নিঃশর্তভাবে নির্দেশিত নির্দেশে ঝাঁপ দাও। দ্রষ্টব্য: শাখা অফসেট |
2a 30t | goto/32 +AAAAAAAA | A: স্বাক্ষরিত শাখা অফসেট (32 বিট) | নিঃশর্তভাবে নির্দেশিত নির্দেশে ঝাঁপ দাও। |
2b 31t | প্যাকড-সুইচ vAA, +BBBBBBBB (নিচে " packed-switch-payload ফর্ম্যাটে" উল্লেখ করা সম্পূরক ডেটা সহ) | A: পরীক্ষার জন্য নিবন্ধন করুনB: সাক্ষরিত "শাখা" অফসেট সারণী ডেটা সিউডো-নির্দেশনা (32 বিট) | একটি নির্দিষ্ট অবিচ্ছেদ্য পরিসরে প্রতিটি মানের সাথে সামঞ্জস্যপূর্ণ অফসেটগুলির একটি টেবিল ব্যবহার করে প্রদত্ত রেজিস্টারের মানের উপর ভিত্তি করে একটি নতুন নির্দেশে যান, অথবা কোন মিল না থাকলে পরবর্তী নির্দেশে যান। |
2c 31t | sparse-switch vAA, +BBBBBBBB (নিচে " sparse-switch-payload Format" এ উল্লেখিত সম্পূরক ডেটা সহ) | A: পরীক্ষার জন্য নিবন্ধন করুনB: সাক্ষরিত "শাখা" অফসেট সারণী ডেটা সিউডো-নির্দেশনা (32 বিট) | মান-অফসেট জোড়ার একটি অর্ডার করা টেবিল ব্যবহার করে প্রদত্ত রেজিস্টারের মানের উপর ভিত্তি করে একটি নতুন নির্দেশে যান, অথবা কোনো মিল না থাকলে পরবর্তী নির্দেশে যান। |
2d..31 23x | cmp ধরনের vAA, vBB, vCC 2d: cmpl-float (lt বায়াস) 2e: cmpg-float (gt বায়াস) 2f: cmpl-ডাবল (lt বায়াস) 30: cmpg-ডাবল (gt বায়াস) 31: cmp-লম্বা | A: গন্তব্য রেজিস্টার (8 বিট)B: প্রথম সোর্স রেজিস্টার বা পেয়ারC: দ্বিতীয় উৎস রেজিস্টার বা পেয়ার | নির্দেশিত ফ্লোটিং পয়েন্ট বা long তুলনা সম্পাদন করুন, a সেট করুন 0 যদি b == c , 1 যদি b > c , অথবা -1 যদি b < c । ফ্লোটিং পয়েন্ট ক্রিয়াকলাপগুলির জন্য তালিকাভুক্ত "পক্ষপাত" নির্দেশ করে যে কীভাবে NaN তুলনাগুলি আচরণ করা হয়: "gt পক্ষপাত" নির্দেশাবলী NaN তুলনার জন্য 1 প্রদান করে এবং "lt পক্ষপাত" নির্দেশাবলী -1 প্রদান করে। উদাহরণস্বরূপ, ফ্লোটিং পয়েন্ট |
32..37 22t | যদি- vA, vB, +CCCC পরীক্ষা করুন 32: if-eq 33: যদি-নেই 34: if-lt 35: if-ge 36: if-gt 37: if-le | A: পরীক্ষা করার জন্য প্রথম নিবন্ধন করুন (4 বিট)B: পরীক্ষার জন্য দ্বিতীয় নিবন্ধন (4 বিট)C: স্বাক্ষরিত শাখা অফসেট (16 বিট) | প্রদত্ত গন্তব্যে শাখা করুন যদি প্রদত্ত দুটি রেজিস্টারের মান নির্দিষ্ট হিসাবে তুলনা করে। দ্রষ্টব্য: শাখা অফসেট |
38..3d 21t | যদি- পরীক্ষা z vAA, +BBBB 38: if-eqz 39: if-nez 3a: if-ltz 3b: if-gez 3c: if-gtz 3d: if-lez | A: পরীক্ষা করার জন্য নিবন্ধন করুন (8 বিট)B: স্বাক্ষরিত শাখা অফসেট (16 বিট) | প্রদত্ত গন্তব্যের শাখায় প্রদত্ত রেজিস্টারের মান যদি উল্লেখিত হিসাবে 0 এর সাথে তুলনা করে। দ্রষ্টব্য: শাখা অফসেট |
3e..43 10x | (অব্যবহৃত) | (অব্যবহৃত) | |
44..51 23x | arrayop vAA, vBB, vCC 44: বয়স 45: বয়স-ব্যাপী 46: aget-বস্তু 47: বয়স-বুলিয়ান 48: এজেট-বাইট 49: aget-char 4a: বয়স-সংক্ষিপ্ত 4b: aput 4c: aput-ওয়াইড 4d: aput-অবজেক্ট 4e: aput-বুলিয়ান 4f: aput-byte 50: অপুট-চর 51: aput-short | A: মান নিবন্ধন বা জোড়া; উৎস বা গন্তব্য হতে পারে (8 বিট)B: অ্যারে রেজিস্টার (8 বিট)C: ইনডেক্স রেজিস্টার (8 বিট) | প্রদত্ত অ্যারের চিহ্নিত সূচকে চিহ্নিত অ্যারে অপারেশন সম্পাদন করুন, মান রেজিস্টারে লোড করা বা সঞ্চয় করা। |
52..5f 22c | i instanceop vA, vB, field@CCCC 52: iget 53: iget-ওয়াইড 54: iget-অবজেক্ট 55: iget-বুলিয়ান 56: iget-বাইট 57: iget-char 58: iget-ছোট 59: আইপুট 5a: আইপুট-ওয়াইড 5b: iput-অবজেক্ট 5c: iput-বুলিয়ান 5d: iput-byte 5e: iput-char 5f: iput-short | A: মান নিবন্ধন বা জোড়া; উৎস বা গন্তব্য হতে পারে (4 বিট)B: অবজেক্ট রেজিস্টার (4 বিট)C: উদাহরণ ক্ষেত্র রেফারেন্স সূচক (16 বিট) | চিহ্নিত ক্ষেত্র দ্বারা চিহ্নিত অবজেক্ট ইনস্ট্যান্স ক্ষেত্রের অপারেশন সম্পাদন করুন, মান রেজিস্টারে লোড করা বা সংরক্ষণ করা। দ্রষ্টব্য: এই অপকোডগুলি স্ট্যাটিক লিঙ্কিংয়ের জন্য যুক্তিসঙ্গত প্রার্থী, ফিল্ড আর্গুমেন্টকে আরও সরাসরি অফসেট হতে পরিবর্তন করে। |
60..6d 21c | s staticop vAA, field@BBBB 60: sget 61: sget-ওয়াইড 62: sget-অবজেক্ট 63: sget-বুলিয়ান 64: sget-বাইট 65: sget-char 66: sget-ছোট 67: থুতু 68: স্পুট-ওয়াইড 69: থুতু-বস্তু 6a: থুতু-বুলিয়ান 6b: স্পুট-বাইট 6c: sput-char 6d: থুতু-ছোট | A: মান নিবন্ধন বা জোড়া; উৎস বা গন্তব্য হতে পারে (8 বিট)B: স্ট্যাটিক ফিল্ড রেফারেন্স সূচক (16 বিট) | চিহ্নিত স্ট্যাটিক ফিল্ডের সাথে চিহ্নিত অবজেক্ট স্ট্যাটিক ফিল্ড অপারেশন সঞ্চালন করুন, মান রেজিস্টারে লোড করা বা সংরক্ষণ করুন। দ্রষ্টব্য: এই অপকোডগুলি স্ট্যাটিক লিঙ্কিংয়ের জন্য যুক্তিসঙ্গত প্রার্থী, ফিল্ড আর্গুমেন্টকে আরও সরাসরি অফসেট হতে পরিবর্তন করে। |
6e..72 35c | আহ্বান- ধরনের {vC, vD, vE, vF, vG}, meth@BBBB 6e: ইনভোক-ভার্চুয়াল 6f: invoke-super 70: invoke-direct 71: ইনভোক-স্ট্যাটিক 72: ইনভোক-ইন্টারফেস | A: আর্গুমেন্ট শব্দ গণনা (4 বিট)B: পদ্ধতির রেফারেন্স সূচক (16 বিট)C..G: আর্গুমেন্ট রেজিস্টার (প্রতিটি 4 বিট) | নির্দেশিত পদ্ধতিতে কল করুন। ফলাফল (যদি থাকে) অবিলম্বে পরবর্তী নির্দেশ হিসাবে একটি উপযুক্ত move-result* বৈকল্পিক সহ সংরক্ষণ করা যেতে পারে। যখন Dex ফাইল সংস্করণ দ্রষ্টব্য: এই অপকোডগুলি স্ট্যাটিক লিঙ্কিংয়ের জন্য যুক্তিসঙ্গত প্রার্থী, পদ্ধতির আর্গুমেন্টকে আরও সরাসরি অফসেট হতে পরিবর্তন করে (বা এর জোড়া)। |
73 10x | (অব্যবহৃত) | (অব্যবহৃত) | |
74..78 3rc | invoke- kind /range {vCCCC .. vNNNN}, meth@BBBB 74: ইনভোক-ভার্চুয়াল/রেঞ্জ 75: ইনভোক-সুপার/রেঞ্জ 76: invoke-direct/range 77: invoke-static/range 78: ইনভোক-ইন্টারফেস/রেঞ্জ | A: আর্গুমেন্ট শব্দ গণনা (8 বিট)B: পদ্ধতির রেফারেন্স সূচক (16 বিট)C: প্রথম আর্গুমেন্ট রেজিস্টার (16 বিট)N = A + C - 1 | নির্দেশিত পদ্ধতিতে কল করুন। বিশদ বিবরণ, সতর্কতা এবং পরামর্শের জন্য উপরে প্রথম invoke- kind বিবরণ দেখুন। |
79..7a 10x | (অব্যবহৃত) | (অব্যবহৃত) | |
7b..8f 12x | unop vA, vB 7b: neg-int 7c: not-int 7d: নেগ-লং 7e: দীর্ঘ নয় 7f: neg-float 80: নেগ-ডবল 81: int-থেকে-লং 82: int-to-float 83: int-টু-ডবল 84: দীর্ঘ থেকে int 85: লং-টু-ফ্লোট 86: দীর্ঘ থেকে দ্বিগুণ 87: float-to-int 88: ভাসা থেকে দীর্ঘ 89: ফ্লোট-টু-ডাবল 8a: ডবল থেকে int 8b: দ্বিগুণ থেকে দীর্ঘ 8c: ডাবল-টু-ফ্লোট 8d: int-to-byte 8e: int-to-char 8f: int-to-short | A: গন্তব্য রেজিস্টার বা জোড়া (4 বিট)B: সোর্স রেজিস্টার বা পেয়ার (4 বিট) | গন্তব্য রেজিস্টারে ফলাফল সংরক্ষণ করে সোর্স রেজিস্টারে চিহ্নিত ইউনারি অপারেশন করুন। |
90..af 23x | binop vAA, vBB, vCC 90: অ্যাড-ইন 91: উপ-int 92: mul-int 93: div-int 94: rem-int 95: এবং-int 96: or-int 97: xor-int 98: shl-int 99: shr-int 9a: ushr-int 9b: অ্যাড-লং 9c: উপ-দীর্ঘ 9d: মুল-লং 9e: ডিভ-লং 9f: রেম-লং a0: এবং দীর্ঘ a1: বা দীর্ঘ a2: xor-লং a3: shl-দীর্ঘ a4: shr-লং a5: উশর-দীর্ঘ a6: অ্যাড-ফ্লোট a7: সাব-ফ্লোট a8: mul-float a9: div-float aa: rem-float ab: অ্যাড-ডাবল ac: সাব-ডবল বিজ্ঞাপন: mul-ডবল ae: ডিভ-ডবল af: rem-ডাবল | A: গন্তব্য নিবন্ধন বা জোড়া (8 বিট)B: প্রথম সোর্স রেজিস্টার বা পেয়ার (8 বিট)C: দ্বিতীয় উৎস নিবন্ধন বা জোড়া (8 বিট) | দুটি উৎস রেজিস্টারে চিহ্নিত বাইনারি অপারেশন সম্পাদন করুন, ফলাফলটি গন্তব্য রেজিস্টারে সংরক্ষণ করুন। দ্রষ্টব্য: অন্যান্য |
b0..cf 12x | binop /2addr vA, vB b0: add-int/2addr b1: sub-int/2addr b2: mul-int/2addr b3: div-int/2addr b4: rem-int/2addr b5: and-int/2addr b6: or-int/2addr b7: xor-int/2addr b8: shl-int/2addr b9: shr-int/2addr ba: ushr-int/2addr bb: add-long/2addr bc: sub-long/2addr bd: mul-long/2addr হতে: div-long/2addr bf: rem-long/2addr c0: and-long/2addr c1: or-long/2addr c2: xor-long/2addr c3: shl-long/2addr c4: shr-long/2addr c5: ushr-long/2addr c6: add-float/2addr c7: sub-float/2addr c8: mul-float/2addr c9: div-float/2addr ca: rem-float/2addr cb: add-double/2addr cc: সাব-ডাবল/2addr cd: mul-double/2addr ce: div-double/2addr cf: rem-double/2addr | A: গন্তব্য এবং প্রথম উৎস নিবন্ধন বা জোড়া (4 বিট)B: দ্বিতীয় উৎস নিবন্ধন বা জোড়া (4 বিট) | দুটি সোর্স রেজিস্টারে চিহ্নিত বাইনারি অপারেশন সম্পাদন করুন, ফলাফলটি প্রথম সোর্স রেজিস্টারে সংরক্ষণ করুন। দ্রষ্টব্য: অন্যান্য |
d0..d7 22s | binop /lit16 vA, vB, #+CCCC d0: add-int/lit16 d1: rsub-int (বিপরীত বিয়োগ) d2: mul-int/lit16 d3: div-int/lit16 d4: rem-int/lit16 d5: and-int/lit16 d6: or-int/lit16 d7: xor-int/lit16 | A: গন্তব্য রেজিস্টার (4 বিট)B: সোর্স রেজিস্টার (4 বিট)C: স্বাক্ষরিত int ধ্রুবক (16 বিট) | নির্দেশিত রেজিস্টারে (প্রথম যুক্তি) এবং আক্ষরিক মান (দ্বিতীয় যুক্তি) নির্দেশিত বাইনারি অপটি সম্পাদন করুন, ফলাফলটি গন্তব্য রেজিস্টারে সংরক্ষণ করুন। দ্রষ্টব্য: |
d8..e2 22b | binop /lit8 vAA, vBB, #+CC d8: add-int/lit8 d9: rsub-int/lit8 da: mul-int/lit8 db: div-int/lit8 dc: rem-int/lit8 dd: and-int/lit8 de: or-int/lit8 df: xor-int/lit8 e0: shl-int/lit8 e1: shr-int/lit8 e2: ushr-int/lit8 | A: গন্তব্য রেজিস্টার (8 বিট)B: সোর্স রেজিস্টার (8 বিট)C: স্বাক্ষরিত int ধ্রুবক (8 বিট) | নির্দেশিত রেজিস্টারে (প্রথম যুক্তি) এবং আক্ষরিক মান (দ্বিতীয় যুক্তি) নির্দেশিত বাইনারি অপটি সম্পাদন করুন, ফলাফলটি গন্তব্য রেজিস্টারে সংরক্ষণ করুন। দ্রষ্টব্য: |
e3..f9 10x | (অব্যবহৃত) | (অব্যবহৃত) | |
fa 45cc | ইনভোক-পলিমরফিক {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH | A: আর্গুমেন্ট শব্দ গণনা (4 বিট)B: পদ্ধতির রেফারেন্স সূচক (16 বিট)C: রিসিভার (4 বিট)D..G: আর্গুমেন্ট রেজিস্টার (4 বিট প্রতিটি)H: প্রোটোটাইপ রেফারেন্স সূচক (16 বিট) | নির্দেশিত স্বাক্ষর পলিমরফিক পদ্ধতি চালু করুন। ফলাফল (যদি থাকে) অবিলম্বে পরবর্তী নির্দেশ হিসাবে একটি উপযুক্ত move-result* বৈকল্পিক সহ সংরক্ষণ করা যেতে পারে।পদ্ধতির রেফারেন্স অবশ্যই একটি স্বাক্ষর বহুরূপী পদ্ধতিতে হতে হবে, যেমন java.lang.invoke.MethodHandle.invoke বা java.lang.invoke.MethodHandle.invokeExact ।রিসিভার অবশ্যই এমন একটি বস্তু হতে হবে যা স্বাক্ষরিত পলিমরফিক পদ্ধতিকে আহ্বান করা হচ্ছে। প্রোটোটাইপ রেফারেন্স প্রদত্ত আর্গুমেন্ট প্রকার এবং প্রত্যাশিত রিটার্ন টাইপ বর্ণনা করে। invoke-polymorphic বাইটকোড এক্সিকিউট করার সময় ব্যতিক্রম বাড়াতে পারে। স্বাক্ষর পলিমরফিক পদ্ধতির জন্য API ডকুমেন্টেশনে ব্যতিক্রমগুলি বর্ণনা করা হয়েছে।সংস্করণ 038 থেকে ডেক্স ফাইলগুলিতে উপস্থাপন করুন। |
fb 4rcc | invoke-polymorphic/range {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH | A: আর্গুমেন্ট শব্দ গণনা (8 বিট)B: পদ্ধতির রেফারেন্স সূচক (16 বিট)C: রিসিভার (16 বিট)H: প্রোটোটাইপ রেফারেন্স সূচক (16 বিট)N = A + C - 1 | নির্দেশিত পদ্ধতি হ্যান্ডেল আহ্বান করুন. বিস্তারিত জানার জন্য উপরে invoke-polymorphic বিবরণ দেখুন।সংস্করণ 038 থেকে ডেক্স ফাইলগুলিতে উপস্থাপন করুন। |
fc 35c | ইনভোক-কাস্টম {vC, vD, vE, vF, vG}, call_site@BBBB | A: আর্গুমেন্ট শব্দ গণনা (4 বিট)B: কল সাইট রেফারেন্স সূচক (16 বিট)C..G: আর্গুমেন্ট রেজিস্টার (প্রতিটি 4 বিট) | নির্দেশিত কল সাইটটি সমাধান করে এবং আহ্বান করে। আহ্বানের ফলাফল (যদি থাকে) অবিলম্বে পরবর্তী নির্দেশ হিসাবে একটি উপযুক্ত move-result* বৈকল্পিক সহ সংরক্ষণ করা যেতে পারে।এই নির্দেশটি দুটি পর্যায়ে কার্যকর হয়: কল সাইট রেজোলিউশন এবং কল সাইট ইনভোকেশন। কল সাইটের রেজোলিউশন চেক করে যে নির্দেশিত কল সাইটের কোনো সংশ্লিষ্ট java.lang.invoke.CallSite উদাহরণ আছে কিনা। যদি না হয়, নির্দেশিত কল সাইটের জন্য বুটস্ট্র্যাপ লিঙ্কার পদ্ধতিটি DEX ফাইলে উপস্থিত আর্গুমেন্ট ব্যবহার করে আহ্বান করা হয় ( কল_সাইট_আইটেম দেখুন)। বুটস্ট্র্যাপ লিঙ্কার পদ্ধতি একটি java.lang.invoke.CallSite ইন্সট্যান্স প্রদান করে যেটি তখন নির্দেশিত কল সাইটের সাথে যুক্ত হবে যদি কোনো অ্যাসোসিয়েশন না থাকে। অন্য একটি থ্রেড ইতিমধ্যেই প্রথম অ্যাসোসিয়েশন তৈরি করে থাকতে পারে, এবং যদি তাই হয় তাহলে নির্দেশের বাস্তবায়ন প্রথম যুক্ত java.lang.invoke.CallSite উদাহরণের সাথে চলতে থাকে।সমাধান করা java.lang.invoke.CallSite উদাহরণের java.lang.invoke.MethodHandle টার্গেটে কল সাইট ইনভোকেশন করা হয়। একটি সঠিক পদ্ধতি হ্যান্ডেল ইনভোকেশনের আর্গুমেন্ট হিসাবে invoke-custom নির্দেশের আর্গুমেন্ট এবং মেথড হ্যান্ডেল ব্যবহার করে invoke-polymorphic (উপরে বর্ণিত) চালানোর মতো টার্গেটকে আহ্বান করা হয়।বুটস্ট্র্যাপ লিঙ্কার পদ্ধতি দ্বারা উত্থাপিত ব্যতিক্রমগুলি একটি java.lang.BootstrapMethodError এ মোড়ানো হয়। একটি BootstrapMethodError ও উত্থাপিত হয় যদি:
038 থেকে ডেক্স ফাইলগুলিতে উপস্থাপন করুন। |
fd 3rc | invoke-custom/range {vCCCC .. vNNNN}, call_site@BBBB | A: আর্গুমেন্ট শব্দ গণনা (8 বিট)B: কল সাইট রেফারেন্স সূচক (16 বিট)C: প্রথম আর্গুমেন্ট রেজিস্টার (16-বিট)N = A + C - 1 | সমাধান করুন এবং একটি কল সাইট আহ্বান করুন। বিস্তারিত জানার জন্য উপরে invoke-custom বিবরণ দেখুন।সংস্করণ 038 থেকে ডেক্স ফাইলগুলিতে উপস্থাপন করুন। |
fe 21c | const-method-handle vAA, method_handle@BBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: পদ্ধতি হ্যান্ডেল সূচক (16 বিট) | নির্দিষ্ট রেজিস্টারে প্রদত্ত সূচক দ্বারা নির্দিষ্ট পদ্ধতি হ্যান্ডেলের একটি রেফারেন্স সরান। সংস্করণ 039 এর পর থেকে ডেক্স ফাইলগুলিতে উপস্থিত। |
ff 21c | const-method-type vAA, proto@BBBB | A: গন্তব্য রেজিস্টার (8 বিট)B: পদ্ধতি প্রোটোটাইপ রেফারেন্স (16 বিট) | নির্দিষ্ট রেজিস্টারে প্রদত্ত সূচক দ্বারা নির্দিষ্ট পদ্ধতির প্রোটোটাইপের একটি রেফারেন্স সরান। সংস্করণ 039 এর পর থেকে ডেক্স ফাইলগুলিতে উপস্থিত। |
প্যাকড-সুইচ-পেলোড বিন্যাস
নাম | বিন্যাস | বর্ণনা |
---|---|---|
পরিচয় | ushort = 0x0100 | ছদ্ম-অপকোড সনাক্তকরণ |
আকার | ছোট | টেবিলে এন্ট্রির সংখ্যা |
প্রথম_কী | int | প্রথম (এবং সর্বনিম্ন) স্যুইচ কেস মান |
লক্ষ্য | int[] | size আপেক্ষিক শাখা লক্ষ্যের তালিকা। লক্ষ্যগুলি সুইচ অপকোডের ঠিকানার সাথে সম্পর্কিত, এই টেবিলের নয়। |
দ্রষ্টব্য: এই টেবিলের একটি উদাহরণের জন্য কোড ইউনিটের মোট সংখ্যা হল (size * 2) + 4
।
sparse-switch-payload বিন্যাস
নাম | বিন্যাস | বর্ণনা |
---|---|---|
পরিচয় | ushort = 0x0200 | ছদ্ম-অপকোড সনাক্তকরণ |
আকার | ছোট | টেবিলে এন্ট্রির সংখ্যা |
চাবি | int[] | size কী মানগুলির তালিকা, নিম্ন-থেকে-উচ্চ বাছাই করা |
লক্ষ্য | int[] | size আপেক্ষিক শাখা লক্ষ্যগুলির তালিকা, প্রতিটি একই সূচকে মূল মানের সাথে সম্পর্কিত। লক্ষ্যগুলি সুইচ অপকোডের ঠিকানার সাথে সম্পর্কিত, এই টেবিলের নয়। |
দ্রষ্টব্য: এই টেবিলের একটি উদাহরণের জন্য কোড ইউনিটের মোট সংখ্যা হল (size * 4) + 2
।
পূরণ-অ্যারে-ডেটা-পেলোড বিন্যাস
নাম | বিন্যাস | বর্ণনা |
---|---|---|
পরিচয় | ushort = 0x0300 | ছদ্ম-অপকোড সনাক্তকরণ |
উপাদান_প্রস্থ | ছোট | প্রতিটি উপাদানে বাইটের সংখ্যা |
আকার | uint | টেবিলে উপাদানের সংখ্যা |
তথ্য | ubyte[] | ডেটা মান |
দ্রষ্টব্য: এই টেবিলের একটি উদাহরণের জন্য কোড ইউনিটের মোট সংখ্যা হল (size * element_width + 1) / 2 + 4
।
গাণিতিক অপারেশন বিবরণ
দ্রষ্টব্য: ফ্লোটিং পয়েন্ট অপারেশনগুলিকে অবশ্যই IEEE 754 নিয়মগুলি অনুসরণ করতে হবে, রাউন্ড-টু-নেয়ারস্ট এবং ক্রমান্বয়ে আন্ডারফ্লো ব্যবহার করে, অন্যথায় বলা ছাড়া।
অপকোড | C শব্দার্থবিদ্যা | মন্তব্য |
---|---|---|
neg-int | int32 a; int32 ফলাফল = -a; | Unary twos- পরিপূরক. |
not-int | int32 a; int32 ফলাফল = ~a; | Unary বেশী - পরিপূরক. |
neg-দীর্ঘ | int64 a; int64 ফলাফল = -a; | Unary twos- পরিপূরক. |
দীর্ঘ নয় | int64 a; int64 ফলাফল = ~a; | Unary বেশী - পরিপূরক. |
neg-float | float a; float result = -a; | ফ্লোটিং পয়েন্ট নেগেশান। |
নেগ-ডবল | ডবল a; দ্বিগুণ ফলাফল = -a; | ফ্লোটিং পয়েন্ট নেগেশান। |
int-to-long | int32 a; int64 ফলাফল = (int64) a; | int32 এর int64 এ স্বাক্ষর করুন। |
int-to-float | int32 a; float result = (float) a; | বৃত্তাকার থেকে নিকটবর্তী ব্যবহার করে int32 কে float রূপান্তর। এটি কিছু মানের জন্য নির্ভুলতা হারায়। |
ইন-টু-ডাবল | int32 a; ডাবল ফলাফল = (ডাবল) এ; | int32 এর double রূপান্তর। |
দীর্ঘ থেকে ইন-ইন | int64 a; int32 ফলাফল = (int32) a; | int64 এর int32 এ কাটা। |
দীর্ঘ থেকে ফ্লাট | int64 a; ভাসমান ফলাফল = (ভাসমান) এ; | বৃত্তাকার থেকে নিকটবর্তী ব্যবহার করে int64 এর float রূপান্তর। এটি কিছু মানের জন্য নির্ভুলতা হারায়। |
দীর্ঘ থেকে ডাবল | int64 a; ডাবল ফলাফল = (ডাবল) এ; | রাউন্ড-টু-নিকটস্থ ব্যবহার করে int64 এর double রূপান্তর। এটি কিছু মানের জন্য নির্ভুলতা হারায়। |
ভাসমান থেকে ইন-ইন | float a; int32 ফলাফল = (int32) a; | রাউন্ড-টুয়ার্ড-জিরো ব্যবহার করে int32 এ float রূপান্তর। NaN এবং -0.0 (নেতিবাচক শূন্য) পূর্ণসংখ্যার 0 এ রূপান্তর করুন। খুব বড় একটি মাত্রার সাথে ইনফিনিটিস এবং মানগুলি প্রতিনিধিত্ব করতে হবে 0x7fffffff বা -0x80000000 সাইন উপর নির্ভর করে রূপান্তরিত করুন। |
ভাসমান থেকে দীর্ঘ | float a; int64 ফলাফল = (int64) a; | রাউন্ড-টুয়ার্ড-জিরো ব্যবহার করে float int64 এ রূপান্তর। float-to-int হিসাবে একই বিশেষ কেস বিধিগুলি এখানে প্রয়োগ হয়, ব্যতীত পরিসীমাগুলির বাইরে মানগুলি 0x7fffffffffffffff বা -0x8000000000000000 সাইন উপর নির্ভর করে রূপান্তরিত হয়। |
ভাসমান থেকে ডাবল | float a; ডাবল ফলাফল = (ডাবল) এ; | float double রূপান্তর, মানটি ঠিক সংরক্ষণ করে। |
ডাবল টু-ইন | ডবল a; int32 ফলাফল = (int32) a; | রাউন্ড-টুয়ার্ড-জিরো ব্যবহার করে double int32 এ রূপান্তর। float-to-int হিসাবে একই বিশেষ কেস বিধিগুলি এখানে প্রয়োগ হয়। |
ডাবল থেকে দীর্ঘ | ডবল a; int64 ফলাফল = (int64) a; | রাউন্ড-টুয়ার্ড-জিরো ব্যবহার করে double int64 এ রূপান্তর। float-to-long হিসাবে একই বিশেষ কেস বিধিগুলি এখানে প্রয়োগ হয়। |
ডাবল টু ফ্লাট | ডবল a; ভাসমান ফলাফল = (ভাসমান) এ; | বৃত্তাকার থেকে নিকটতম ব্যবহার করে double থেকে float রূপান্তর। এটি কিছু মানের জন্য নির্ভুলতা হারায়। |
ইন-টু-বাইট | int32 a; int32 ফলাফল = (একটি << 24) >> 24; | int32 থেকে int8 এর কাটা, ফলাফল প্রসারিত করে সাইন করুন। |
int-to-Char | int32 a; int32 ফলাফল = a & 0xffff; | সাইন এক্সটেনশন ছাড়াই int32 থেকে uint16 থেকে কাটা কাটা। |
ইন্ট-টু-শর্ট | int32 a; int32 ফলাফল = (একটি << 16) >> 16; | int32 থেকে int16 এর কাটা, ফলাফলটি প্রসারিত করে সাইন করুন। |
অ্যাড-ইন | int32 a, b; int32 ফলাফল = a + b; | দ্বিগুণ পরিপূর্ণতা সংযোজন। |
সাব-ইন | int32 a, b; int32 ফলাফল = এ - বি; | দ্বিগুণ পরিপূরক বিয়োগ। |
আরএসইউবি-ইন | int32 a, b; int32 ফলাফল = বি - এ; | দ্বিগুণ পরিপূরক বিপরীত বিয়োগ। |
মুল-ইন | int32 a, b; int32 ফলাফল = এ * বি; | দ্বিগুণ পরিপূরক গুণ। |
ডিভ-ইন | int32 a, b; int32 ফলাফল = এ / বি; | দ্বিগুণ-পরিপূরক বিভাগ, শূন্যের দিকে বৃত্তাকার (এটি, পূর্ণসংখ্যার দিকে কাটা)। এটি b == 0 যদি ArithmeticException ছুঁড়ে দেয়। |
Rem-int | int32 a, b; int32 ফলাফল = একটি % বি; | বিভক্তির পরে দ্বিগুণ-পরিপূরক বাকি। ফলাফলের চিহ্নটি a এর সমান, এবং এটি result == a - (a / b) * b । এটি b == 0 যদি ArithmeticException ছুঁড়ে দেয়। |
এবং ইন | int32 a, b; int32 ফলাফল = এ & বি; | বিটওয়াইজ এবং। |
বা-ইন | int32 a, b; int32 ফলাফল = এ | খ; | বিটওয়াইজ বা। |
xor-int | int32 a, b; int32 ফলাফল = a ^ b; | Bitwise XOR. |
shl-int | int32 a, b; int32 ফলাফল = একটি << (বি & 0x1f); | বিটওয়াইজ শিফট বাম (মুখোশযুক্ত যুক্তি সহ)। |
shr-int | int32 a, b; int32 ফলাফল = এ >> (বি & 0x1f); | বিটওয়াইজ স্বাক্ষরিত শিফট ডানদিকে (মুখোশযুক্ত যুক্তি সহ)। |
ushr-int | uint32 এ, বি; int32 ফলাফল = এ >> (বি & 0x1f); | বিটওয়াইজ স্বাক্ষরযুক্ত শিফট ডান (মুখোশযুক্ত যুক্তি সহ)। |
দীর্ঘ দীর্ঘ | int64 a, b; int64 ফলাফল = a + b; | দ্বিগুণ পরিপূর্ণতা সংযোজন। |
উপ-দীর্ঘ | int64 a, b; int64 ফলাফল = এ - বি; | দ্বিগুণ পরিপূরক বিয়োগ। |
মুল-লং | int64 a, b; int64 ফলাফল = এ * বি; | দ্বিগুণ পরিপূরক গুণ। |
ডিভল দীর্ঘ | int64 a, b; int64 ফলাফল = এ / বি; | দ্বিগুণ-পরিপূরক বিভাগ, শূন্যের দিকে বৃত্তাকার (এটি, পূর্ণসংখ্যার দিকে কাটা)। এটি b == 0 যদি ArithmeticException ছুঁড়ে দেয়। |
রিম-লং | int64 a, b; int64 ফলাফল = একটি % বি; | বিভক্তির পরে দ্বিগুণ-পরিপূরক বাকি। ফলাফলের চিহ্নটি a এর সমান, এবং এটি result == a - (a / b) * b । এটি b == 0 যদি ArithmeticException ছুঁড়ে দেয়। |
এবং দীর্ঘ | int64 a, b; int64 ফলাফল = এ & বি; | বিটওয়াইজ এবং। |
লং | int64 a, b; int64 ফলাফল = a | খ; | বিটওয়াইজ বা। |
xor-দীর্ঘ | int64 a, b; int64 ফলাফল = a ^ b; | Bitwise XOR. |
shl-long | int64 a; int32 খ; int64 ফলাফল = একটি << (বি & 0x3f); | বিটওয়াইজ শিফট বাম (মুখোশযুক্ত যুক্তি সহ)। |
shr-long | int64 a; int32 খ; int64 ফলাফল = এ >> (বি & 0x3f); | বিটওয়াইজ স্বাক্ষরিত শিফট ডানদিকে (মুখোশযুক্ত যুক্তি সহ)। |
ushr-long | uint64 এ; int32 খ; int64 ফলাফল = এ >> (বি & 0x3f); | বিটওয়াইজ স্বাক্ষরযুক্ত শিফট ডান (মুখোশযুক্ত যুক্তি সহ)। |
যোগ করুন | float a, b; ভাসমান ফলাফল = এ + বি; | ভাসমান পয়েন্ট সংযোজন। |
সাব-ফ্লোট | float a, b; ভাসমান ফলাফল = এ - বি; | ভাসমান পয়েন্ট বিয়োগ। |
মুল-ফ্লোট | float a, b; ভাসমান ফলাফল = এ * বি; | ভাসমান পয়েন্ট গুণ। |
ডিভ-ফ্লোট | float a, b; ভাসমান ফলাফল = এ / বি; | ভাসমান পয়েন্ট বিভাগ। |
রিম-ফ্লোট | float a, b; ভাসমান ফলাফল = একটি % বি; | বিভাগের পরে ভাসমান পয়েন্ট অবশিষ্ট। এই ফাংশনটি আইইইই 754 অবশিষ্টের চেয়ে পৃথক এবং result == a - roundTowardZero(a / b) * b । |
অ্যাড-ডাবল | ডবল a, b; ডাবল ফলাফল = এ + বি; | ভাসমান পয়েন্ট সংযোজন। |
সাব-ডাবল | ডবল a, b; ডাবল ফলাফল = এ - বি; | ভাসমান পয়েন্ট বিয়োগ। |
মুল-ডাবল | ডবল a, b; ডাবল ফলাফল = এ * বি; | ভাসমান পয়েন্ট গুণ। |
ডিভ-ডাবল | ডবল a, b; ডাবল ফলাফল = এ / বি; | ভাসমান পয়েন্ট বিভাগ। |
রেম-ডাবল | ডবল a, b; ডাবল ফলাফল = একটি % বি; | বিভাগের পরে ভাসমান পয়েন্ট অবশিষ্ট। এই ফাংশনটি আইইইই 754 অবশিষ্টের চেয়ে পৃথক এবং result == a - roundTowardZero(a / b) * b । |