Inline Asm - auf Element in Klasse zugreifen
-
Hey,
Ich benutze Microsoft Visual C++ 2003, und möchte per inline asm auf ein Element einer Klasse zugreifen.
(Beispielsweise auf lpFindFileData->cFileName)
kann mir jemand erklären wie das geht?
vielen dank & lg!
-
class Ding { private: int mBla; public: int bla() { _asm { mov ebx, this // per default in ecx mov eax, [ebx].mBla }; } };
Ding* ding= new Ding; _asm { mov ebx, ding mov eax, [ebx]ding.mBla }
-
hellihjb schrieb:
class Ding { private: int mBla; public: int bla() { _asm { mov ebx, this mov eax, [ebx].mBla }; } };
Der "this"-Zeiger wird per default in ecx uebergeben.
sorry, habe mich vielleicht nicht ganz deutlich augedürckt.
das ganze ist so gemeint:
typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; }WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA; void kk(LPWIN32_FIND_DATA lpFindFileData) { __asm { push lpFindFileData->cFileName ; mir ist klar das das so falsch ist.... - und leider habe ich keine ahnung wie es richtig geht. } }
-
hellihjb schrieb:
class Ding { private: int mBla; public: int bla() { _asm { mov ebx, this mov eax, [ebx].mBla }; } };
Der "this"-Zeiger wird per default in ecx uebergeben.
Warum gehst Du dann den Umweg über ebx und schreibst nicht einfach:
class Ding { private: int mBla; public: int bla() { _asm { mov eax, [ecx].mBla } } };
-
TARGA_ schrieb:
sorry, habe mich vielleicht nicht ganz deutlich augedürckt.
das ganze ist so gemeint:
typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; }WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA; void kk(LPWIN32_FIND_DATA lpFindFileData) { __asm { push lpFindFileData->cFileName ; mir ist klar das das so falsch ist.... - und leider habe ich keine ahnung wie es richtig geht. } }
Gleiches Prinzip:
void kk(LPWIN32_FIND_DATA lpFindFileData) { __asm { mov ebx, lpFindFileData push [ebx]lpFindFileData.cFileName } }
otto8 schrieb:
Warum gehst Du dann den Umweg über ebx und schreibst nicht einfach:
mov eax, [ecx].mBla
Weil auch andere Calling-Conventions gelten koennen.
-
wie simpel es doch eigentlich ist
hehe, dank dir!!!
-
hellihjb schrieb:
otto8 schrieb:
Warum gehst Du dann den Umweg über ebx und schreibst nicht einfach:
mov eax, [ecx].mBla
Weil auch andere Calling-Conventions gelten koennen.
selbst ohne das kann der optimizer vom compiler was anderes in ecx reinschieben. es ist nicht gesagt dass this die ganze zeit in ecx sein wird.