So übergeben Sie Funktionsparameter in einem Register mit dem Schlüsselwort gcc asm

8

In gcc können Sie deklarieren, dass eine lokale Variable mit der folgenden Syntax in ein Register geschrieben werden soll.

%Vor%

In einem alten Code, den ich im Internet gefunden habe, wurde diese Syntax verwendet, um zu erklären, dass die Parameter einer Funktion in einem Register übergeben werden sollten:

%Vor%

Aber wenn ich dieses Beispiel versuche:

%Vor%

Und mit gcc kompilieren bekomme ich einen Fehler:

%Vor%

Jetzt sind meine Fragen:
Ist die obige Syntax korrekt, in gcc also für formale Parameter einer Funktion?
Wurde dies jemals von gcc unterstützt? Wenn dies nicht die richtige Syntax ist, wie kann dies dann erreicht werden? Danke, Danke // jk

    
j.karlsson 04.03.2013, 20:17
quelle

1 Antwort

2

Die einzige mir bekannte Methode ist das Attribut fastcall:

(GCC-Handbuch Abschnitt 6.30) Ссылка

  

fastcall

     

Auf dem Intel 386 veranlaßt das fastcall-Attribut den Compiler, das erste Argument (wenn vom integralen Typ) in das Register ECX und zu übergeben   das zweite Argument (wenn vom integralen Typ) in das Register EDX.   Nachfolgende und andere typisierte Argumente werden auf dem Stapel übergeben. Das   Die aufgerufene Funktion hebt die Argumente vom Stapel auf. Wenn die Anzahl von   Argumente sind variabel, alle Argumente werden auf den Stapel geschoben.

Verwenden Sie es im folgenden Beispielcode:

%Vor%

führt zu:

%Vor%

Vergessen Sie nicht, das Fastcall-Attribut in einer Deklaration in anderen Übersetzungseinheiten zu erwähnen, da sonst eher seltsame Dinge passieren können.

    
mikyra 04.03.2013, 20:23
quelle