|
Home - Programmieren - C++ - Inline-Assembler(x86) in C/C++
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] Einführung Sofern Ihr C/C++-Compiler den Einsatz von Inline-Assembler unterstützt, haben Sie die Möglichkeit, Ihren Programmcode durch Assembler(x86) effektiver, schneller und kleiner zu gestalten. Da Assembler direkt auf die Register des Prozessors zugreift, haben Sie die volle Kontrolle über die Vorgänge, die ausgeführt werden sollen. Des Weiteren ermöglicht Assembler eine enorme Geschwindigkeit gegenüber dem vom C/C++-Compiler erzeugten Code, da dieser vom C/C++-Compiler viel umständlicher übersetzt wird, und Sie mit Hilfe von Assembler die Problematik konkretisieren können. Somit können Sie die Vorteile von Assembler in Verbindung mit C/C++ nutzen um effektivere Programme zu entwickeln. Sie brauchen nicht wie üblich ein Daten- und ein Codesegment, evtl. einen Stack und ein Extrasegment zu definieren, denn Sie haben bei Inline-Assembler direkten Zugriff auf die im C/C++-Code deklarierten Variablen. Inline-Assembler wird mit folgenden Befehlen eingeleitet:
wobei Letzterer implementierungsabhängig ist. Welchen Befehl zur Einleitung von
Inline-Assembler Ihr Compiler unterstützt, finden Sie z.B. in der Dokumentation
des Compilers oder durch das Testen der verschiedenen Befehle heraus.Beispiel Folgendes Beispiel behandelt den Tausch der Werte zweier Variablen, wobei die Größe der Variablen berücksichtigt werden muss (8bit, 16bit, 32bit). Wenn Sie eine 16bit-Variable verarbeiten möchten, verwenden Sie das komplette Register, wobei Sie bei der Verwendung einer 8bit-Variable den Low-Bereich des Registers verwenden müssen. Bei 32bit-Variablen verwenden Sie das erweiterte Register. Für arithmetische Operationen sollten Sie standardmäßig das Akkumulator-Register verwenden, für 32bit EAX, für 16bit AX, für 8bit AL. Beispiel für 8bit-Variablen:
Dieses Beispiel tauscht die Werte der Variablen var1 & var2 mit Hilfe von
Assembler. Da es sich um 8bit-Variablen handelt, wird der 8bit-Bereich des
Akkumulator-Registers verwendet (AL). Der Zugriff auf die Speicherplätze
der im C-Code deklarierten Variablen erfolgt ohne Umwege.Beispiel für 16bit-Variablen:
Dieses Beispiel tauscht die Werte der Variablen var1 & var2 mit Hilfe von
Assembler. Da es sich um 16bit-Variablen handelt, wird der ganze Bereich des
Akkumulator-Registers verwendet (AX). Der Zugriff auf die Speicherplätze
der im C-Code deklarierten Variablen erfolgt ohne Umwege.Beispiel für 32bit-Variablen:
Dieses Beispiel tauscht die Werte der Variablen var1 & var2 mit Hilfe von
Assembler. Da es sich um 32bit-Variablen handelt, wird der erweiterte Bereich
des Akkumulator-Registers verwendet (EAX). Der Zugriff auf die Speicher-
plätze der im C-Code deklarierten Variablen erfolgt ohne Umwege.Sie können fast alle, für Ihren Prozessor verfügbaren, Assembler-Befehle in Inline-Assembler benutzen, und somit die Möglichkeiten von C/C++ und Assembler voll ausnutzen, um einen sehr effektiven Code zu entwickeln. Vor Allem bei rechenintensiven Algorithmen erweist sich die Benutzung von Assembler als sinnvoll. ©2003 TENTION
|
Autoren:03760
Artikel:00815 Glossar:04618 News:08554 Userbeiträge:16077 Queueeinträge:00024
Unternehmensimage im Internet aufbauen
Hotels.com geht Offline DMSFACTORY erleichtert Implementierung von DMS über Skype [Mehr News]
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
|