Trong phần mềm máy tính, giao diện nhị phân ứng dụng (ABI) là giao diện giữa hai mô-đun chương trình nhị phân (hai mô-đun đã được biên dịch thành file thực thi chứa mã máy); thông thường, một trong các mô-đun này là một thư viện hoặc cơ sở hệ điều hành hoặc là một chương trình đang được chạy bởi người dùng.
ABI định rõ cách cấu trúc dữ liệu hoặc các quy trình tính toán được ghi trong mã máy, định dạng này ở mức độ thấp, phụ thuộc phần cứng; ngược lại, API định nghĩa truy cập này trong mã nguồn, là định dạng tương đối cao, độc lập với phần cứng, thường dễ đọc với con người. Một khía cạnh phổ biến của ABI là quy ước gọi, xác định cách dữ liệu được cung cấp làm đầu vào hoặc đầu ra từ các quy trình tính toán; ví dụ là các quy ước gọi x86.
Tuân thủ ABI (có thể hoặc không thể được chuẩn hóa chính thức) thường là công việc của trình biên dịch, hệ điều hành hoặc tác giả thư viện; tuy nhiên, một lập trình viên ứng dụng có thể phải thao tác trực tiếp với ABI khi viết chương trình bằng nhiều ngôn ngữ lập trình, có thể đạt được bằng cách sử dụng các lệnh gọi hàm bên ngoài.
ABI bao gồm các chi tiết như:
Một ABI hoàn chỉnh, như Tiêu chuẩn tương thích nhị phân Intel (iBCS),[1] cho phép một chương trình từ một hệ điều hành hỗ trợ ABI chạy mà không cần sửa đổi trên bất kỳ hệ thống nào khác, miễn là có các thư viện chia sẻ cần thiết hoàn thành.[cái gì?] ] Các ABI chuẩn hóa các chi tiết như xáo trộn tên C ++, lan truyền ngoại lệ [2],[3] và quy ước gọi giữa các trình biên dịch trên cùng một nền tảng, nhưng không yêu cầu tương thích đa nền tảng.
Giao diện nhị phân ứng dụng nhúng (EABI) chỉ định các quy ước chuẩn cho định dạng tệp, kiểu dữ liệu, sử dụng thanh ghi, tổ chức khung ngăn xếp và tham số chức năng của chương trình phần mềm nhúng, để sử dụng với hệ điều hành nhúng.
Trình biên dịch hỗ trợ EABI tạo mã đối tượng tương thích với mã do các trình biên dịch khác tạo ra, cho phép các nhà phát triển liên kết các thư viện được tạo bằng một trình biên dịch với mã đối tượng được tạo bằng trình biên dịch khác. Các nhà phát triển viết mã hợp ngữ của riêng họ cũng có thể giao tiếp với mã hợp ngữ được tạo bởi trình biên dịch tuân thủ.
EABIs được thiết kế để tối ưu hóa hiệu suất trong phạm vi tài nguyên giới hạn của hệ thống nhúng. Do đó, EABIs bỏ qua hầu hết các trừu tượng được tạo ra giữa kernel và mã người dùng trong các hệ điều hành phức tạp. Ví dụ, liên kết động được tránh để cho phép thực thi nhỏ hơn và tải nhanh hơn, sử dụng thanh ghi cố định cho phép các ngăn xếp và cuộc gọi hạt nhân nhỏ gọn hơn và chạy ứng dụng ở chế độ đặc quyền cho phép truy cập trực tiếp vào hoạt động phần cứng tùy chỉnh mà không cần gọi trình điều khiển thiết bị.[4] Sự lựa chọn của EABI có thể ảnh hưởng đến hiệu suất.[5][6]
Các EABI được sử dụng rộng rãi bao gồm PowerPC,[4] ARM EABI2 [7] và MIPS EABI.[8]