Skip navigation

Kapcsolódás a C/C++ kódhoz

Működés

Lehetőségünk van assembly nyelven írt kódot (eljárást) meghívni C/C++ kódon belül. Pl.:

A C++ kód, melyben egy addem nevű eljárást hívunk, mely az assembly kódon belül van megvalósítva:


// Addem Main Program      (AddMain.cpp) 

#include 
using namespace std;

extern "C" int addem(int p1, int p2, int p3);

int main(){
    int total = addem( 10, 15, 25 );
    cout << "Total = " << total << endl;
    return 0;
}

Az assembly kód, melyben egy összeadó eljárás van megvalósítva:

; The addem Subroutine    (addem.asm)
; This subroutine links to Visual C++.

.386P
.model flat
public _addem

.code
_addem proc near
    push   ebp
    mov    ebp,esp
    mov    eax,[ebp+16]    ; first argument
    add    eax,[ebp+12]    ; second argument
    add    eax,[ebp+8]     ; third argument
    pop    ebp
    ret                   
_addem endp
end

Mikor a C++ kódból meghívjuk az eljárást, a bementi paraméterek bele kerülnek a verembe (plusz a visszatérési cím). Így az eljárás futásakor már benne vannak a veremben, csak megfelelő címzéssel el kell érni őket. A verem tartalma:

EBP old
EIP old
10
15
25
[EBP]
[EBP+4]
[EBP+8]
[EBP+12]
[EBP+16]