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
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.
Tags und Links c gcc assembly calling-convention parameter-passing