طراحی عمومی
- مدل ماشین و قراردادهای فراخوانی تقریباً برای تقلید از معماریهای واقعی رایج و قراردادهای فراخوانی سبک C درنظر گرفته شدهاند:
- این ماشین مبتنی بر ثبت است و قابها هنگام ایجاد در اندازه ثابت هستند.
هر قاب از تعداد مشخصی ثبات (که توسط روش مشخص میشود) و همچنین هرگونه داده کمکی موردنیاز برای اجرای روش تشکیل شده است، مانند (اما نه محدود به) شمارنده برنامه و ارجاع به فایل
.dexکه حاوی روش است. - وقتی برای مقادیر بیت (مثل اعداد صحیح و اعداد ممیز شناور) استفاده میشوند، ثباتها ۳۲ بیت پهنا دارند. جفتهای ثبات مجاور برای مقادیر ۶۴ بیتی استفاده میشوند. برای جفتهای ثبات، الزامی برای تراز وجود ندارد.
- وقتی از ثباتها برای ارجاع به شیء استفاده میشود، ثباتها بهاندازه کافی بزرگ درنظر گرفته میشوند تا دقیقاً یک ارجاع را در خود جای دهند.
- ازنظر نمایش بیتی،
(Object) null == (int) 0. - متغیرهای مستقل N برای یک روش در آخرین ثباتهای N
قاب فراخوانی روش بهترتیب قرار میگیرند. متغیرهای مستقل گسترده
دو ثبات مصرف میکنند. مرجع
thisبهعنوان اولین آرگومان به روشهای نمونه ارسال میشود.
- این ماشین مبتنی بر ثبت است و قابها هنگام ایجاد در اندازه ثابت هستند.
هر قاب از تعداد مشخصی ثبات (که توسط روش مشخص میشود) و همچنین هرگونه داده کمکی موردنیاز برای اجرای روش تشکیل شده است، مانند (اما نه محدود به) شمارنده برنامه و ارجاع به فایل
- واحد ذخیرهسازی در جریان دستورالعمل یک مقدار ۱۶ بیتی بدون علامت است. برخیاز بیتها در برخیاز دستورالعملها نادیده گرفته میشوند / باید صفر باشند.
- دستورالعملها بدون دلیل به نوع خاصی محدود نمیشوند. برای مثال، دستورالعملهایی که مقادیر ثبات ۳۲ بیتی را بدون تفسیر منتقل میکنند لازم نیست مشخص کنند که آیا درحال انتقال اعداد صحیح هستند یا اعداد اعشاری.
- مجموعههای ثابت جداگانه شمارهگذاریشده و نمایهشدهای برای ارجاع به رشتهها، انواع، فیلدها، و روشها وجود دارد.
- دادههای تحتاللفظی بیتی بهصورت درونخطی در جاریسازی دستورالعمل نشان داده میشود.
- زیرا در عمل، نیاز یک روش به بیشاز ۱۶ ثبات غیرمعمول است، و ازآنجاییکه نیاز به بیشاز هشت ثبات معمولاً اتفاق میافتد، بسیاری از دستورالعملها به آدرسدهی فقط ۱۶ ثبات اول محدود میشوند. درصورت امکان معقول، دستورالعملها اجازه ارجاع به
حداکثر ۲۵۶ ثبات اول را میدهند. علاوهبراین، برخیاز دستورالعملها دارای انواع مختلفی هستند
که امکان شمارش ثبتهای بسیار بزرگتر را فراهم میکنند، ازجمله یک جفت دستورالعمل
moveکه میتوانند ثبتها را در محدودهv0–v65535آدرسدهی کنند. در مواردی که نوع دستورالعمل برای رسیدگی به ثبات موردنظر دردسترس نیست، انتظار میرود که محتوای ثبات از ثبات اصلی به ثبات پایین (قبلاز عملیات) و/یا از ثبات نتیجه پایین به ثبات بالا (بعداز عملیات) منتقل شود. - چندین «شبهدستورالعمل» وجود دارد که برای نگهداری
باردادههای متغیر طول استفاده میشود، که توسط دستورالعملهای معمولی
به آنها ارجاع داده میشود (برای مثال،
fill-array-data). چنین دستورالعملهایی هرگز نباید درطول جریان عادی اجرا مواجه شوند. علاوهبراین، دستورالعملها باید در جبرانهای بایتکد با شماره زوج (یعنی، تراز ۴ بایتی) قرار داشته باشند. برای برآورده کردن این الزام، ابزارهای تولید dex باید اگر چنین دستورالعملی درغیراینصورت ناهمتراز باشد، یک دستورالعملnopاضافی بهعنوان فاصلهگذار منتشر کنند. درنهایت، اگرچه الزامی نیست، انتظار میرود که اکثر ابزارها این دستورالعملها را در انتهای روشها صادر کنند، زیرا درغیراینصورت احتمالاً دستورالعملهای اضافی برای انشعاب در اطراف آنها لازم خواهد بود. - وقتی در سیستم درحال اجرا نصب میشود، برخیاز دستورالعملها ممکن است تغییر کنند و قالب آنها بهعنوان بهینهسازی پیونددهی ایستا در زمان نصب تغییر کند. این کار برای اجرای سریعتر پساز مشخص شدن پیوند انجام میشود. برای دیدن گونههای پیشنهادی، به سند قالبهای دستورالعمل مرتبط مراجعه کنید. کلمه «پیشنهادی» با دقت استفاده شده است؛ اجرای این موارد اجباری نیست.
- نحو انسانی و یادمانها:
- Dest-then-source ordering for arguments.
- برخیاز کدعملها دارای پسوند نام ابهامزدایی هستند تا نوع(های) عملیات را نشان دهند:
- کدهای عملیاتی ۳۲ بیتی نوع عمومی بدون علامت هستند.
- کدهای عملیاتی ۶۴ بیتی نوع-عمومی با
-wideپسوندگذاری میشوند. - کدهای عملیاتی خاص نوع با نوع آنها (یا
مخفف مستقیم) پسوندگذاری میشوند، یکی از این موارد:
-boolean-byte-char-short-int-long-float-double-object-string-class-void.
- برخیاز کدهای عملیاتی پسوند ابهامزدایی دارند تا
عملیاتهای یکسان را که چیدمانها یا گزینههای دستورالعمل متفاوتی دارند
از یکدیگر متمایز کنند. این پسوندها با یک خط مورب
(«
/») از نامهای اصلی جدا میشوند و عمدتاً برای ایجاد یک نگاشت یکبهیک با ثابتهای ایستا در کدی که فایلهای اجرایی را تولید و تفسیر میکند (یعنی برای کاهش ابهام برای انسانها) وجود دارند. - در توضیحات اینجا، عرض یک مقدار (که مثلاً نشاندهنده محدوده یک ثابت یا تعداد ثباتهایی است که احتمالاً آدرسدهی شدهاند) بااستفاده از یک نویسه برای هر چهار بیت عرض تأکید میشود.
- برای مثال، در دستورالعمل
«
move-wide/from16 vAA, vBBBB»:- «
move» کد عملیات پایه است که نشاندهنده عملیات پایه است (مقدار ثبات را جابهجا کنید). - «
wide» پسوند نام است که نشان میدهد این تابع روی دادههای پهن (۶۴ بیتی) عمل میکند. - «
from16» پسوند کد عملیات است که نشاندهنده گونهای است که مرجع ثبات ۱۶ بیتی بهعنوان منبع دارد. - «
vAA» ثبات مقصد است (که با عملیات مشخص میشود؛ بازهم قانون این است که آرگومانهای مقصد همیشه اول میآیند) که باید در محدودهv0تاv255باشد. - «
vBBBB» ثبت منبع است که باید در محدودهv0تاv65535باشد.
- «
- برای جزئیات بیشتر درباره قالبهای مختلف دستورالعمل (فهرستشده در بخش «Op & Format») و همچنین جزئیات مربوط به نحو کد عملیات، به سند قالبهای دستورالعمل مراجعه کنید.
- برای جزئیات بیشتر درباره اینکه کدبایت در تصویر بزرگتر چه جایگاهی دارد،
به سند قالب فایل
.dexمراجعه کنید.
خلاصه مجموعه بایتکد
| عملگر و قالب | یادآور / نحو | آرگومانها | شرح |
|---|---|---|---|
| ۰۰ ۱۰ برابر | nop | چرخههای زباله.
توجه:
دستورات شبهحامل داده با این کد عملیات برچسبگذاری میشوند، در این
حالت بایت مرتبه بالای واحد کد عملیات ماهیت داده را نشان میدهد. «قالب |
|
| ۰۱ ۱۲ برابر | move vA, vB | A: ثبات مقصد (۴ بیت)B: ثبات منبع (۴ بیت) |
محتوای یک ثبت غیرشیء را به ثبت دیگری منتقل کنید. |
| ۰۲ ۲۲ برابر | انتقال/از۱۶ vAA، vBBBB | A: ثبات مقصد (۸ بیت)B: ثبات منبع (۱۶ بیت) |
محتوای یک ثبت غیرشیء را به ثبت دیگری منتقل کنید. |
| ۳۲ برابر ۰۳ | انتقال/۱۶ vAAAA، vBBBB | A: ثبات مقصد (۱۶ بیت)B: ثبات منبع (۱۶ بیت) |
محتوای یک ثبت غیرشیء را به ثبت دیگری منتقل کنید. |
| ۰۴ ۱۲ برابر | انتقال-گسترده vA، vB | جفت ثبت مقصد A: (۴ بیت)جفت ثبت منبع B: (۴ بیت) |
محتویات یک جفت ثبات را به جفت ثبات دیگری منتقل میکند.
توجه:
انتقال از |
| ۲۲×۰۵ | move-wide/from16 vAA, vBBBB | جفت ثبات مقصد A: (۸ بیت)جفت ثبات منبع B: (۱۶ بیت) |
محتویات یک جفت ثبات را به جفت ثبات دیگری منتقل میکند.
توجه:
ملاحظات پیادهسازی همانند |
| ۰۶ ۳۲ برابر | move-wide/16 vAAAA, vBBBB | جفت ثبات مقصد A: (۱۶ بیت)جفت ثبات منبع B: (۱۶ بیت) |
محتویات یک جفت ثبات را به جفت ثبات دیگری منتقل میکند.
توجه:
ملاحظات پیادهسازی همانند |
| 07 12x | move-object vA, vB | ثبت مقصد A: (۴ بیت)ثبت منبع B: (۴ بیت) |
محتوای یک ثبات حاوی شیء را به ثبات دیگری منتقل کنید. |
| ۲۲×۸ | move-object/from16 vAA, vBBBB | ثبت مقصد A: (۸ بیت)ثبت منبع B: (۱۶ بیت) |
انتقال محتویات یک ثبتنام حامل شیء به ثبتنام حامل شیء دیگر. |
| 09 32x | move-object/16 vAAAA, vBBBB | A: ثبات مقصد (۱۶ بیت)B: ثبات منبع (۱۶ بیت) |
محتوای یک ثبات حاوی شیء را به ثبات دیگری منتقل کنید. |
| 0a 11x | move-result vAA | ثبات مقصد A: (۸ بیت) |
نتیجه تککلمهای غیرشیء از جدیدترین
invoke-kind را به ثبات نشاندادهشده منتقل کنید.
این کار باید بهعنوان دستورالعمل بلافاصله پساز
invoke-kind که نتیجه (تککلمهای، غیرشیء) آن
نباید نادیده گرفته شود انجام شود؛ در هر جای دیگری نامعتبر است. |
| 0b 11x | move-result-wide vAA | جفت ثبات مقصد A: (۸ بیت) |
نتیجه دوکلمهای جدیدترین
invoke-kind را به جفت ثبات نشاندادهشده منتقل کنید.
این کار باید بهعنوان دستورالعمل بلافاصله پساز
invoke-kind که نتیجه (دوبلکلمهای) آن
نباید نادیده گرفته شود انجام شود؛ در هر جای دیگری نامعتبر است. |
| 0c 11x | move-result-object vAA | ثبات مقصد A: (۸ بیت) |
نتیجه شیء جدیدترین invoke-kind را به ثبات مشخصشده منتقل میکند. این کار باید بهعنوان دستورالعمل
بلافاصله پساز invoke-kind یا
filled-new-array
که نتیجه (شیء) آن نباید نادیده گرفته شود انجام شود؛ هر جای دیگری نامعتبر است. |
| ۰ روز ۱۱ بار | انتقال-استثنا vAA | ثبات مقصد A: (۸ بیت) |
استثنای اخیراً گرفتهشده را در ثبات دادهشده ذخیره کنید. این باید اولین دستورالعمل هر مدیریتکننده استثنایی باشد که استثنای گرفتهشده آن نباید نادیده گرفته شود، و این دستورالعمل باید فقط همیشه بهعنوان اولین دستورالعمل مدیریتکننده استثنایی رخ دهد؛ در هر جای دیگری نامعتبر است. |
| ۰ در ۱۰ | برگرداندن-باطل کردن | برگشت از روش void. |
|
| ۰ از ۱۱ | return vAA | ثبات مقدار برگشتی A: (۸ بیت) |
از روش برگرداننده مقدار غیرشیئی تکعرضی (۳۲ بیتی) برمیگرداند. |
| ۱۱×۱۰ | return-wide vAA | A: جفت ثبات مقدار برگشتی (۸ بیت) |
برگشت از روش مقدار برگشتی دوبرابر پهنا (۶۴ بیتی). |
| ۱۱ ۱۱ برابر | return-object vAA | ثبات مقدار برگشتی A: (۸ بیت) |
از روشی که شیء برمیگرداند برگردید. |
| ۱۲ ۱۱n | const/4 vA, #+B | ثبت مقصد A: (۴ بیت)B: عدد صحیح علامتدار (۴ بیت) |
مقدار تحتاللفظی دادهشده (با علامت توسعهیافته به ۳۲ بیت) را به ثبات مشخصشده منتقل کنید. |
| ۱۳ ۲۱ ثانیه | const/16 vAA, #+BBBB | A: ثبات مقصد (۸ بیت)B: عدد صحیح علامتدار (۱۶ بیت) |
مقدار تحتاللفظی دادهشده (علامت گسترشیافته به ۳۲ بیت) را به ثبتکننده مشخصشده منتقل میکند. |
| ۱۴ ۳۱i | const vAA, #+BBBBBBBB | ثبت مقصد A: (۸ بیت)B: ثابت ۳۲ بیتی اختیاری |
مقدار دقیق دادهشده را به ثبات مشخصشده منتقل میکند. |
| ۱۵ ۲۱ ساعت | const/high16 vAA, #+BBBB0000 | ثبت مقصد A: (۸ بیت)B: عدد صحیح علامتدار (۱۶ بیت) |
مقدار تحتاللفظی دادهشده (که با صفر از راست تا ۳۲ بیت گسترش یافته است) را به ثبات مشخصشده منتقل میکند. |
| ۱۶ ۲۱ ثانیه | const-wide/16 vAA, #+BBBB | ثبت مقصد A: (۸ بیت)B: عدد صحیح علامتدار (۱۶ بیت) |
مقدار تحتاللفظی دادهشده (علامت گسترشیافته به ۶۴ بیت) را به جفت ثبات مشخصشده منتقل میکند. |
| 17 31i | const-wide/32 vAA, #+BBBBBBBB | ثبت مقصد A: (۸ بیت)B: عدد صحیح علامتدار (۳۲ بیت) |
مقدار تحتاللفظی دادهشده (با علامت توسعهیافته به ۶۴ بیت) را به جفت ثبات مشخصشده منتقل میکند. |
| ۱۸ ۵۱ل | const-wide vAA, #+BBBBBBBBBBBBBBBB | A: ثبات مقصد (۸ بیت)B: ثابت دلخواه با عرض دوبرابر (۶۴ بیت) |
مقدار تحتاللفظی دادهشده را به جفت ثبات مشخصشده منتقل میکند. |
| ۱۹ ساعت ۲۱ دقیقه | const-wide/high16 vAA, #+BBBB000000000000 | A: ثبات مقصد (۸ بیت)B: عدد صحیح علامتدار (۱۶ بیت) |
مقدار حرفی دادهشده (با صفر در سمت راست تا ۶۴ بیت گسترشیافته) را به جفت ثبات مشخصشده منتقل میکند. |
| 1a 21c | const-string vAA, string@BBBB | ثبت مقصد A: (۸ بیت)شاخص رشته B: |
مرجعی را به رشته مشخصشده توسط نمایه دادهشده به ثبات مشخصشده منتقل میکند. |
| 1b 31c | const-string/jumbo vAA, string@BBBBBBBB | ثبت مقصد A: (۸ بیت)شاخص رشته B: |
مرجع را به رشته مشخصشده توسط نمایه دادهشده به ثبات مشخصشده منتقل میکند. |
| 1c 21c | const-class vAA, type@BBBB | A: ثبات مقصد (۸ بیت)B: نمایه نوع |
مرجع را به کلاس مشخصشده با نمایه دادهشده به ثبات مشخصشده منتقل میکند. در مواردی که نوع نشاندادهشده اولیه است، این ارجاعی به کلاس تباهیده نوع اولیه ذخیره میکند. |
| ۱ روز ۱۱ بار | monitor-enter vAA | ثبات حامل مرجع A: (۸ بیت) |
مانیتور را برای شیء نشاندادهشده بهدست آورید. |
| 1e 11x | monitor-exit vAA | A: ثبات مرجعدار (۸ بیت) |
مانیتور را برای شیء نشاندادهشده رها کنید.
توجه:
اگر این دستورالعمل نیاز به ایجاد استثنا دارد، باید
این کار را بهگونهای انجام دهد که گویی رایانه قبلاً از دستورالعمل عبور کرده است.
شاید مفید باشد که این را بهعنوان اجرای موفقیتآمیز دستورالعمل (بهنوعی) درنظر بگیرید، و استثنا پساز دستورالعمل اما قبلاز اینکه دستورالعمل بعدی فرصت اجرا پیدا کند، پرتاب میشود. این تعریف امکان میدهد که یک روش از
یک بلوک جامع پاکسازی پایشگر (برای نمونه، |
| 1f 21c | check-cast vAA, type@BBBB | A: ثبات حامل مرجع (۸ بیت)شاخص نوع B: (۱۶ بیت) |
اگر مرجع در ثبات دادهشده نتواند به نوع نشاندادهشده تبدیل شود، ClassCastException پرتاب میشود.
توجه: ازآنجاییکه |
| ۲۰ تا ۲۲ درجه سانتیگراد | instance-of vA، vB، type@CCCC | ثبت مقصد A: (۴ بیت)ثبت حامل مرجع B: (۴ بیت)شاخص نوع C: (۱۶ بیت) |
در ثبات مقصد ارائهشده 1 ذخیره میشود
اگر مرجع نشاندادهشده نمونهای از نوع ارائهشده باشد،
یا 0 اگر نباشد.
توجه: ازآنجاییکه |
| 21 12x | آرایه-طول vA، vB | ثبت مقصد A: (۴ بیت)ثبت حامل مرجع آرایه B: (۴ بیت) |
طول آرایه نشاندادهشده را در ثبات مقصد دادهشده، در ورودیها ذخیره میکند |
| ۲۲ ۲۱c | new-instance vAA, type@BBBB | ثبت مقصد A: (۸ بیت)شاخص نوع B: |
نمونه جدیدی از نوع نشاندادهشده بسازید و مرجعی به آن در مقصد ذخیره کنید. نوع باید به کلاس غیرآرایهای ارجاع دهد. |
| ۲۳ ۲۲c | new-array vA, vB, type@CCCC | ثبت مقصد A: (۴ بیت)ثبت اندازه B:شاخص نوع C: |
آرایه جدیدی از نوع و اندازه مشخصشده میسازد. نوع باید نوع آرایه باشد. |
| ۲۴ ۳۵ | پرشده-آرایه-جدید {vC, vD, vE, vF, vG}، نوع@BBBB |
اندازه آرایه A: و تعداد کلمات آرگومان (۴ بیت)شاخص نوع B: (۱۶ بیت)ثباتهای آرگومان C..G: (هرکدام ۴ بیت)
|
آرایهای از نوع و اندازه دادهشده بسازید و آن را با محتوای
ارائهشده پر کنید. نوع باید نوع آرایه باشد. محتوای آرایه باید تککلمهای باشد (یعنی آرایهای از long یا double نباشد، اما انواع مرجع قابلقبول است). نمونه ساختهشده
بهعنوان «نتیجه» ذخیره میشود، همانطور که دستورالعملهای فراخوانی روش
نتایج خود را ذخیره میکنند، بنابراین نمونه ساختهشده باید
با دستورالعمل move-result-object بلافاصله بعدی
به ثبات منتقل شود (اگر قرار است استفاده شود). |
| ۲۵ ۳rc | filled-new-array/range {vCCCC .. vNNNN}, type@BBBB | اندازه آرایه A: و تعداد کلمات آرگومان (۸ بیت)شاخص نوع B: (۱۶ بیت)ثبات اولین آرگومان C: (۱۶ بیت)N = A + C - 1 |
آرایهای از نوع و اندازه دادهشده بسازید و آن را با
محتوای ارائهشده پر کنید. شفافسازیها و محدودیتها همانند
filled-new-array است که در بالا توضیح داده شد. |
| ۲۶ ۳۱t | fill-array-data vAA, +BBBBBBBB (با دادههای تکمیلی همانطور که در
زیر در «قالب fill-array-data-payload» مشخص شده است) |
مرجع آرایه A: (۸ بیت)آفست «انشعاب» علامتدار B: به شبهدستور دادههای جدول
(۳۲ بیت)
|
آرایه دادهشده را با دادههای نشاندادهشده پر کنید. مرجع باید به آرایهای از عناصر پایه باشد و جدول داده باید ازنظر نوع با آن مطابقت داشته باشد و نباید حاوی عناصر بیشتری از آنچه در آرایه جا میشود باشد. یعنی، آرایه ممکن است بزرگتر از جدول باشد، و اگر چنین باشد، فقط عناصر اولیه آرایه تنظیم میشوند و بقیه بدون تغییر باقی میمانند. |
| ۲۷ ۱۱برابر | پرتاب کردن vAA | A: ثبت استثنا (۸ بیت) |
استثنای نشاندادهشده را درنظر بگیرید. |
| ۲۸ ۱۰ تایی | goto +AA | آفست شاخه امضاشده A: (۸ بیت) |
بدون قیدوشرط به دستورالعمل نشاندادهشده میپرد.
توجه:
انحراف شاخه نباید |
| 29 20t | goto/16 +AAAA | A: انحراف شاخه امضاشده (۱۶ بیت) |
بدون قیدوشرط به دستورالعمل نشاندادهشده پرش کنید.
توجه:
انحراف شاخه نباید |
| 2a 30t | goto/32 +AAAAAAAA | A: انحراف شاخه امضاشده (۳۲ بیت) |
بدون قیدوشرط به دستورالعمل نشاندادهشده پرش کنید. |
| ۲ خوابه ۳۱ متری | packed-switch vAA, +BBBBBBBB (با دادههای تکمیلی طبق
مشخصات زیر در «قالب packed-switch-payload») |
برای آزمایش A: ثبت کنید B: افست «شاخه» را به شبهدستور دادههای جدول امضا کرد
(۳۲ بیت)
|
بااستفاده از جدولی از فاصلههای متناظر با هر مقدار در یک محدوده صحیح خاص، براساس مقدار موجود در ثبات دادهشده به دستورالعمل جدیدی میپرد، یا اگر هیچ تطابقی وجود نداشته باشد، به دستورالعمل بعدی میرود. |
| ۲ ثانیه ۳۱ تیک | sparse-switch vAA, +BBBBBBBB (با دادههای تکمیلی بهصورت
مشخصشده در زیر در «قالب sparse-switch-payload») |
برای آزمایش A: ثبت کنید B: افست «شاخه» را به شبهدستور دادههای جدول امضا کرد
(۳۲ بیت)
|
براساس مقدار موجود در ثبات دادهشده، بااستفاده از جدول مرتب جفتهای مقدار-آفست، به دستورالعمل جدیدی میپرد، یا اگر مطابقت وجود نداشته باشد، به دستورالعمل بعدی میرود. |
| ۲ تا ۳۱، ۲۳ بار | cmpkind vAA، vBB، vCC 2d: cmpl-float (گرایش lt) 2e: cmpg-float (گرایش gt) 2f: cmpl-double (گرایش lt) 30: cmpg-double (گرایش gt) 31: cmp-long |
ثبت مقصد A: (۸ بیت)B: ثبت یا جفت منبع اولC: ثبت یا جفت منبع دوم |
مقایسه ممیز شناور یا long نشاندادهشده را انجام دهید،
a را روی 0 تنظیم کنید اگر b == c،
1 اگر b > c،
یا -1 اگر b < c.
«انحراف» فهرستشده برای عملیات ممیز شناور
نشان میدهد که مقایسهها چگونه NaN میشوند: دستورالعملهای «انحراف بزرگتر از»
برای مقایسههای NaN، مقدار 1 را برمیگردانند،
و دستورالعملهای «انحراف کوچکتر از» مقدار -1 را برمیگردانند.
برای مثال، برای بررسی اینکه آیا نقطه شناور
|
| ۳۲..۳۷ ۲۲ت | if-test vA, vB, +CCCC 32: if-eq 33: if-ne 34: if-lt 35: if-ge 36: if-gt 37: if-le |
A: اولین ثبات برای آزمایش (۴ بیت)B: دومین ثبات برای آزمایش (۴ بیت)C: انحراف شاخه علامتدار (۱۶ بیت) |
اگر مقادیر دو ثبات دادهشده طبق مشخصات مقایسه شوند، به مقصد دادهشده منشعب میشود.
توجه:
انحراف شاخه نباید |
| 38..3d 21t | if-testz vAA, +BBBB ۳۸: if-eqz ۳۹: if-nez ۳a: if-ltz ۳b: if-gez ۳c: if-gtz ۳d: if-lez |
A: برای آزمایش ثبت کنید (۸ بیت)B: انحراف شاخه امضاشده (۱۶ بیت) |
اگر مقدار ثبات دادهشده با ۰ مقایسه شود و همانطور که مشخص شده است
شاخه به مقصد دادهشده برود.
توجه:
انحراف شاخه نباید |
| ۳ تا ۴۳ ۱۰ برابر | (استفادهنشده) | (استفادهنشده) | |
| ۴۴..۵۱ ۲۳ برابر | arrayop vAA, vBB, vCC 44: aget 45: aget-wide 46: aget-object 47: aget-boolean 48: aget-byte 49: aget-char 4a: aget-short 4b: aput 4c: aput-wide 4d: aput-object 4e: aput-boolean 4f: aput-byte 50: aput-char 51: aput-short |
ثبت یا جفت کردن مقدار A:؛ میتواند منبع یا مقصد باشد
(۸ بیت)ثبت آرایه B: (۸ بیت)ثبت شاخص C: (۸ بیت) |
عملیات آرایه شناساییشده را در نمایه شناساییشده آرایه دادهشده انجام دهید، و در ثبتکننده مقدار بارگیری یا ذخیره کنید. |
| ۵۲..۵f 22c | iinstanceop vA, vB, field@CCCC 52: iget 53: iget-wide 54: iget-object 55: iget-boolean 56: iget-byte 57: iget-char 58: iget-short 59: iput 5a: iput-wide 5b: iput-object 5c: iput-boolean 5d: iput-byte 5e: iput-char 5f: iput-short |
ثبت یا جفت مقدار A:؛ میتواند منبع یا مقصد باشد
(۴ بیت)ثبت شیء B: (۴ بیت)شاخص مرجع فیلد نمونه C: (۱۶ بیت) |
عملیات فیلد نمونه شیء شناساییشده را با
فیلد شناساییشده انجام دهید و در ثبات مقدار بارگیری یا ذخیره کنید.
توجه: این کدعملها نامزدهای مناسبی برای پیونددهی ایستا هستند، با تغییر آرگومان فیلد به یک افست مستقیمتر. |
| 60..6d 21c | sstaticop vAA, field@BBBB ۶۰: sget ۶۱: sget-wide ۶۲: sget-object ۶۳: sget-boolean ۶۴: sget-byte ۶۵: sget-char ۶۶: sget-short ۶۷: sput ۶۸: sput-wide ۶۹: sput-object ۶a: sput-boolean ۶b: sput-byte ۶c: sput-char ۶d: sput-short |
A: ثبت یا جفت کردن مقدار؛ ممکن است منبع یا مقصد باشد
(۸ بیت)B: نمایه مرجع فیلد ایستا (۱۶ بیت) |
عملیات فیلد ایستا شیء شناساییشده را با فیلد
ایستای شناساییشده انجام دهید و آن را در ثبات مقدار بار کنید یا ذخیره کنید.
توجه: این کدعملها نامزدهای مناسبی برای پیونددهی ایستا هستند، با تغییر آرگومان فیلد به یک افست مستقیمتر. |
| 6e..72 35c | invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB 6e: invoke-virtual 6f: invoke-super 70: invoke-direct 71: invoke-static 72: invoke-interface |
تعداد کلمات A: آرگومان (۴ بیت)شاخص مرجع روش B: (۱۶ بیت)ثباتهای آرگومان C..G: (هرکدام ۴ بیت)
|
روش نشاندادهشده را فراخوانی کنید. نتیجه (درصورت وجود) ممکن است
با یک گونه مناسب move-result* بهعنوان دستورالعمل
بلافاصله بعدی ذخیره شود.
از وقتی در فایلهای Dex نسخه از از از توجه: این کدعملها نامزدهای معقولی برای پیونددهی ایستا هستند، با تغییر آرگومان روش به یک افست مستقیمتر (یا جفت آن). |
| 73 10x | (استفادهنشده) | (استفادهنشده) | |
| ۷۴..۷۸ ۳rc | فراخوانی-نوع/محدوده {vCCCC .. vNNNN}, meth@BBBB ۷۴: فراخوانی-مجازی/محدوده ۷۵: فراخوانی-فوق/محدوده ۷۶: فراخوانی-مستقیم/محدوده ۷۷: فراخوانی-ایستا/محدوده ۷۸: فراخوانی-میانای/محدوده |
تعداد کلمات آرگومان A: (۸ بیت)شاخص مرجع روش B: (۱۶ بیت)ثبتکننده اولین آرگومان C: (۱۶ بیت)N = A + C - 1 |
روش نشاندادهشده را فراخوانی کنید. برای جزئیات، هشدارها، و پیشنهادها،
اولین invoke-kind شرح بالا را ببینید.
|
| 79..7a 10x | (استفادهنشده) | (استفادهنشده) | |
| ۷ تا ۸ فرنگی ۱۲ بار | unop vA, vB 7b: neg-int 7c: not-int 7d: neg-long 7e: not-long 7f: neg-float 80: neg-double 81: int-to-long 82: int-to-float 83: int-to-double 84: long-to-int 85: long-to-float 86: long-to-double 87: float-to-int 88: float-to-long 89: float-to-double 8a: double-to-int 8b: double-to-long 8c: double-to-float 8d: int-to-byte 8e: int-to-char 8f: int-to-short |
ثبت یا جفت مقصد A: (۴ بیت)ثبت یا جفت منبع B: (۴ بیت) |
عملیات یکتایی مشخصشده را روی ثبات منبع انجام دهید، و نتیجه را در ثبات مقصد ذخیره کنید. |
| ۹۰..اف ۲۳ برابر | binop vAA, vBB, vCC ۹۰: add-int ۹۱: sub-int ۹۲: mul-int ۹۳: div-int ۹۴: rem-int ۹۵: and-int ۹۶: or-int ۹۷: xor-int ۹۸: shl-int ۹۹: shr-int ۹a: ushr-int ۹b: add-long ۹c: sub-long ۹d: mul-long ۹e: div-long ۹f: rem-long a0: and-long a1: or-long a2: xor-long a3: shl-long a4: shr-long a5: ushr-long a6: add-float a7: sub-float a8: mul-float a9: div-float aa: rem-float ab: add-double ac: sub-double ad: mul-double ae: div-double af: rem-double |
ثبت یا جفتسازی مقصد A: (۸ بیت)ثبت یا جفتسازی منبع اول B: (۸ بیت)ثبت یا جفتسازی منبع دوم C: (۸ بیت) |
عملکرد عملیات دودویی شناساییشده روی دو ثبات منبع،
ذخیره نتیجه در ثبات مقصد.
توجه:
برخلاف دیگر عملیاتهای ریاضی |
| 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 be: 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: sub-double/2addr cd: mul-double/2addr ce: div-double/2addr cf: rem-double/2addr |
ثبت یا جفت کردن مقصد A: و منبع اول
(۴ بیت)ثبت یا جفت کردن منبع دوم B: (۴ بیت) |
عملیات دودویی شناساییشده را روی دو ثبات منبع انجام دهید،
نتیجه را در اولین ثبات منبع ذخیره کنید.
توجه:
برخلاف دیگر |
| d0..d7 22s | binop/lit16 vA, vB, #+CCCC d0: add-int/lit16 d1: rsub-int (reverse subtract) 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: ثبات مقصد (۴ بیت)B: ثبات منبع (۴ بیت)C: ثابت عدد صحیح علامتدار (۱۶ بیت) |
عملیات دودویی نشاندادهشده را روی ثبات نشاندادهشده (آرگومان اول) و مقدار دقیق (آرگومان دوم) انجام میدهد و نتیجه را در ثبات مقصد ذخیره میکند.
توجه:
|
| 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: ثبات مقصد (۸ بیت)B: ثبات منبع (۸ بیت)C: ثابت عدد صحیح علامتدار (۸ بیت) |
عملگر دودویی نشاندادهشده را روی ثبات نشاندادهشده (اولین
آرگومان) و مقدار ثابت (دومین آرگومان) اجرا کنید و نتیجه را
در ثبات مقصد ذخیره کنید.
توجه: برای جزئیات بیشتر درباره معناشناسی
|
| e3..f9 10x | (استفادهنشده) | (استفادهنشده) | |
| fa 45cc | invoke-polymorphic {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH |
تعداد کلمات آرگومان A: (۴ بیت) شاخص مرجع روش B: (۱۶ بیت) گیرنده C: (۴ بیت) ثباتهای آرگومان D..G: (هرکدام ۴ بیت) شاخص مرجع پیشنمونه H: (۱۶ بیت)
|
روش چندریختی امضای نشاندادهشده را فراخوانی کنید. نتیجه (درصورت وجود) ممکن است
با یک گونه مناسب move-result* بهعنوان دستورالعمل
بلافاصله بعدی ذخیره شود.مرجع روش باید به روش چندریختی امضا، مانند java.lang.invoke.MethodHandle.invoke یا
java.lang.invoke.MethodHandle.invokeExact باشد.گیرنده باید شیئی باشد که از روش چندریختی امضای فراخواندهشده پشتیبانی کند. مرجع پیشنمونه انواع آرگومانهای ارائهشده و نوع برگشتی موردانتظار را توصیف میکند. وقتی invoke-polymorphic بایتکد اجرا میشود، ممکن است استثناهایی ایجاد کند. استثناها در مستندات API
برای روش چندریختی امضای فراخواندهشده شرح داده شده است.در فایلهای Dex از نسخه 038 به بعد وجود دارد.
|
| fb 4rcc | invoke-polymorphic/range {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH |
تعداد کلمات آرگومان A: (۸ بیت) شاخص مرجع روش B: (۱۶ بیت) گیرنده C: (۱۶ بیت) شاخص مرجع پیشنمونه H: (۱۶ بیت) N = A + C - 1
|
دستگیره روش نشاندادهشده را فراخوانی کنید. برای جزئیات،invoke-polymorphic
توضیحات بالا را ببینید.از نسخه 038 به بعد در فایلهای Dex وجود دارد.
|
| fc 35c | invoke-custom {vC, vD, vE, vF, vG}, call_site@BBBB |
تعداد کلمات آرگومان A: (۴ بیت) B: شاخص مرجع سایت تماس (۱۶ بیت) ثبتکنندههای آرگومان C..G: (هرکدام ۴ بیت)
|
سایت تماس نشاندادهشده را حلوفصل و فراخوانی میکند.
نتیجه فراخوانی (درصورت وجود) ممکن است با یک
گونه move-result* مناسب بهعنوان دستورالعمل
بلافاصله بعدی ذخیره شود.این دستورالعمل در دو مرحله اجرا میشود: وضوح سایت تماس و فراخوانی سایت تماس. بررسی وضوح سایت تماس بررسی میکند که آیا سایت تماس نشاندادهشده نمونه java.lang.invoke.CallSite مرتبطی دارد یا نه.
درغیراینصورت، روش پیونددهنده راهاندازی برای سایت تماس نشاندادهشده بااستفاده از آرگومانهای موجود در فایل DEX فراخوانی میشود (به call_site_item مراجعه کنید). روش پیونددهنده راهانداز
نمونه java.lang.invoke.CallSite را برمیگرداند که سپس
با سایت تماس نشاندادهشده مرتبط میشود، اگر ارتباطی
وجود نداشته باشد. رشته دیگری ممکن است قبلاً این ارتباط را برقرار کرده باشد،
و در این صورت اجرای دستورالعمل با
اولین نمونه java.lang.invoke.CallSite مرتبط ادامه مییابد.فراخوانی سایت تماس در java.lang.invoke.MethodHandle هدف نمونه
java.lang.invoke.CallSite حلوفصلشده انجام میشود. هدف بهصورت
اجرای invoke-polymorphic (توضیح دادهشده در بالا) بااستفاده از
دستگیره روش و آرگومانهای دستورالعمل invoke-custom
بهعنوان آرگومانهای فراخوانی دستگیره روش دقیق فراخوانی میشود.استثناهای مطرحشده توسط روش پیونددهنده راهانداز در java.lang.BootstrapMethodError قرار میگیرند. در شرایط زیر نیز
BootstrapMethodError مطرح میشود:
038 به بعد در فایلهای Dex وجود دارد.
|
| fd 3rc | invoke-custom/range {vCCCC .. vNNNN}, call_site@BBBB |
تعداد کلمات آرگومان A: (۸ بیت) شاخص مرجع سایت تماس B: (۱۶ بیت) ثبت آرگومان اول C: (۱۶ بیت) N = A + C - 1
|
سایت تماس را حلوفصل و فراخوانی کنید. برای جزئیات،invoke-custom
توضیحات بالا را ببینید.در فایلهای Dex از نسخه 038 به بعد وجود دارد.
|
| fe 21c | const-method-handle vAA, method_handle@BBBB | A: ثبات مقصد (۸ بیت)B: نمایه دسته روش (۱۶ بیت) |
مرجع را به دستگیره روش مشخصشده توسط نمایه دادهشده به
ثبات مشخصشده منتقل کنید. از نسخه 039 به بعد در فایلهای Dex وجود دارد.
|
| ff 21c | const-method-type vAA, proto@BBBB | ثبت مقصد A: (۸ بیت)مرجع پیشنمونه روش B: (۱۶ بیت) |
مرجع را به نمونه اولیه روش مشخصشده با نمایه دادهشده به
ثبات مشخصشده منتقل میکند. از نسخه 039 به بعد در فایلهای Dex وجود دارد.
|
قالب packed-switch-payload
| نام | قالب | شرح |
|---|---|---|
| ident | ushort = 0x0100 | درحال شناسایی شبهکد عملیاتی |
| اندازه | ushort | تعداد ورودیها در جدول |
| کلید اول | قطع توپ | اولین (و پایینترین) مقدار مورد تعویض |
| هدفها | int[] | فهرست size هدف انشعاب نسبی. هدفها
نسبتبه نشانی کد عملیات سوئیچ هستند، نه این جدول.
|
توجه: تعداد کل واحدهای کد برای نمونهای از این جدول (size * 2) + 4 است.
قالب sparse-switch-payload
| نام | قالب | شرح |
|---|---|---|
| ident | ushort = 0x0200 | درحال شناسایی شبهکد عملیاتی |
| اندازه | ushort | تعداد ورودیها در جدول |
| کلیدها | int[] | فهرست مقادیر کلیدی size، مرتبشده از کم به زیاد |
| هدفها | int[] | فهرست size هدف شاخه نسبی که هریک با مقدار کلید در همان شاخص مطابقت دارد. هدفها
نسبتبه نشانی کد عملیات سوئیچ هستند، نه این جدول.
|
توجه: تعداد کل واحدهای کد برای نمونهای از این
جدول (size * 4) + 2 است.
قالب fill-array-data-payload
| نام | قالب | شرح |
|---|---|---|
| ident | ushort = 0x0300 | درحال شناسایی شبهکد عملیاتی |
| element_width | ushort | تعداد بایتها در هر عنصر |
| اندازه | uint | تعداد عناصر در جدول |
| داده | ubyte[] | مقادیر داده |
توجه: تعداد کل واحدهای کد برای نمونهای از این جدول (size * element_width + 1) / 2 + 4 است.
جزئیات عملیات ریاضی
توجه: عملیات ممیز شناور باید از قوانین IEEE 754 پیروی کند و از گرد کردن به نزدیکترین عدد و سرریز تدریجی استفاده کند، مگر در مواردی که خلاف آن ذکر شده باشد.
| کد عملیات | معناشناسی C | یادداشتها |
|---|---|---|
| عدد صحیح منفی | int32 a; int32 result = -a; |
مکمل دوتایی یکتایی. |
| not-int | int32 a; int32 result = ~a; |
مکمل یکتایی. |
| منفی-طولانی | int64 a; int64 result = -a; |
مکمل دو یگانی. |
| کوتاه | int64 a; int64 result = ~a; |
مکمل یکتایی. |
| neg-float | float a; float result = -a; |
نفی نقطه شناور. |
| منفی-دوبرابر | double a; double result = -a; |
نفی نقطه شناور. |
| int-to-long | int32 a; int64 result = (int64) a; |
تمدید int32 تا int64 را امضا کنید. |
| عدد صحیح به شناور | int32 a; float result = (float) a; |
تبدیل int32 به float، بااستفاده از
گرد کردن به نزدیکترین عدد. این کار باعث ازدست رفتن دقت برای برخیاز مقادیر میشود.
|
| int-to-double | int32 a; double result = (double) a; |
تبدیل int32 به double. |
| long-to-int | int64 a; int32 result = (int32) a; |
int64 به int32 کوتاه شد. |
| long-to-float | int64 a; float result = (float) a; |
تبدیل int64 به float، بااستفاده از
گرد کردن به نزدیکترین عدد. این کار باعث ازدست رفتن دقت برای برخیاز مقادیر میشود.
|
| طولانی به دوبرابر | int64 a; double result = (double) a; |
تبدیل int64 به double، بااستفاده از
گرد کردن به نزدیکترین عدد. این کار باعث ازدست رفتن دقت برای برخیاز مقادیر میشود.
|
| float-to-int | float a; int32 result = (int32) a; |
تبدیل float به int32، بااستفاده از
گرد کردن بهسمت صفر. NaN و -0.0 (صفر منفی)
به عدد صحیح 0 تبدیل میشوند. بینهایتها و مقادیر با
بزرگی بیشازحد برای نمایش، بسته به علامت، به
0x7fffffff یا -0x80000000 تبدیل میشوند.
|
| شناور به طولانی | float a; int64 result = (int64) a; |
تبدیل float به int64، بااستفاده از
گرد کردن بهسمت صفر. قوانین مورد خاص مشابه با
float-to-int در اینجا اعمال میشود، با این تفاوت که مقادیر خارج از محدوده
بسته به علامت به 0x7fffffffffffffff یا
-0x8000000000000000 تبدیل میشوند.
|
| تبدیل شناور به دوبرابر | float a; double result = (double) a; |
تبدیل float به double، با حفظ دقیق مقدار.
|
| double-to-int | double a; int32 result = (int32) a; |
تبدیل double به int32، بااستفاده از
گرد کردن بهسمت صفر. همان قوانین مورد خاص برای
float-to-int در اینجا اعمال میشود.
|
| کوچک به بزرگ | double a; int64 result = (int64) a; |
تبدیل double به int64، بااستفاده از
گرد کردن بهسمت صفر. همان قوانین موارد خاص مربوط به
float-to-long در اینجا اعمال میشود.
|
| تبدیل از دوبرابر به شناور | double a; float result = (float) a; |
تبدیل double به float، بااستفاده از
گرد کردن به نزدیکترین عدد. این کار باعث میشود دقت برخیاز مقادیر ازبین برود.
|
| int-to-byte | int32 a; int32 result = (a << 24) >> 24; |
کوتهسازی int32 به int8، علامت
گسترش نتیجه.
|
| عدد به نویسه | int32 a; int32 result = a & 0xffff; |
کوتاه کردن int32 به uint16، بدون
افزونه علامت.
|
| عدد صحیح به کوتاه | int32 a; int32 result = (a << 16) >> 16; |
کوتهسازی int32 به int16، علامت
گسترش نتیجه.
|
| افزودن-عدد صحیح | int32 a, b; int32 result = a + b; |
افزودن مکمل دو. |
| زیرمجموعه | int32 a, b; int32 result = a - b; |
تفریق مکمل دو. |
| rsub-int | int32 a, b; int32 result = b - a; |
تفریق معکوس مکمل دو. |
| mul-int | int32 a, b; int32 result = a * b; |
ضرب مکمل دو. |
| div-int | int32 a, b; int32 result = a / b; |
تقسیم مکمل دو، گردشده بهسمت صفر (یعنی، کوتاه شده به
عدد صحیح). اگر b == 0، این کار ArithmeticException را پرتاب میکند.
|
| rem-int | int32 a, b; int32 result = a % b; |
باقیمانده مکمل دو پساز تقسیم. علامت نتیجه
همان علامت a است و دقیقتر
بهصورت result == a - (a / b) * b تعریف میشود. اگر b == 0 باشد، این تابع
ArithmeticException را برمیگرداند.
|
| و-صحیح | int32 a, b; int32 result = a & b; |
«و» بیتی. |
| or-int | int32 a, b; int32 result = a | b; |
«یا» بیتی. |
| xor-int | int32 a, b; int32 result = a ^ b; |
«یا انحصاری» بیتی. |
| shl-int | int32 a, b; int32 result = a << (b & 0x1f); |
جابهجایی بیتی به چپ (با شناسه ماسکشده). |
| shr-int | int32 a, b; int32 result = a >> (b & 0x1f); |
انتقال به راست علامتدار بیتی (با آرگومان پوشاندهشده). |
| ushr-int | uint32 a, b; int32 result = a >> (b & 0x1f); |
انتقال بدون علامت بیتی به راست (با آرگومان پوشاندهشده). |
| افزودن-طولانی | int64 a, b; int64 result = a + b; |
افزودن مکمل دو. |
| زیربلند | int64 a, b; int64 result = a - b; |
تفریق مکمل دو. |
| mul-long | int64 a, b; int64 result = a * b; |
ضرب مکمل دو. |
| div-long | int64 a, b; int64 result = a / b; |
تقسیم مکمل دو، گردشده بهسمت صفر (یعنی، به عدد صحیح
کوچک میشود). اگر b == 0 باشد، این ArithmeticException را برمیگرداند.
|
| rem-long | int64 a, b; int64 result = a % b; |
باقیمانده مکمل دو پساز تقسیم. علامت نتیجه
همان علامت a است و دقیقتر
بهصورت result == a - (a / b) * b تعریف میشود. اگر b == 0 باشد، این تابع
ArithmeticException را برمیگرداند.
|
| و طولانی | int64 a, b; int64 result = a & b; |
«و» بیتی. |
| یا طولانی | int64 a, b; int64 result = a | b; |
«یا» بیتی. |
| xor-long | int64 a, b; int64 result = a ^ b; |
XOR بیتی. |
| shl-long | int64 a; int32 b; int64 result = a << (b & 0x3f); |
جابهجایی بیتی به چپ (با آرگومان ماسکشده). |
| shr-long | int64 a; int32 b; int64 result = a >> (b & 0x3f); |
انتقال به راست علامتدار بیتی (با آرگومان پوشاندهشده). |
| ushr-long | uint64 a; int32 b; int64 result = a >> (b & 0x3f); |
انتقال بدون علامت بیتی به راست (با آرگومان پوشاندهشده). |
| add-float | float a, b; float result = a + b; |
افزودن نقطه شناور. |
| زیرشناور | float a, b; float result = a - b; |
تفریق نقطه شناور. |
| mul-float | float a, b; float result = a * b; |
ضرب نقطه شناور. |
| div-float | float a, b; float result = a / b; |
تقسیم نقطه شناور. |
| rem-float | float a, b; float result = a % b; |
باقیمانده ممیز شناور پساز تقسیم. این تابع با
باقیمانده IEEE 754 متفاوت است و بهصورت
result == a - roundTowardZero(a / b) * b تعریف میشود.
|
| افزودن-دوبرابر | double a, b; double result = a + b; |
جمع نقطه شناور. |
| تختخواب دونفره کوچک | double a, b; double result = a - b; |
تفریق نقطه شناور. |
| mul-double | double a, b; double result = a * b; |
ضرب نقطه شناور. |
| div-double | double a, b; double result = a / b; |
تقسیم نقطه شناور. |
| rem-double | double a, b; double result = a % b; |
باقیمانده نقطه شناور پساز تقسیم. این تابع با باقیمانده IEEE 754 متفاوت است و بهصورت result == a - roundTowardZero(a / b) * b تعریف میشود.
|