wake-up-neo.com

Wie heißen die neuen X86_64-Prozessorregister?

Wo finde ich die Namen der neuen Register für die Versammlung in dieser Architektur?

Ich beziehe mich auf Register in X86 wie EAX, ESP, EBX usw. Aber ich möchte sie in 64-Bit.

Ich glaube nicht, dass sie die gleichen sind, als wenn ich meinen C-Code zerlege, bekomme ich R's anstelle von E's.

55
Recursion

Die alten 32-Bit-Register wurden auf 64 Bit erweitert, die r-Register (rax, rbx, rsp usw.) .

Darüber hinaus gibt es einige zusätzliche Universalregister r8 bis r15, auf die auch (zum Beispiel) als r8d, r8w und r8b (das untere 32-Bit-Doppelwort, 16-Bit-Wort bzw. 8-Bit-Byte) zugegriffen werden kann. Das Suffix b ist die ursprüngliche AMD-Nomenklatur, aber manchmal wird es als l (Kleinbuchstabe L) für "low byte" geschrieben.

Ich bevorzuge das Suffix b selbst (obwohl die aktuellen Low-Byte-Register al, bl usw. sind), da es mit den Namen d/w = double/Word übereinstimmt und l könnte möglicherweise mit long verwechselt werden. Oder, schlimmer noch, die Ziffer 1, die dazu führt, dass Sie sich die Frage stellen, wie die verdammte Registernummer 81 lautet :-)

Auf die High-Bytes der alten 16-Bit-Register kann unter vielen Umständen weiterhin als ah, bh usw. zugegriffen werden (obwohl dies bei den neuen anscheinend nicht der Fall ist r8 bis r15). Es gibt einige neue Anweisungscodierungen , insbesondere solche mit dem Präfix REX, die nicht auf diese ursprünglichen hohen Bytes zugreifen können, andere jedoch noch frei, sie zu benutzen.

Außerdem gibt es einige neue SSE Register, xmm8 obwohl xmm15.

Die Register eip und eflags wurden ebenfalls um rip und rflags erweitert (obwohl die hohen 32 Bits von rflags sind vorerst noch unbenutzt).

Weitere Informationen finden Sie auf den Seiten Wikipedia und MSDN .

Ob diese im asm-Schlüsselwort für einen bestimmten C-Compiler unterstützt werden, kann ich nicht sagen. Die kleine Versammlung, die ich mache (und die ungefähr an einem Tag im Jahr stattfindet), findet in der Versammlung statt und nicht in C.


Verbunden:

72
paxdiablo

Die MSDN-Dokumentation enthält Informationen zu den x64-Registern.

x64 erweitert die 8 Universalregister von x64 auf 64-Bit und fügt 8 neue 64-Bit-Register hinzu. Die 64-Bit-Register haben Namen, die mit "r" beginnen, so wird beispielsweise die 64-Bit-Erweiterung von eax als rax bezeichnet. Die neuen Register heißen r8 bis r15.

Die unteren 32 Bits, 16 Bits und 8 Bits jedes Registers können direkt in Operanden adressiert werden. Dies schließt Register wie esi ein, deren untere 8 Bits zuvor nicht adressierbar waren. In der folgenden Tabelle sind die Assemblersprachennamen für die unteren Teile der 64-Bit-Register angegeben.

64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax             | eax           | ax            | al
rbx             | ebx           | bx            | bl
rcx             | ecx           | cx            | cl
rdx             | edx           | dx            | dl
rsi             | esi           | si            | sil
rdi             | edi           | di            | dil
rbp             | ebp           | bp            | bpl
rsp             | esp           | sp            | spl
r8              | r8d           | r8w           | r8b
r9              | r9d           | r9w           | r9b
r10             | r10d          | r10w          | r10b
r11             | r11d          | r11w          | r11b
r12             | r12d          | r12w          | r12b
r13             | r13d          | r13w          | r13b
r14             | r14d          | r14w          | r14b
r15             | r15d          | r15w          | r15b
94
RRUZ

X64 erweitert die 32-Bit-Universalregister wie folgt:

EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP

X64 fügt außerdem die folgenden 64-Bit-Universalregister hinzu:

R8, R9, R10, R11, R12, R13, R14, R15

Außerdem ist SSE Teil der X64-Spezifikation, sodass auch die xmm0-xmm15-Vektorregister verfügbar sind

Grundlegende Informationen zur Architektur finden Sie unter Wikipedia/X86-64 oder auf der Website von Intel.

9
brainiac

Lesen wir das Intel-Handbuch

Wo finde ich die Namen der neuen Register für die Versammlung zu dieser Architektur?.

Im Handbuch des Prozessors "Intel 64- und IA-32-Architekturen - Software-Entwicklerhandbuch Band 1: Grundlegende Architektur", z. Version 253665-053US :

  • suche nach "Registern"
  • die erste Übereinstimmung ist der Index "3.4 GRUNDPROGRAMM-AUSFÜHRUNGSREGISTER".
  • zwei Punkte unter "3.4.1.1 Universalregister im 64-Bit-Modus"

In diesem Abschnitt:

wenn eine 64-Bit-Operandengröße angegeben ist: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8-R15 sind verfügbar. R8D-R 15D/R8-R15 repräsentieren acht neue Universalregister.

Erinnerung: Der 64-Bit-Modus ist der "normale" Modus in x86-64. Der andere Hauptmodus ist der "Kompatibilitätsmodus", der IA32 emuliert.

Wenn Sie im Inhaltsverzeichnis weiterhin nach "register" suchen, finden Sie im Handbuch auch Abschnitte zu "number crushing" -Registern für Gleitkommazahlen und SIMDs:

  • 8.1.2 - x87-FPU-Datenregister (STx)
  • 9.9.2 - MMX-Register
  • 10.2.2 - XMM-Register
  • 14.1.1 - Unterstützung für 256-Bit-breite SIMD-Register (YMM)

Es gibt viel mehr Steuerregister, die verschiedene Nebenwirkungen haben und im Allgemeinen nicht beschrieben werden können, es sei denn, Sie möchten diese Effekte (und häufig Ring 0 erforderlich ). Diese sind im "Volume 3 System Programming Guide - 2.1.6 System Registers" zusammengefasst, das sich eher an OS-Entwickler richtet.

Ein guter empirischer Ansatz ist es, info all-registers in GDB: Wie werden Registerwerte in GDB gedruckt?