![]() |
Problem mit Assem
Hallo,
ich hab ein kleines Problem, wir steigen grad von Delphi5 auf Delphi 7 um und bei folgender Function bringt er einen "Inline Assembler Syntaxfehler" in der Zeile "cmp ecx,dword ptr[dw]" ich kann leider keine Assembler, vllt könnt Ihr mir da helfen. Vielen Dank im vorraus!
Delphi-Quellcode:
function createAk(var ss:TAllowKeys):TAllowKeys;
var stp: pointer; // stZugr ssp: pointer; // allowkeys dw: dword; // anzahl begin stp:=@stZugr[1]; ssp:=@ssAllk; dw:=14; asm push bp push esi push edi mov edi,stp // stZugr mov esi,ssp // ssAllk mov word ptr[esi],0 // leer xor ecx,ecx @@1: mov eax,esi // ssAllk[0] cmp ecx,8 jl @@2 inc eax // ssAllk[1] @@2: mov ebx,eax // ssAllk xor eax,eax mov al,byte ptr[ebx] // byte->al cmp byte ptr[edi+ecx],'0' // st.offen? jne @@4 mov al,byte ptr[ebx] or eax,edx mov byte ptr[ebx],al @@4: inc ecx // weiter cmp ecx,dword ptr[dw] // 14-st? jge @@e imul edx,2 cmp edx,256 jb @@1 mov edx,1 jmp @@1 @@e: pop edi pop esi pop bp end; result:=ss; end; |
AW: Problem mit Assem
Entweder legst du dw auf ein Register oder du übergibst die 14 direkt.
Delphi-Quellcode:
cmp ecx,dword ptr[14]
Sorry, schwachsinn. Ist bei mir auch schon ewig her. :D
Delphi-Quellcode:
Funktioniert.
cmp ecx,dword ptr[&dw]
Variablen musst du per &Variable übergeben. |
AW: Problem mit Assem
Habe es jetzt mit
Delphi-Quellcode:
gelöst.
cmp ecx,14
Jetzt funktionierts :-D Nach dem Debuggen in D5 hat aussgesehn, als obes nur ne Schleifenvariable wäre. Vllt kanns einer der sich mehr damit ausskennt bestätigen :P PS: Sorry wegen Titel hab's vercheckt ihn zu ergänzen und im nachhinein gehts leider nimmer ihn zu ändern :/ |
AW: Problem mit Assem
Ja, ecx ist in dem Fall ein Durchlaufszähler und wird am Anfang mit
Delphi-Quellcode:
auf 0 gesetzt. Also die Schleife wird nach 15 (0-14) Durchläufen verlassen.
xor ecx, ecx
|
AW: Problem mit Assem
Mit
Delphi-Quellcode:
funktioniert auch!
cmp ecx,dword ptr[&dw]
Vielen Danke für die Hilfe und die Erklärung! Schönen Montag noch :thumb: |
AW: Problem mit Assem
Wobei es sehr sinnvoll ist alle Assemblerquelltexte auch mit purem Delphiquelltext per IFDEF daneben zu schreiben wie es auch in Delphi in der RTL gemacht wird. Denn wenn mal eine Kompilierung auf einer anderen Plattform oder auch nur 64-Bit ansteht, hat man sonst ein Riesenproblem...
Hat man aber eine Pure Pascal Variante, kann man auch einfach, auch in einem Fall wie diesem hier, diese aktivieren und es läuft erst einmal. |
AW: Problem mit Assem
Noch ein Hinweis: Die eigentliche Fehlermeldung rührt daher, das dw eine Assemblerdirektive ist. Wenn Deine Variable zB cnt heißt, kannst Du ohne Probleme cmp ecx,dword ptr[cnt] benutzen. Wenn man mit Assembler arbeitet, sollte man solche Namen wie dw vermeiden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz