Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

[C] Inline-Assembler - XOR

Diskussion: [C] Inline-Assembler - XOR im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo zusammen, ich bin gerade dabei zu lernen, mit Inline-Assembler im gcc umzugehen. Im Zuge dessen habe ich mir ...

Antwort
Alt 10.02.09, 12:34   #1 (permalink)
mcf
 
Registriert seit: 08.02.09
mcf Leistung: Facit NTK
Likes: 0
[C] Inline-Assembler - XOR

Anzeige

Hallo zusammen,

ich bin gerade dabei zu lernen, mit Inline-Assembler im gcc umzugehen.
Im Zuge dessen habe ich mir vorgenommen, einen kleine Funktion zu schreiben, die zwei chars übergeben bekommt und diese mittels XOR verknüpft.

Hier mal meine Funktion:

Code:
void simple_xor( char des, char key ) {	

	asm (
		"xorb %1, %0"
		:"=r" (des)
		:"r" (key)
	);
	
	// Kontrolle
	printf( "%d\n", des );
	printf( "%d\n", key );
}
DIe Funktion bekommt also zwei chars übergeben, welche ja beide 1 Byte groß sein sollten, des wegen benutze ich hier xorb.
Zunächst wollte ich das Ganze jetzt mal mit Zahlen testen, habe die Funktion also so aufgerufen:
Code:
simple_xor( 0, 10 );
Erwartet hätte ich jetzt als Ergebnis, dass "des" den Wert 10 bekommt, da 0 xor 10 ja wieder 10 ergibt. Allerdings hatte "des" nach dem "asm-Teil" immer noch den Wert 0.

Woran liegt das? Beziehungsweise, was mache ich denn falsch?

edit:
Ich habe das ganze mal mittels gcc -S in eine Assemblerdatei übersetzen lassen. Da fand ich dann folgende Zeile(n):
Code:
#APP
	xorb %al, %al
#NO_APP
Das erklärt, warum ich am Ende 0 erhalte... aber, ich habe doch in meinem Code gar nicht zwei mal dasselbe Register angegeben?

edit2:
So, jetzt habe ich's geschaft. :D
Die simple Lösung war, einfach bei beiden ein unterschiedliches Register anzugeben:
Code:
asm (
		"xorb %1, %0"
		:"=a" (des)
		:"b" (key)
	);
Mit freundlichen Grüßen,
mcf
mcf ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » [C] Inline-Assembler - XOR
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Inline Hooking Schurke (In)security allgemein 5 03.05.09 14:44
[C] Inline Assembler Cr4ckEye Code Kitchen 12 24.12.08 14:24
Inline Assembler[c++] Kenniej91 Code Kitchen 2 16.11.08 19:07
C / inline asm: problem mit Rückgabewert RedEagle Code Kitchen 4 04.09.08 18:51
floating point mit inline-Asm(M$VC++) Diablo_bth Code Kitchen 1 13.06.02 19:49


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61