IT-Academy Logo
Sign Up Login Help
Home - Programmieren - C++ - Inline-Assembler(x86) in C/C++



Inline-Assembler(x86) in C/C++

Erklärt die Benutzung von Inline-Assembler in den Programmiersprachen C und C++ an einfachen Beispielen.


Autor: Christian Scheffler (@tention)
Datum: 19-06-2003, 22:27:14
Referenzen: keine
Schwierigkeit: Profis
Ansichten: 30173x
Rating: 4 (5x bewertet)

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:
_asm{..} oder __asm{..} oder asm{..}
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:
char var1 = 3, var2 = 4;
_asm
{
	mov  al,var1
	xchg al,var2
	mov  var1,al
}
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:
unsigned short var1 = 3, var2 = 4;
_asm
{
	mov  ax,var1
	xchg ax,var2
	mov  var1,ax
}
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:
int var1 = 3, var2 = 4;
_asm
{
	mov  eax,var1
	xchg eax,var2
	mov  var1,eax
}
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


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0