Friday, December 6, 2024

Understanding Calling Conventions (sinhala)

 

Understanding Calling Conventions: The Four Main Ones and Others.
-
පරිගණක ක්‍රමලේඛනයේදී, විශේෂයෙන්ම පහළ මට්ටමේ පද්ධති ක්‍රමලේඛනයේදී, ඇමතුම් සම්මුතියක්(Calling Conventions) මඟින් ශ්‍රිතවල තර්ක සම්මත වන ආකාරය, return අගය ලබා දෙන ආකාරය සහ stack පිරිසිදු කිරීමට වගකිව යුත්තේ කවුරුන්ද යන්න නිර්වචනය කරයි. භාවිතා කරන ඇමතුම් සම්මුතිය, මෘදුකාංගයේ ක්‍රියාකාරිත්වය සහ අන්තර් ක්‍රියාකාරීත්වය කෙරෙහි සැලකිය යුතු බලපෑමක් ඇති කළ හැකිය, විශේෂයෙන් විවිධ සම්පාදක, ගෘහ නිර්මාණ හෝ මෙහෙයුම් පද්ධති හරහා වැඩ කරන විට.

-

මෙම ලිපියෙන්, අපි බහුලව භාවිතා වන ප්‍රධාන ඇමතුම් සම්මුතීන් හතර ආවරණය කරන්නෙමු, එක් එක් ක්‍රියා කරන ආකාරය පැහැදිලි කිරීම, සහ විවිධ පරිසරවල භාවිතා වන අනෙකුත් කැපී පෙනෙන ඇමතුම් සම්මුතීන් ලැයිස්තුවක් සපයන්නෙමු.
-
ප්‍රධාන ඇමතුම් සම්මුතීන් හතර
-

1. CDECL (C Declaration) CDECL
සම්මුතිය යනු බොහෝ
C වැඩසටහන් සඳහා, විශේෂයෙන්ම x86 ගෘහ නිර්මාණ ශිල්පය සඳහා පෙරනිමි ඇමතුම් සම්මුතියයි. එය වඩාත් නම්‍යශීලී සහ බහුලව භාවිතා වන සම්මුතියයි, විශේෂයෙන්ම C වැඩසටහන් වල.

-

එය ක්රියා කරන ආකාරය:
-
Argument Passing
: තර්ක වමේ සිට දකුණට තොගය මතට තල්ලු කරනු ලැබේ. අන්තිම තර්කය පළමුව තල්ලු කරනු ලැබේ, පළමු තර්කය අන්තිමට තල්ලු කරනු ලැබේ.
-
Stack Cleanup: ක්‍රියාකාරී ඇමතුමෙන් පසු stack පිරිසිදු කිරීම සඳහා අමතන්නා වගකිව යුතුය. මෙයින් අදහස් කරන්නේ ශ්‍රිතය ක්‍රියාත්මක වීම අවසන් වූ පසු, ඇමතුම්කරු විසින් විස්තාරක ප්‍රමාණය අනුව ස්ටැක් පොයින්ටරය සීරුමාරු කරන බවයි.
-
Return Value: return අගය EAX ලේඛනයේ තබා ඇත (x86 මත).

-
Example:
int add(int a, int b) {
    return a + b;
}

In assembly:

asm
push b  ; Push arguments to stack
push a
call add
add esp, 8  ; Caller cleans up the stack (8 bytes for two integer arguments)
-
2. stdcall (Standard Call)
stdcall ඇමතුම් සම්මුතිය සාමාන්‍යයෙන් Windows API ක්‍රියාකාරකම් වල භාවිතා වේ. CDECL හි ඇති ප්‍රධාන වෙනස නම්, stdcall හි, ඇමතුම් ක්‍රියාකාරී ඇමතුමෙන් පසු ඇමතුම් අට්ටිය පිරිසිදු කිරීමයි.
-
එය ක්රියා කරන ආකාරය:
-
Argument Passing: CDECL හි මෙන් තර්ක වමේ සිට දකුණට stack මතට තල්ලු කරනු ලැබේ.
-
stack පිරිසිදු කිරීම: stack පිරිසිදු කිරීම සඳහා අමතන්නා වගකිව යුතුය. ශ්‍රිතය ක්‍රියාත්මක වූ පසු, ඇමතුම්කරු තර්ක ඉවත් කිරීමට ස්ටැක් පොයින්ටරය සීරුමාරු කරයි.
-
Return අගය: ප්‍රතිලාභ අගය EAX ලේඛනයේ (x86) තබා ඇත.
-
Example:
int subtract(int a, int b) {
    return a - b;
}

In assembly:

asm
push b  ; Push arguments to stack
push a
call subtract
; No need to adjust the stack here since the callee does it.
-
3. fastcall
වේගවත් ඇමතුම් සම්මුතිය stack මත නොව ලේඛනවල පළමු තර්ක කිහිපය සම්මත කිරීමෙන් වේගය සඳහා ප්‍රශස්ත කර ඇත. මෙය තෙරපුම් සහ pop තර්ක හා සම්බන්ධ පොදු කාර්ය අඩු කරයි.
-
එය ක්රියා කරන ආකාරය:
-
Argument Passing: පළමු arguments කිහිපය (සාමාන්‍යයෙන් පළමු දෙක හෝ තුන) ලේඛනවල සම්මත වේ (x86 මත, මේවා සාමාන්‍යයෙන් ECX සහ EDX වේ). තවත් තර්ක තිබේ නම්, ඒවා ස්ටැක් මත සම්මත වේ.
-
stack පිරිසිදු කිරීම: stack පිරිසිදු කිරීම සඳහා අමතන්නා වගකිව යුතුය.
-
Return අගය: return අගය EAX ලේඛනයේ (x86) තබා ඇත.
-
Example:
int multiply(int a, int b, int c) {
    return a * b * c;
}

In assembly:

asm
mov ecx, a  ; First argument in ECX
mov edx, b  ; Second argument in EDX
push c      ; Third argument is passed on the stack
call multiply
add esp, 4  ; Caller cleans the stack (1 argument popped)
-
4. thiscall
මෙම ඇමතුම් සම්මුතිය C++ සාමාජික කාර්යයන් සඳහා භාවිතා වේ. C++ හි සාමාජික ශ්‍රිතවලට implicit this pointer ඇති බැවින්, මෙම ඇමතුම් සම්මුතිය සැලසුම් කර ඇත්තේ එම pointer එක කාර්යක්ෂමව සම්මත කිරීමටය.
-
එය ක්රියා කරන ආකාරය:
-
තර්කය සම්මත කිරීම: මෙම දර්ශකය විශේෂිත ලේඛනයක (x86, සාමාන්‍යයෙන් ECX) සම්මත කර ඇත, එය සාමාජික ශ්‍රිතය හඳුන්වන වස්තුවට යොමු කරයි. වෙනත් තර්ක තොගය මත සම්මත වේ.
-
stack පිරිසිදු කිරීම: stack පිරිසිදු කිරීම සඳහා අමතන්නා වගකිව යුතුය.
-
Return අගය: ප්‍රතිලාභ අගය EAX ලේඛනයේ (x86) තබා ඇත.
-
Example:
class MyClass {
public:
    int value;
    int add(int a) {
        return value + a;
    }
};
 
// Function call:
MyClass obj;
obj.add(5);

In assembly:

asm
mov ecx, obj      ; Pass the 'this' pointer in ECX
push 5            ; Pass 'a' as argument on the stack
call obj.add      ; Call the member function
; Callee cleans the stack
 
-
වෙනත් ඇමතුම් සම්මුතීන්.
-
විවිධ වේදිකාවල සහ සම්පාදකවල භාවිතා කරන තවත් බොහෝ ඇමතුම් සම්මුතීන් තිබේ. මෙන්න වෙනත් කැපී පෙනෙන ඇමතුම් සම්මුතීන් ලැයිස්තුවක්:
-
5. පැස්කල්
-
stack පිරිසිදු කිරීම: ඇමතුම්කරු තොගය පිරිසිදු කරයි.
-
Argument Passing: තර්ක දකුණේ සිට වමට අට්ටිය මතට තල්ලු කරනු ලැබේ.
-
Use Case: සාමාන්යයෙන් පැස්කල් වැඩසටහන් සහ පැරණි සම්පාදකයින් විසින් භාවිතා කරනු ලැබේ.
-
6. regparm
-
Argument Passing: වේගවත් ඇමතුමට සමාන, නමුත් ලේඛනවල කොපමණ තර්ක සම්මත කර ඇත්ද යන්න සඳහන් කරයි.
-
Use Case: සමහර සම්පාදකයින් කාර්ය සාධන ප්‍රශස්තකරණය සඳහා මෙම සම්මුතිය භාවිතා කරයි.
-
7. vectorcall 
-
Argument Passing: SIMD (තනි උපදෙස්, බහු දත්ත) වර්ග කාර්යක්ෂමව සම්මත කිරීමට භාවිතා කරයි (පාවෙන ලක්ෂ්‍ය මෙහෙයුම් වල දෛශික දත්ත වැනි).
-
Use Case: දෛශික හෝ SIMD මත පදනම් වූ කාර්යයන් සඳහා මයික්‍රොසොෆ්ට් සම්පාදකවල මූලික වශයෙන් භාවිතා වේ.
-
8. Win64 Calling Convention
Argument Passing: පළමු තර්ක හතර රෙජිස්ටර් (RCX, RDX, R8, R9) තුළ සම්මත වේ.
-
Use Case: 64-bit Windows යෙදුම් මගින් භාවිතා කරයි.
-
9. System V AMD64 ABI
-
Argument Passing: පළමු පූර්ණ සංඛ්‍යා තර්ක හය රෙජිස්ටර් (RDI, RSI, RDX, RCX, R8, R9) සම්මත කර ඇත.
-
Use Case: 64-bit Unix වැනි පද්ධති සඳහා සම්මත සම්මුතිය (Linux, macOS, BSD).
-
10. ARM EABI (Embedded ABI)
-
Argument Passing: පළමු තර්ක හතර රෙජිස්ටර් (R0 සිට R3 දක්වා) සම්මත කර ඇත.
-
Use Case: ස්මාර්ට්ෆෝන් සහ කාවැද්දූ උපාංග ඇතුළුව ARM මත පදනම් වූ කාවැද්දූ පද්ධති මගින් භාවිතා කරයි.
-
11. MIPS Calling Convention
-

Argument Passing: පළමු තර්ක හතර රෙජිස්ටර් (A0 සිට A3 දක්වා) සම්මත කර ඇත.
-
Use Case: MIPS ප්‍රොසෙසර භාවිතා කරයි.
-
නිගමනය
සාරාංශයක් ලෙස, ක්‍රියාකාරී ඇමතුම් සහ ප්‍රතිලාභ සංවිධානාත්මක හා කාර්යක්ෂම ආකාරයකින් සිදු වන බව සහතික කිරීම සඳහා ඇමතුම් සම්මුතීන් අත්‍යවශ්‍ය වේ. මෙන්න ප්‍රධාන ඇමතුම් සම්මුතීන් හතරේ නැවත සටහනක්:
-
CDECL: අමතන්නා stack පිරිසිදු කරයි; බොහෝ C වැඩසටහන් භාවිතා කරයි.
-
stdcall: ඇමතුම්කරු stack පිරිසිදු කරයි; Windows API ක්‍රියාකාරකම් වල පොදු වේ.
-
fastcall: පළමු තර්ක කිහිපය කාර්යක්ෂමතාව සඳහා ලේඛනවල සම්මත කර ඇත; කාර්ය සාධන-විවේචනාත්මක කාර්යයන් සඳහා භාවිතා වේ.
-
මෙම ඇමතුම: C++ සාමාජික කාර්යයන් සඳහා භාවිතා වේ; ලේඛනයක මෙම දර්ශකය සමත් වේ.
මේවායින් ඔබ්බට, විශේෂිත පරිසරයන්, මෙහෙයුම් පද්ධති සහ ප්‍රොසෙසර් ගෘහ නිර්මාණ ශිල්පය සඳහා සකස් කරන ලද තවත් බොහෝ ඇමතුම් සම්මුතීන් තිබේ. පහත් මට්ටමේ පද්ධති ක්‍රමලේඛනය, කාර්ය සාධනය ප්‍රශස්ත කිරීම සහ විවිධ වේදිකා සහ සම්පාදක අතර ගැළපුම සහතික කිරීම සඳහා මෙම සම්මුතීන් අවබෝධ කර ගැනීම ඉතා වැදගත් වේ.
-
තාමත් අපේ
group එකේ නැත්තන් group එකට සෙට් වෙන්න :
https://www.facebook.com/groups/paperclipx
මේ group එකේ දාන දේවල් හොඳයි කියල හිතෙනවනම් ඕගොල්ලොන් ගේ යාලුවන්වත් group එකට එකතු කරන්න !

 

No comments:

Post a Comment