Tôi nghĩ những gì bạn đang thực sự hỏi là calling convention, mô tả cách các chương trình con trong một chương trình truyền thông tin cho nhau và cách hệ điều hành chuyển thông tin đến chương trình. . Ví dụ, cdecl calling convention on the x86, được sử dụng bởi hầu hết các trình biên dịch C, nói rằng khi một hàm trả về, giá trị trả về đi vào thanh ghi eax. Vì vậy, nếu bạn có chức năng int foo()
, bạn biết rằng sau khi foo
thực thi mã vạch ret
của mình, eax sẽ chứa mã đó foo
được trả về.
Ngược lại, bộ xử lý PowerPC (thường) có (ít nhất) 32 thanh ghi, đơn giản là r0, r1, ... r31. The AIX calling convention cho chip này nói rằng con trỏ ngăn xếp đi vào r1, các tham số chức năng đó được truyền từ r3 đến r11, mà các giá trị trả về sẽ quay lại trên r3, v.v.
Điều quan trọng cần nhớ là quy ước gọi là loại thỏa thuận giữa các chức năng trong chương trình hoặc giữa các thư viện. Nó không phải là một phần của phần cứng, hoặc một luật, và thường có nhiều quy ước gọi điện khác nhau có thể được sử dụng trên một nền tảng. Đây là lý do tại sao đôi khi bạn sẽ thấy mã như
struct CFoo { void __stdcall method(); };
Đó là một chỉ dẫn để MSVC, mà thường thích sử dụng quy ước fastcall, nói cho nó để sử dụng một quy ước khác nhau cho rằng một trong những chức năng. Điều này quan trọng nếu ví dụ: chức năng được xác định trong thư viện được xây dựng bởi một số trình biên dịch khác sử dụng stdcall thay thế.
Khi chúng ta nói về cách hệ điều hành chuyển thông tin đến một chương trình (hoặc phần cứng đến hệ điều hành), chúng ta thường gọi nó là ABI thay vì quy ước gọi điện. Vì vậy, trong trường hợp của chương trình của bạn, nó đã được viết giả định rằng hệ điều hành sẽ vượt qua nó một số thông tin cụ thể về eax. Giả thiết đó sẽ đặc biệt đối với hệ điều hành, trình biên dịch và thậm chí cả chương trình riêng lẻ.
Không phải 'is', nhưng' là'. – leppie
Nếu bạn cung cấp một số thông tin về nền tảng của mình (OS, định dạng có thể thực thi được), tôi chắc chắn ai đó có thể cho bạn biết những gì 'eax' được đặt ở điểm vào chương trình. – Edmund
Đã chỉnh sửa, cảm ơn bạn đã đề xuất. –