8 Stimmen

Wie übergebe ich Argumente an C++-Funktionen, wenn ich sie aus einer Inline-Assembly aufrufe?

Ich möchte also in der Lage sein, Funktionen aus einer C++-DLL aufzurufen. Aus bestimmten Gründen würde ich sie gerne von einem __asm-Block in meinem C++-Code aufrufen. Meine Frage ist folgende: Ich weiß, dass ich, bevor ich die Funktion aufrufe, ihre Argumente in der durch die Aufrufkonvention der Funktion festgelegten Reihenfolge auf den Stack schieben muss, aber kann ich einfach so etwas tun?

int a=5;   
double b = 5.0;  
__asm{  
       push b 
       push a  
       call functionAddress  
}

Was mich beunruhigt, ist die Tatsache, dass ich mich daran zu erinnern scheine, dass die Standard-Wortgröße in Assembler 2 Byte beträgt, während die Größe eines int in C++ normalerweise 4 Byte und 8 Byte für einen double beträgt, so dass ich in dem obigen Beispiel wirklich den vollen Wert jeder Variablen oder nur die ersten paar Bytes ausgeben muss. Wenn der obige Code nicht korrekt ist, was wäre dann der richtige Weg, es zu tun? Und wenn die aufgerufene Funktion einen Double-Wert zurückgibt, wo wird dieser Wert gespeichert? Ich nehme an, dass er nicht in einem Register gespeichert werden kann, da dieses nur 32 Bits (4 Bytes) speichern kann.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X