Inhaltsverzeichnis
Der Unterschied zwischen Linux x86 (32-Bit) und x64 (64-Bit)
Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux Was ist der Unterschied zwischen x64 und x86 unter Linux?

Was ist der Unterschied zwischen x64 und x86 unter Linux?

Jan 11, 2022 pm 06:03 PM
linux x86

Unterschiede: 1. Andere Registerzuordnung, x64 hat nur 8 Register; 3. Andere Funktionsaufrufe; 5. Andere Stack-Frames; Zeiger, während x86 ebp als Stapelrahmenzeiger verwendet. 6. Die Rechengeschwindigkeit von x64 ist höher als die von x86.

Was ist der Unterschied zwischen x64 und x86 unter Linux?

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

Der Unterschied zwischen Linux x86 (32-Bit) und x64 (64-Bit)

0x01: Unterschiede in der Registerzuordnung

(1) 64-Bit hat 16 Register, 32-Bit nur 8. Aber die ersten 8 Bits von 32-Bit haben unterschiedliche Namen, nämlich e_, während die ersten acht Bits von 64-Bit r anstelle von e verwenden, was r_ ist. Die mit e beginnende Registerbenennung kann weiterhin direkt auf die unteren 32 Bits des entsprechenden Registers angewendet werden, während die übrigen Registernamen von r8 bis r15 reichen und die unteren Bits jeweils mit d, w und b bezeichnet werden
(2) 32-Bit verwendet den Stapelrahmen als Speicherort für die übergebenen Parameter, während 64-Bit Register verwendet und rdi, rsi, rdx, rcx, r8, r9 jeweils als Parameter 1–6 und rax als Rückgabewert verwendet
(3) 64-Bit hat keinen Stack-Frame-Zeiger, 32-Bit verwendet ebp als Stack-Frame-Zeiger, 64-Bit hebt diese Einstellung auf und rbp wird als allgemeines Register verwendet; unterstützt einige Formen der PC-bezogenen Adressierung, während 32-Bit nur JMP unterstützt. Diese Adressierungsmethode wird nur verwendet, wenn: pop erweitert die movq-Reihe von mov und pushq und popq Wird zum Betreiben von Quad-Worten verwendet.

Ergänzung: (1) movabsq ist keine 32-Bit-Erweiterung, es ist eine völlig neue Anweisung. Wird verwendet, um einen 64-Bit-Literalwert direkt in einem 64-Bit-Register zu speichern. Da movq nur 32-Bit-Werte speichern kann, wird eine neue Anweisung wie diese hinzugefügt

(2) 64-Bit-Assembly-Code fügt möglicherweise vor ret einen rep hinzu. Der rep hier hat nur aus Gründen der Zweckmäßigkeit keine praktische Bedeutung Der Grund für den AMD-Prozessor besteht darin, den Ort zu vermeiden, an dem jmp direkt ret erreicht, wodurch der Prozessor schneller läuft. Siehe oben);

callq speichert eine 8-Bit-Rückgabeadresse auf dem Stapel

(2) Viele Funktionen haben keine Stapelrahmen mehr und nur diejenigen, die nicht alle lokalen Variablen in Registern platzieren können, weisen Platz auf dem Stapel zu

( 3 ) Die Funktion kann bis zu 128 Byte Stapelspeicher erhalten. Auf diese Weise kann die Funktion Informationen auf dem Stapel speichern, ohne den Stapelzeiger zu ändern (dh der 128-Byte-Bereich unter RSP kann im Voraus verwendet werden. Dieser Bereich wird als rote Zone bezeichnet. In x86-64 ist er verfügbar

(4) Es gibt keinen Stapelrahmenzeiger mehr und die Stapelposition hängt jetzt vom Stapelzeiger ab. Die meisten Funktionen weisen zu Beginn des Aufrufs den gesamten erforderlichen Stapelspeicher zu und lassen dann den Stapelzeiger unverändert

(5) Einige Register sind als vom Aufrufer gespeicherte Register konzipiert und müssen gespeichert werden, wenn ihre Werte benötigt werden ändern und anschließend wiederherstellen.

0x04: Unterschiede in der Parameterübergabe

(1) 6 Register werden zur Parameterübergabe verwendet (siehe oben); (2) Die restlichen Register werden wie zuvor übergeben (jedoch bezogen auf rsp ist ebp nein). Wird länger als Stapelrahmenzeiger verwendet und der 7. Parameter beginnt bei rsp, der 8. Parameter beginnt bei rsp+8 usw. (3) Beim Aufruf bewegt sich rsp um 8 Bits nach unten (in der Rücksprungadresse gespeichert). , die Registerparameter haben keine Auswirkung, der 7. und die folgenden Parameter sind jetzt der 7. ab RSP+8, der 8. ab RSP+16 usw.

0x05: Der Unterschied in den Stapelrahmen

In vielen Fällen wird der Stapelrahmen nicht mehr benötigt. Wenn beispielsweise keine andere Funktion aufgerufen wird und das Register ausreicht, um Parameter zu speichern, muss nur die Rücksprungadresse gespeichert werden.
Situationen, in denen ein Stapelrahmen benötigt wird:

(1) Es gibt zu viele lokale Variablen und nicht genügend Register;
(2) Einige lokale Variablen sind Arrays oder Strukturen;
(3) Die Funktion verwendet den Adressoperator, um zu berechnen Wert einer lokalen Variablenadresse;

(4) Die Funktion muss den Stapel verwenden, um einige Parameter an eine andere Funktion zu übertragen

(5) Die Funktion muss den Status einiger vom Aufrufer gespeicherter Register speichern ; Aber jetzt hat der Stapelrahmen oft eine feste Größe, die zu Beginn des Funktionsaufrufs festgelegt wird. Während des gesamten Aufrufs bleibt der obere Zeiger des Stapels unverändert, sodass der entsprechende Wert durch Hinzufügen eines Offsets bedient werden kann EBP wird nicht mehr als Stack-Frame-Zeiger benötigt. Obwohl wir oft denken, dass es keinen „Stapelrahmen“ gibt, muss jeder Funktionsaufruf eine Rücksprungadresse haben, die auf den Stapel gelegt wird. Wir können uns diese Adresse auch als „Stapelrahmen“ vorstellen, da sie auch den Status des Aufrufers speichert.

0x06: Unterschiedliche Betriebsgeschwindigkeiten

Die Datenbreite der 64-Bit-CPU beträgt 64 Bit, und der 64-Bit-Befehlssatz kann 64-Bit-Datenanweisungen ausführen, was bedeutet, dass der Prozessor 64-Bit-Daten extrahieren kann zu einem Zeitpunkt, der höher als 32-Bit ist. Eine Verdoppelung der Leistung führt theoretisch zu einer Leistungssteigerung um den Faktor 1.

Verwandte Empfehlungen: „Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen x64 und x86 unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

Wie konfigurieren Sie die Timing -Timing -Aufgabe von ApScheduler als Dienst auf macOS? Wie konfigurieren Sie die Timing -Timing -Aufgabe von ApScheduler als Dienst auf macOS? Apr 01, 2025 pm 06:09 PM

Konfigurieren Sie die Timing -Timing -Timing -Timing -Timing auf der MacOS -Plattform, wenn Sie die Timing -Timing -Timing -Timing von APScheduler als Service konfigurieren möchten, ähnlich wie bei NGIN ...

Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Apr 03, 2025 pm 03:00 PM

Multithreading in der Sprache kann die Programmeffizienz erheblich verbessern. Es gibt vier Hauptmethoden, um Multithreading in C -Sprache zu implementieren: Erstellen Sie unabhängige Prozesse: Erstellen Sie mehrere unabhängig laufende Prozesse. Jeder Prozess hat seinen eigenen Speicherplatz. Pseudo-MultitHhreading: Erstellen Sie mehrere Ausführungsströme in einem Prozess, der denselben Speicherplatz freigibt und abwechselnd ausführt. Multi-Thread-Bibliothek: Verwenden Sie Multi-Thread-Bibliotheken wie PThreads, um Threads zu erstellen und zu verwalten, wodurch reichhaltige Funktionen der Thread-Betriebsfunktionen bereitgestellt werden. Coroutine: Eine leichte Multi-Thread-Implementierung, die Aufgaben in kleine Unteraufgaben unterteilt und sie wiederum ausführt.

So öffnen Sie Web.xml So öffnen Sie Web.xml Apr 03, 2025 am 06:51 AM

Um eine Web.xml -Datei zu öffnen, können Sie die folgenden Methoden verwenden: Verwenden Sie einen Texteditor (z.

Kann der Python -Dolmetscher im Linux -System gelöscht werden? Kann der Python -Dolmetscher im Linux -System gelöscht werden? Apr 02, 2025 am 07:00 AM

In Bezug auf das Problem der Entfernung des Python -Dolmetschers, das mit Linux -Systemen ausgestattet ist, werden viele Linux -Verteilungen den Python -Dolmetscher bei der Installation vorinstallieren, und verwendet den Paketmanager nicht ...

Wofür wird der Linux am besten verwendet? Wofür wird der Linux am besten verwendet? Apr 03, 2025 am 12:11 AM

Linux wird am besten als Serververwaltung, eingebettete Systeme und Desktop -Umgebungen verwendet. 1) In der Serververwaltung wird Linux verwendet, um Websites, Datenbanken und Anwendungen zu hosten und Stabilität und Zuverlässigkeit bereitzustellen. 2) In eingebetteten Systemen wird Linux aufgrund seiner Flexibilität und Stabilität in Smart Home und Automotive Electronic Systems häufig verwendet. 3) In der Desktop -Umgebung bietet Linux reichhaltige Anwendungen und eine effiziente Leistung.

Wie ist Debian Hadoop -Kompatibilität? Wie ist Debian Hadoop -Kompatibilität? Apr 02, 2025 am 08:42 AM

Debianlinux ist bekannt für seine Stabilität und Sicherheit und wird in Server-, Entwicklungs- und Desktop -Umgebungen häufig verwendet. Während es derzeit einen Mangel an offiziellen Anweisungen zur direkten Kompatibilität mit Debian und Hadoop gibt, wird dieser Artikel Sie dazu veranlassen, Hadoop in Ihrem Debian -System bereitzustellen. Debian -Systemanforderungen: Bevor Sie mit der Hadoop -Konfiguration beginnen, stellen Sie bitte sicher, dass Ihr Debian -System die Mindestanforderungen von Hadoop erfüllt, einschließlich der Installation der erforderlichen Java -Laufzeitumgebung (JRE) und Hadoop -Pakete. Schritte zur Bereitstellung von Hadoop -Bereitstellungen: Download und Unzip Hadoop: Laden Sie die Hadoop -Version von der offiziellen Apachehadoop -Website herunter und lösen Sie sie

Ist Debian Strings kompatibel mit mehreren Browsern Ist Debian Strings kompatibel mit mehreren Browsern Apr 02, 2025 am 08:30 AM

"DebianStrings" ist kein Standardbegriff und seine spezifische Bedeutung ist noch unklar. Dieser Artikel kann seine Browserkompatibilität nicht direkt kommentieren. Wenn sich jedoch "DebianStrings" auf eine Webanwendung bezieht, die auf einem Debian -System ausgeführt wird, hängt seine Browserkompatibilität von der technischen Architektur der Anwendung selbst ab. Die meisten modernen Webanwendungen sind für die Kompatibilität des Cross-Browsers verpflichtet. Dies beruht auf den folgenden Webstandards und der Verwendung gut kompatibler Front-End-Technologien (wie HTML, CSS, JavaScript) und Back-End-Technologien (wie PHP, Python, Node.js usw.). Um sicherzustellen, dass die Anwendung mit mehreren Browsern kompatibel ist, müssen Entwickler häufig Kreuzbrowser-Tests durchführen und die Reaktionsfähigkeit verwenden

See all articles