یک '''میانای<ref>{{یادکرد فرهنگستان | مصوب=واسط، میانا | بیگانه=interface | بیگانه در فارسی= | حوزه=رایانه و فنّاوری اطلاعات، مهندسی مخابرات | دفتر=نخست | بخش=فارسی | سرواژه=واسط1}}</ref> دودویی کاربردی''' یا '''واسط دودویی کاربردی''' {{به انگلیسی|application binary interface}} در [[علوم رایانه]]، با کوتهنوشت '''ABI''' یک [[واسط (رایانش)|واسط]] است که بین دو «پودمان برنامه دودویی» وجود دارد. معمولامعمولاً یکی از این پودمان هاپودمانها یک [[کتابخانه (رایانش)|کتابخانه]] یا وسیله [[سیستمعامل]] است، و دیگری یک برنامه است که توسط یک کاربر در حال اجرا است.
یک ABI در واقع دارد نحوه دسترسی به ساختمان داده یا رویه محاسباتی را در [[کد ماشین]] تعریف می کند،میکند، که این کد ماشین یک قالب سطح پایین و وابسته به سخت افزارسختافزار است. در مقابل این دیدگاه، مفهوم [[واسط برنامهنویسی کاربردی|API]] است که این دسترسی را در [[کد منبع]] تعریف می کند،میکند، که کد منبع یک قالب نسبتانسبتاً سطح بالا، مستقل از سختافزار، و معمولامعمولاً [[فرمت خواندنی برای انسان|انسان-خواندنی]] است. یک بخش معمول از یک ABI تعریف [[قرارداد تماسگرفتن]] است، که تعیین می کندمیکند که چگونه داده به عنوان ورودی ارائه گردد، یا به عنوان خروجی، از رویه هایرویههای محاسباتی خوانده شود. [[قراردادهای فراخوانی اکس۸۶|قراردادهای تماسگیری x86]] مثالهایی در این زمینه اند.
یک مفهوم پیوسته با ABI (که می تواندمیتواند استانداردسازی شود یا نشود)، کارهای نویسنده یک [[کامپایلر]]، سیستمعامل، یا کتابخانه است. با این حال، یک برنامهنویس کاربردی موقعی که «یک برنامه را به صورت مخلوطی از چند زبان برنامهنویسی می نویسدمینویسد» یا حتی موقعی که «یک برنامه نوشته شده به یک زبان را با چند کامپالر متفات کامپایل می کندمیکند» با ABI هاABIها سروکار دارد.
== توصیف ==
ABI هاABIها شامل این جزییات هستند:
* مجموعه دستورالعمل یک پردازنده (با جزییاتی مثل ساختار فایل ثبات، سازمان پشته، انواع دسترسی به حافظه و غیره).
* اندازه، چیدمانها، و [[تراز ساختمان داده|ترازهای]] [[نوع داده|انواع داده]] اصلی که پردازه می تواندمیتواند به آنها به صورت مستقیم دسترسی یابد.
* [[قرارداد تماسگرفتن|قرارداد تماس]]، که نحوه ارسال آرگومان هایآرگومانهای [[رویه (علوم رایانه)|تابع]]، و بازیابی مقادیر بازگشتی را کنترل می کندمیکند. مثلامثلاً این موارد را کنترل می کندمیکند:
** آیا همه پارامترها باید روی پشته قرار گیرند یا بعضی از آنها در ثبات قرار گیرند
** کدام ثبات برای کدان عملکرد تابعی استفاده شود؛
** آیا اولین پارامتر تابعی قرارگرفته روی پشته، اول یا آخر روی پشته نشانده شده استشدهاست.
* یک برنامهکاربردی چگونه باید با سیستمعامل [[تماس با سامانه (رایانه)|تماس سامانهای]] بگیرد، و اگر ABI تماسهای سامانهای مستقیم را به جای تماسهای رویهای به [[شگرد تهرسید|تهرسیدهای]] تماس سامانهای تعیین نموده است،نمودهاست، باید اعداد تماس سامانهای تعیین شود.
* و در حالتی که با یک ABI سیستمعاملی کامل سروکار داریم، قالب دودویی [[آبجکت فایل]]، کتابخانه برنامه، و غیره.
== ABI هایABIهای کامل ==
یک ABI کامل، مثل [[:en:Intel_Binary_Compatibility_Standard|استاندارد سازگاری دودویی اینتل]] (iBCS)<ref>[http://www.everything2.com/index.pl?node=iBCS Intel Binary Compatibility Standard (iBCS)]</ref> این امکان را فراهم می سازدمیسازد تا یک برنامه از یک سیستمعامل که از آن ABI پشتیبانی می کند،میکند، بدون هیچ دستکاری روی هر سامانه دیگر مشابه (پشتیبانی کننده از ABI) اجرا گردد، برای این موضوع باید کتابخانه هایکتابخانههای مشترک لازم وجود داشته باشد، و پیشنیازهای مشابه برآورده گردد.
دیگر ABI هاABIها جزییاتی مثل [[دستکاری نام|دستکاری نام C++]]،<ref>{{cite web|url=https://itanium-cxx-abi.github.io/cxx-abi/|title=Itanium C++ ABI}} (compatible with multiple architectures)</ref> انتشار حالت [[رسیدگی به استثناء|استثنا]]،<ref>{{cite web|url=http://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html|title=Itanium C++ ABI: Exception Handling}} (compatible with multiple architectures)</ref> و قراداد تماسگیری بین کامپایلرها در یک بنسازه را استاندارد سازی میاستانداردسازی کند،میکند، اما نیازی به سازگاری بین بنسازهایی ندارد.
== ABI هایABIهای توکار ==
یک واسط دودویی کاربردی توکار {{به انگلیسی|embedded-application binary interface}} با کوتهنوشت EABI قراردادهای استانداردی برای [[قالب پرونده]]، انواع داده، استفاده از ثبات، سازماندهی [[پشته تماس|فریم پشته]]، و قراردادن پارامتر تابعی یک برنامه نرمافزاری توکار، برای استفاده با یک [[:en:Embedded_operating_system|سیستمعامل توکار]] را تعیین می کندمیکند.
[[کامپایلر|کامپایلرهایی]] که از EABI پشتیبانی می کنند،میکنند، [[آبجکت کد|آبجکت کدی]] می سازندمیسازند که با کد تولید شده دیگر کامپایلرهای مشابه سازگار است، این موضوع به توسعهدهنده هاتوسعهدهندهها امکان پیوند کتابخانههای ساخته شده با یک کامپایلر را با آبجکت کد تولید شده با یک کامپایلر دیگر می دهدمیدهد. توسعهدهندگانی که کد [[زبان اسمبلی]] خودشان را می نویسندمینویسند هم ممکن است بخواهند با کد اسمبلی تولید شده با کامپابلر سازگار، واسط سازی انجام دهند.
EABI هاEABIها برای بهینه سازیبهینهسازی کارایی در داخل منابع محدود یک سامانه توکار طراحی شده اند.شدهاند؛ بنابراین، EABI ها،EABIها، بیشتر انتزاع هاییانتزاعهایی که بین کد کاربر و هسته در سیستمعامل هایسیستمعاملهای پیچیده وجود دارد را حذف می کنندمیکنند. برای مثال از [[پیونددهنده پویا|پیوند پویا]] جلوگیری می شود،میشود، تا اجرایی کوچکتری ایجاد شود، و بازگذاری سریعتر شود، همچنین استفاده از ثبات هایثباتهای ثابت، به ما امکان ایجاد پشته هاپشتهها و تماس هسته ای فشرده تر را می دهد،میدهد، و اجرای برنامه کاربردی در حالت مجوزدهی شده، امکان دسترسی مستقیم به عملیاتعملیاتهای های سخت افزاریسختافزاری سفارشی بدون تغییر مسیر بواسطه تماس به یک درایور دستگاه را می دهدمیدهد.<ref name="ppc-eabi">{{cite book
| title = PowerPC Embedded Application Binary Interface: 32-Bit Implementation
| date = 1 October 1995
| edition = Version 1.0
| chapter = EABI Summary
| pages = 28–30
| publisher = Freescale Semiconductor, Inc
| url = http://www.nxp.com/files/32bit/doc/app_note/PPCEABI.pdf
}}</ref> انتخاب EABI می تواندمیتواند روی کارایی تاثیرتأثیر بگذارد.<ref>{{cite web
|title=Debian ARM accelerates via EABI port
|date=16 October 2016
}}</ref>
EABI هاییEABIهایی که امروزه زیاد استفاده می شوندمیشوند شامل: [[پاورپیسی|PowerPC]]،,<ref name="ppc-eabi"/> [[معماری آرم|Arm]] EABI<ref>{{cite web|url=https://developer.arm.com/architectures/system-architectures/software-standards/abi |title=ABI for the Arm Architecture |publisher=Developer.arm.com |access-date=4 February 2020}}</ref> و [[معماری میپس|MIPS]] EABI هستند.<ref>{{cite mailing list |url=https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html |author=Eric Christopher |title=mips eabi documentation |mailing-list=binutils@sources.redhat.com |date=11 June 2003 |access-date=19 June 2020}}</ref> پیادهپیادهسازیهای سازی های نرم افزارینرمافزاری خاص مثب کتابخانه C ممکن است محدودیت هایمحدودیتهای اضافی را تحمیل کند، و این موجب ایجاد یک ABI واقعی تر (با غیرانتزاعی تر) می شود؛میشود؛ یک مثل GNU OABI و EABI برای ARM است که هردو آنها زیرمجموعه ARM EABI هستند.<ref>{{cite web |title=ArmEabiPort |url=https://wiki.debian.org/ArmEabiPort |website=Debian Wiki |quote=Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old one.}}</ref>
== پانویس ==
{{پانویس|۲}}
== منابع ==
* {{یادکرد-ویکی|پیوند=https://en.wikipedia.org/wiki/Application_binary_interface|عنوان=Application binary interface|زبان=انگلیسی|بازیابی=9 بهمن 1399}}
{{سیستمعامل}}
|