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

Daher möchte ich in der Lage sein, Funktionen aus einer C ++ - DLL aufzurufen. Aus bestimmten Gründen möchte ich sie aus einem __asm -Block in meinem C ++ - Code aufrufen. Meine Frage lautet: Ich weiß, dass ich vor dem Aufrufen der Funktion die Argumente in der durch die Aufrufkonvention der Funktion festgelegten Reihenfolge auf den Stack schreiben muss. Kann ich jedoch einfach Folgendes tun:

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

Was mich beunruhigt, ist die Tatsache, dass ich mich anscheinend daran erinnere, dass die Standardwortgröße in Assembler 2 Byte beträgt, während die Größe eines Int in C ++ normalerweise 4 Byte und 8 Byte für ein Double beträgt Pushing den vollen Wert jeder Variablen oder nur die ersten paar Bytes? Wenn der obige Code nicht korrekt ist, wie wäre es dann richtig? Wenn die aufgerufene Funktion ein Double zurückgibt, wo wird dieser Wert gespeichert? Ich gehe davon aus, dass es nicht in einem Register sein kann, weil es nur 32 Bit (4 Byte) speichern kann. Jede Hilfe bei diesem Durcheinander wäre sehr dankbar :)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage