Inline Assembler hilfe !!!
-
Hi Leute,
um mein Programm ein bisschen zu beschleunigen habe
und aus reinem Interesse wollte ich mal Inline-Assembler
ausprobieren und habe das jetzt folgenden Code stehen der
irgendwie nicht klappt ^^#include "stdafx.h" #include <stdio.h> struct test { unsigned int test1; unsigned int test2; unsigned int test3; }; unsigned int counter; struct test array[16384]; int _tmain(int argc, _TCHAR* argv[]) { unsigned int a=1; unsigned int b=0; //int c unsigned int d; unsigned int e=0; do { _asm { add a,2h; a+=2? mov d,0h; d=0 } for(counter = 0; counter < b;counter++) { _asm { ;hier kommt das problem ich will das array einlesen mov eax, array[counter].test1; irgendein blöder fehler mov edx, counter mov eax, array[edx].test1; kein fehler beim compilieren aber klappt irgendwie net } } } while (1 == 1); return 0; }
also wie spreche ich die Arrays im inline-assembler an?
MfG
und danke für jede Hilfe
VB-Veteran
-
Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum MFC (Visual C++) in das Forum Assembler verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
wenn du einen zeiger auf dein array hast...
test *array= new test[500];
...hast du bereits die adresse des arrays und kannst das einfach in ein register laden und darueber auf die elemente zugreifen:
mov edi, array // zeiger auf das erste element des arrays mov eax,[edi].test1 mov ebx,[edi].test2 add edi, size test // zeiger zum naechsten element im array schieben
wenn du keinen zeiger hast, sondern lokale daten,
test array[500];
musst du deren effektive adresse laden
lea edi, array
und kannst danach genauso darauf zugreifen
wenn es dir dabei auf performance ankommt, solltest du generell die ganze loop in assembler machen weil der compiler sonst die meiste zeit damit vergeudet, alle register zu sichern und wiederherzustellen, die in einem kleinen assembler-block veraendert werden.