AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Assem

Ein Thema von inflames · begonnen am 10. Mär 2014 · letzter Beitrag vom 10. Mär 2014
Antwort Antwort
inflames

Registriert seit: 5. Okt 2011
3 Beiträge
 
#1

Problem mit Assem

  Alt 10. Mär 2014, 11:43
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;
Florian
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Problem mit Assem

  Alt 10. Mär 2014, 12:54
Entweder legst du dw auf ein Register oder du übergibst die 14 direkt. cmp ecx,dword ptr[14]

Sorry, schwachsinn. Ist bei mir auch schon ewig her.

cmp ecx,dword ptr[&dw] Funktioniert.

Variablen musst du per &Variable übergeben.

Geändert von nuclearping (10. Mär 2014 um 12:59 Uhr)
  Mit Zitat antworten Zitat
inflames

Registriert seit: 5. Okt 2011
3 Beiträge
 
#3

AW: Problem mit Assem

  Alt 10. Mär 2014, 13:10
Habe es jetzt mit cmp ecx,14 gelöst.
Jetzt funktionierts
Nach dem Debuggen in D5 hat aussgesehn, als obes nur ne Schleifenvariable wäre.
Vllt kanns einer der sich mehr damit ausskennt bestätigen

PS: Sorry wegen Titel hab's vercheckt ihn zu ergänzen und im nachhinein gehts leider nimmer ihn zu ändern :/
Florian
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Problem mit Assem

  Alt 10. Mär 2014, 13:14
Ja, ecx ist in dem Fall ein Durchlaufszähler und wird am Anfang mit xor ecx, ecx auf 0 gesetzt. Also die Schleife wird nach 15 (0-14) Durchläufen verlassen.
  Mit Zitat antworten Zitat
inflames

Registriert seit: 5. Okt 2011
3 Beiträge
 
#5

AW: Problem mit Assem

  Alt 10. Mär 2014, 13:15
Mit cmp ecx,dword ptr[&dw] funktioniert auch!
Vielen Danke für die Hilfe und die Erklärung!

Schönen Montag noch
Florian
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Problem mit Assem

  Alt 10. Mär 2014, 13:19
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#7

AW: Problem mit Assem

  Alt 10. Mär 2014, 13:32
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.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz