Assemblerzeiger in C Code übernehmen?

Möchtest du denn Inline Assembler verwenden, oder eine Assembler-DLL erstellen? Welche Compiler verwendest du?
Grundsätzlich ist das natürlich möglich. Mit Inline Assembler kannst du ja beispielsweise in Visual C++ Variablen direkt im Assembler-Code ansprechen.
Wenn du eine DLL erstellen willst, dann kannst du in EAX einen Rückgabewert ablegen, den du dann in C ganz normal einer Variablen zuweisen kannst.

C:
#include <stdio.h>

int main() {
	char* text = "Das hier ist ein Text.";
	char* text2 = NULL;

	_asm {
		mov esi, text;
		add esi, 4;

		mov text2, esi;
	}

	printf(text2);
	getchar();

	return 0;
}
 
Zuletzt bearbeitet:
Ich benutze gcc und nutze auch den Inline Assembler, ich rufe eine Funktion von Assemblercode auf und will einen der Asm-Zeiger irgendwie im C-Code nutzen
 
danke für den link, ist sehr nützlich, aber leider ist das nicht ganz mein problem
ich versuche die ganze zeit
Code:
mov edi, [irgendwas]
wieder in c verfügbar zu machen, also
Code:
mov edi, [irgendwas]
call _cmain
dann in c

Code:
int *pointer;
asm volatile("mov %%edi, %0" : "=r"(pointer));

doch dabei erhalte ich immer krumme werte
 
Du dereferenzierst "irgendwas", hast also in EDI nachher den Wert an der Adresse. Wenn du den jetzt in "pointer" ablegen willst, musst du doch "pointer" auch dereferenzieren?
Code:
int *pointer;
asm volatile("mov %%edi, %0" : "=r"(*pointer));
Vielleicht irgendwie so? Wie gesagt, ich kenn mich mit dieser Syntax überhaupt nicht aus. :-( Aber dieses Beispiel sieht so ähnlich aus?
C:
int foo ()
     {
       int x = 42;
       int *y = &x;
       int result;
       asm ("magic stuff accessing an 'int' pointed to by '%1'"
             "=&d" (r) : "a" (y), "m" (*y));
       return result;
     }
 
Zuletzt bearbeitet:
Zurück