Zugriff mittels Inline assembler auf char array?
-
Hey @all,
ich versuche mich gerade einem projekt (c++ und inline assembler) in vc++
Auf variablen zugreifen ist kein problem, nur wie greife ich auf ein char array zu? oder allgemein auf arrays?
Beispiel:
char test_array[5] = {'a', 'b', 'c', 'd', 'e'}; __asm { mov eax, test_array[3] // Funktioniert nicht }Wie könnte ich sowas lösen?
Vielen Dank im Voraus
Lg _freeze_
-
mov al, test_array[3]

-
Was ist da der Unterschied?
Dachte in einer 32 Bit-Umgebenung gelten die Register EAX, EBX, ECX, EDX?
lg _freeze_
-
Also wenn ich es so mache, dann bekomme ich folgende fehlermeldung
error C2443: operand size conflictadd ecx, digstr[edx] // Ergibt digstr[10] ==> DIm Endeffekt sollte dann sowas in die Richtung rauskommen
ECX => "DAS"
Er soll immer einen Buchstaben aus dem Array zum Register ECX hinzufügen und dann das ganze am Ende in einen std::string packen:
std::string text = ""; __asm { add ecx, digstr[edx] // Ergibt digstr[10] ==> D . . . mov text, ecxlg _freeze_
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
freeze schrieb:
Was ist da der Unterschied?
falscher datentyp (char-->long)
freeze schrieb:
Dachte in einer 32 Bit-Umgebenung gelten die Register EAX, EBX, ECX, EDX?
nö, die kann man noch aufteilen wie beim 16-bittigen x86...
btw: wieso nimmste asm für sowas?
der C-compiler kann das genau so gut und weniger fehleranfällig.
-
OK ich habs jetzt so probiert, der fehler ist weg, jedoch schreibt er nix in die variable "text"
std::string text = ""; __asm { . . . mov al, digstr[edx] mov retval, al . . . mov text, ecxjedoch steht nix in text drinnen => die variable text bleibt leer

lg _freeze_
-
freeze schrieb:
Hey @all,
ich versuche mich gerade einem projekt (c++ und inline assembler) in vc++
Auf variablen zugreifen ist kein problem, nur wie greife ich auf ein char array zu? oder allgemein auf arrays?
Beispiel:
char test_array[5] = {'a', 'b', 'c', 'd', 'e'}; __asm { mov eax, test_array[3] // Funktioniert nicht }Wie könnte ich sowas lösen?
Vielen Dank im Voraus
Lg _freeze_char global_array[5] = {'a', 'b', 'c', 'd', 'e'}; int main() { char local_array[5] = {'a', 'b', 'c', 'd', 'e'}; _asm { mov eax, offset global_array[3] // oder lea eax, global_array[3] //mov eax, offset local_array[3] Fehler! lokale Variable liegen auf // dem Stack (Adressierung über [ebp] also lea nehmen!) lea eax, local_array[3] // Ok! //Test mov cl, [eax] // cl == 'd' mov byte ptr [eax], 'A' // local_array[] == {'a', 'b', 'c', 'A', 'e'}; } }mfg
-
freeze schrieb:
OK ich habs jetzt so probiert, der fehler ist weg, jedoch schreibt er nix in die variable "text"
std::string text = ""; __asm { . . . mov al, digstr[edx] mov retval, al . . . mov text, ecxjedoch steht nix in text drinnen => die variable text bleibt leer

das funzt so nicht.
damit überschreibst du irgendwelche internen variablen in dem std::string.
du könntest vielleicht 'ne memberfunction des strings aufrufen (push_back oder sowas)...
aber warum asm dafür