Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Assembler Rückgabewert

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Ort
    Köln
    Beiträge
    23

    Assembler Rückgabewert

    Hallo Alle -g-,

    also ich wollte gerne wissen, wie ich in assembler einen rückgabe wert in eine DLL Function mache.

    entweder das die DLL, wenn ich sie in C einbinde einen rückgabe wert hat oder wenn ich als parameter die variable "a" übergebe, dass die variable "a" verändert wird und ich in C dann die veränderte variable habe.

    wie geht das in Assembler?

    mir reicht fürs erste eins von beiden. Aber beide wäre richtig fett.

    So ich will eigentlich nur wissen, wie es geht. Aber mit einem Beispiel wäre es super nett von euch -g- -habe voll die anstprüchte-

    Wenn jemand weiss wie es geht, dann bin ich für jede antwort dankbar.

    Danke im Vorraus

    Euer KDSBest

    PS: Ich will es gerne für Win32 Anwendungen wissen -rot werd -

  2. #2
    Registrierter Benutzer
    Registriert seit
    04.07.1999
    Ort
    Zürich
    Beiträge
    221
    Sorry aber mir ist dein Problem nicht ganz klar!
    Könntest du ein (pseudo) Codefragment posten.

    greets
    f0rtex
    Doctrína est fructus dulcis radícis amárae.

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Ort
    Köln
    Beiträge
    23
    Ok ich versuche es mal

    ----TASM Code-----
    .386
    .MODEL FLAT,STDCALL
    locals
    jumps

    .data
    Param1 dd (0)

    .code ; Unser Code

    main:
    ; Haupt API, die geladen wird, wenn die dll geladen wird
    PUBLICDLL WEP
    WEP:
    mov eax, 1
    ret 000ch



    PUBLICDLL addierenmit2

    addierenmit2: ; Hier startet die Prozedur
    pop eax ; Returnadresse speichern
    pop dword ptr [Param1] ; Parameter 1 aus dem Stack holen
    push eax ; Returnaddresse wieder auf den Stack legen

    enter 20h ,0 ; Neue Stack Ebene, damit wir den alten Stack nicht
    ;überschreiben


    ; Parameter in eax laden
    mov eax, dword ptr [Param1]
    ; mit 2 addieren
    add eax,2


    leave ; Stack Ebene verlassen
    ret ; zurückkehren

    end main
    -----Ende Code-----

    so jetzt haben wir über die API addierenmit2 in unserer dll den Parameter Param1 mit 2 addiert

    wie mache ich jetzt, dass, das Ergebnis als rückgabe wert zurück gegeben wird oder das der wert, der als übergeben wird, das ergebnis ist?

    Danke im vorraus
    euer KDSBest

  4. #4
    Registrierter Benutzer
    Registriert seit
    04.07.1999
    Ort
    Zürich
    Beiträge
    221
    1. Normalerweise ist es üblich via Base Pointer auf Variablen im Stack zuzugreifen. (coding style)

    2. Üblicherweise werden Rückgabewerta via Accu/Extended Accu oder Stack zurückgegeben.
    Im deinem Codebsp. holst du den Wert vom Stack, schreibst ihn in den Accu und addierst 2 dazu. Der übergebene Parameter wird bei dir nicht verändert. (Call by Value) Das Resultat verweit bei dir im Accu. Das entspricht etwa int addieremit2(int) in C.

    Falls du ein Call by Referenz machen willst, musst du als Parameter die Addr. (Stichwort Parameterblock) der Variablen deiner Funktion übergeben. Dann kannst du den Wert nach der Addition mit einem mov überschreiben.
    Doctrína est fructus dulcis radícis amárae.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •