Wie Sie angeben, registrieren Sie Einschränkungen auf der Intel x86-64-register r8 bis r15 im GCC-inline-assembly?
Hier ist die Liste der register Beladung codes:
einer eax
b ebx
c ecx
d edx
S esi
D edi
Ich konstanter Wert (0 bis 31)
q,r dynamisch zugewiesenen register (siehe unten)
g eax, ebx, ecx, edx oder variable im Speicher
Ein Register eax und edx-kombiniert in einer 64-bit-Ganzzahl (mit langen longs)
Aber das ist registrieren Einschränkungen für die intel i386 Plattform. Meine Frage ist, wo finde ich das register Einschränkungen von intel x86_64-system, wie:
? %r10
? %r8
? %rdx
und so weiter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den System-spezifischen Einschränkungen haben einen Abschnitt in der gcc Handbuch - die hässlichen details finden sich in config/i386/Einschränkungen.md.
Einige Einschränkungen haben unterschiedliche Bedeutungen für x86-64, z.B.
q
ist%eax
,%ebx
,%ecx
,%edx
im 32-bit-Modus; im 64-bit Modus, ist es Allgemeine integer - register und im wesentlichen die gleiche wie dier
Einschränkung. Bestimmte Namen registriert wiea
beziehen sich jetzt auf%rax
,d
zu%rdx
usw.Es gibt jedoch keine speziellen Einschränkungen oder Namen für
%r8
..%r15
. Es gibt eine ausgezeichnete (x86-64-spezifischen) tutorial auf inline Assembler und die constraint verwenden hier.GCC keine solche Einschränkung für Register wie
r10
,r8
. Jedoch, Sie können machen, verwenden Sie eine Funktion namens Lokale Variablen Registrieren. Bitte Lesen Sie das Dokument sorgfältig durch, bevor Sie diese Funktion verwenden, insbesondere die warn-Absatz.Beispiel:
Siehe auch musl ist die Implementierung von syscall-stubs.