Frage

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 im 64bit.

Ich glaube nicht, dass sie die gleichen sind wie wenn ich meinen C -Code zerlegt, bekomme ich Rs anstelle von E.

War es hilfreich?

Lösung

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 Allgemeinregister r8 durch r15 Dies kann auch als (zum Beispiel) zugegriffen werden r8d, r8w und r8b (Das untere 32-Bit-Doppelwort, 16-Bit-Wort bzw. 8-Bit-Byte). Das b Suffix ist die ursprüngliche AMD -Nomenklatur, aber Sie werden es manchmal als geschrieben sehen als l (Kleinbuchstaben L) für "niedriges Byte".

Ich neige dazu, das zu bevorzugen b Suffix ich selbst (obwohl die aktuellen Register mit niedrigem Byte sind al, bl, und so weiter), da es dem übereinstimmt d/w = double/word Namen und l könnte möglicherweise verwechselt werden long. Oder schlimmer noch die Ziffer 1, Sie führen Sie zur Frage, wie zum Teufel registrieren Sie sich 81 ist :-)

Die hohen Bytes der alten 16-Bit-Register sind unter vielen Umständen immer noch zugänglich ah, bh, und so weiter (obwohl dies für das neue nicht der Fall zu sein scheint r8 durch r15 Register). Es gibt einige neue Anweisungscodierungen, speziell diejenigen, die die verwenden REX Präfix, das nicht auf diese originalen High -Bytes zugreifen kann, aber andere können sie noch verwenden.

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

Das eip und eflags Register wurden ebenfalls erweitert auf rip und rflags(obwohl die hohen 32 Bit von rflags sind vorerst noch nicht genutzt).

Siehe das Wikipedia -Seite und Msdn für mehr Details.

Ob diese in der unterstützt werden asm Schlüsselwort für einen bestimmten C -Compiler konnte ich nicht sagen. Die kleine Versammlung mache ich (und es wird ungefähr einen Tag im Jahr) in der Versammlung und nicht in C.


Verwandt:

Andere Tipps

Das MSDN -Dokumentation Enthält Informationen zu den X64 -Registern.

X64 erweitert die 8 allgemeinen Register von X64 um 64-Bit und fügt 8 neue 64-Bit-Register hinzu. Die 64-Bit-Register haben Namen, beginnend mit "R", daher heißt beispielsweise die 64-Bit-Erweiterung von EAX Rax. Die neuen Register werden R8 bis R15 genannt.

Die unteren 32 Bit, 16 Bit und 8 Bit jedes Registers sind in Operanden direkt adressierbar. Dies schließt Register wie ESI ein, deren niedrigere 8 Bit zuvor nicht adressierbar waren. Die folgende Tabelle gibt die montagessprachigen Namen für die unteren Teile von 64-Bit-Registern an.

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

X64 erweitert die 32-Bit-Allzweckregister wie folgt:

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

X64 fügt auch die folgenden 64-Bit-Allzweckregister hinzu:

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

Zusätzlich ist SSE Teil der X64-Spezifikation, sodass auch die XMM0-XMM15-Vektorregister verfügbar sind

Sie können einige grundlegende Informationen zur Architektur finden Wikipedia/x86-64 Oder gehen Sie auf die Website von Intel.

Lassen Sie uns das Intel -Handbuch lesen

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

In der Handbuch des Prozessors "Intel 64 und IA-32 Architekturen-Softwareentwicklerhandbuch Volumen 1: Basic Architecture", z. B. Version 253665-053us:

  • Suche nach "Registern"
  • Die erste Übereinstimmung ist der Index "3.4 Basic Program Execution Register"
  • Zwei Elemente unter "3.4.1.1 Allgemeine Register 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. R8D-R 15D/R8-R15 repräsentieren acht neue Register für allgemeine Verwaltung.

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

Wenn Sie weiterhin nach "Register" auf der TOC suchen, finden Sie auch Abschnitte zu "Zahlenquetschenden" Registern für schwimmende Punkte und SIMD, die im Handbuch verstreut sind:

  • 8.1.2 - x87 FPU -Datenregister (STX)
  • 9.9.2 - MMX -Register
  • 10.2.2 - xmm Register
  • 14.1.1 - 256 -Bit Wide SIMD Register Support (YMM)

Es gibt viel mehr Kontrollregister, die verschiedene Nebenwirkungen haben und im Allgemeinen nicht geschrieben werden können, es sei denn, Sie wollen diese Effekte (und oft erfordern Ring 0). Diese sind in "Programmierhandbuch" Volume 3 Systems - 2.1.6 Systemregister "zusammengefasst, das mehr für Betriebssystementwickler ist.

Ein guter empirischer Ansatz ist das Laufen info all-registers in GDB: Wie drucken Sie Registerwerte in GDB?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top