Autor |
Beitrag |
MagicRain
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Do 23.07.09 00:43
Hallo Leute ich habe leider ein problem hier mal mein code....so exception hab ich killed aber nun ..:S
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button1Click(Sender: TObject); var A, i ,buff : Integer; text : String; begin A := 0; buff := 0; text := edit1.Text; for i := 1 to Length(text) do A := Ord(text[i]); asm MOV EAX, A add eax,eax mov buff, EAX end; Edit2.Text := IntToStr(buff); end; |
Mein fehler....
Also er packt das add nicht in den loop ka wieso....schau hier...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| 00465FE1 |. BA 01000000 MOV EDX,1 00465FE6 |> 8B4D F4 /MOV ECX,DWORD PTR SS:[EBP-C] 00465FE9 |. 0FB74C51 FE |MOVZX ECX,WORD PTR DS:[ECX+EDX*2-2] ;//Ord(text[i]); 00465FEE |. 894D FC |MOV DWORD PTR SS:[EBP-4],ECX ;//mov buff,eax 00465FF1 |. 42 |INC EDX 00465FF2 |. 48 |DEC EAX 00465FF3 |.^ 75 F1 \JNZ SHORT 00465FE6 00465FF5 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00465FF8 |. 01C0 ADD EAX,EAX <<<<<<<<<< da is das add ?? wtf :( |
Ich hoffe jemand weiß was ich falsch gemacht habe und kann mir helfen alles klar bis dann...
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Do 23.07.09 00:56
weil Du den ASM Block nicht mit in die Schleife genommen hast, würde ich mal sagen. Versuch es mal mit Begin und End bei der Schleife...
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Do 23.07.09 01:18
Danke das war es wohl fast....nur noch nicht ganz....
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Button1Click(Sender: TObject); var A, i ,buff : Integer; text : String; begin A := 0; buff := 0; text := edit1.Text; for i := 1 to Length(text) do begin A := Ord(text[i]); asm MOV EAX, A add eax,eax mov buff, EAX end; end; Edit2.Text := IntToStr(buff); end; |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| 00465FE3 |. B9 01000000 MOV ECX,1 00465FE8 |> 8B45 F4 /MOV EAX,DWORD PTR SS:[EBP-C] 00465FEB |. 0FB74448 FE |MOVZX EAX,WORD PTR DS:[EAX+ECX*2-2] 00465FF0 |. 8945 FC |MOV DWORD PTR SS:[EBP-4],EAX 00465FF3 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4] 00465FF6 |. 01C0 |ADD EAX,EAX <<<<<<<<<<<<<< müsste wohl eine zeile höher ?!?!? 00465FF8 |. 8945 F8 |MOV DWORD PTR SS:[EBP-8],EAX 00465FFB |. 41 |INC ECX 00465FFC |. 4A |DEC EDX 00465FFD |.^ 75 E9 \JNZ SHORT 00465FE8 |
Also was hab ich vor das sollte ich euch vlt mal sagen hehe..
ich will einfach jedes ascii char von dem text addieren also zb
Quelltext 1: 2: 3: 4: 5:
| text = hallo hallo = 68 61 6C 6C 6F == 68 + 61 + 6C + 6C + 6F = 210 == 528 <<< valid!
also müsste die schleife jedes zeichen einlesen Ord(text[i]) und addieren ADD EAX,EAX.... |
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Do 23.07.09 01:36
Naja, dazu musst Du aber auch den inhalt von Buff mal zum Addieren benutzen. Du schiebst ja nur den inhalt von A in EAX, addierst dann EAX zu EAX (= 2*EAX) und legst es dann in Buff ab, was den vorhergehenden Wert überschreibt...
Schrteib Dir Buff in EDX oder so und addierst dann EAX mit EDX und scheibst das dann wieder in Buff...
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Do 23.07.09 01:53
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Do 23.07.09 02:56
Ich glaube, Du weisst garnicht, was Du wirklich machst.
Schreib es doch einfach in Delphi, wenn Du kein Assembler kannst.
ich schreib Dir mal, was Du machst, es ist ein Logik-Fehler...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| for i := 1 to Length(text) do begin A := Ord(text[i]); asm MOV EAX, A mov buff, EAX mov edx, buff add eax,edx mov buff,eax end; |
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Do 23.07.09 07:20
Delphi-Quelltext 1: 2: 3:
| buf := 0; for i := 1 to Length(text) do buf := buf + Ord(text[i]); |
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 23.07.09 07:46
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| asm PUSH ESI XOR EAX, EAX MOV ESI, DWORD PTR [Text] TEST ESI, ESI JZ @@e MOV ECX, DWORD PTR [ESI - 4] @@l: MOVZX EDX, BYTE PTR [ESI] ADD EAX, EDX INC ESI DEC ECX JNZ @@l @@e: POP ESI MOV DWORD PTR [Buff], EAX end; |
Schleife ist gleich drin ... Aber wie die Vorredner schon sagten: Ohne ASM-Kenntnisse sollte man das nicht verwenden.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 23.07.09 13:45
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 23.07.09 14:00
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 23.07.09 14:15
BenBE hat folgendes geschrieben : | Ähem!!! So redundant ist nicht mal Unicode! |
Ähhhm... ich meinte natürlich je 16 und 8 Bit respektive 2 oder 1 Byte.
Edit: Tags repariert ...
Zuletzt bearbeitet von Marc. am Do 23.07.09 20:15, insgesamt 7-mal bearbeitet
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Do 23.07.09 19:48
Alles klar DANKE EUCH 
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Do 23.07.09 20:06
@ BenBE & Marc. : Interessant-Faktor 10+, Lernfaktor -2
Wenn ich ihm hätte die Lösung hinschreiben wollen, hätte ich das gemacht, ich wollte, dass er den Fehler selbst versteht. 
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 23.07.09 20:27
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Do 23.07.09 20:44
Habe es heute Morgen dann so gelöst...das bissel schlafen tat wohl doch gut 
Zuletzt bearbeitet von MagicRain am Sa 25.07.09 04:35, insgesamt 1-mal bearbeitet
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Do 23.07.09 22:12
Steht immer nochm im Raum warum du das unbedingt in Assembler haben willst. Meine Variante sollte genau dasselbe machen.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Do 23.07.09 22:15
Hat nun nichts mit dem ADD zu tun hatte nur schon viele befehler auch in Schleifen die in Assembler waren wie ROL und sowas was ich dann irgendwie in Delphi hinbekommen musste..Also alles mehr Lehrn zwecke wollte einfach lernen endlich mit Delphi+ASM zurecht zu kommen und nun klaptt es hehe. danke
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Do 23.07.09 22:57
trotzdem: beschäftige dich erst mal intensiver mit programmieren allgemein.
solche fehler sollten nicht passieren.
und dann auch noch inline asm probieren...
BTW: das XOR EDX,EDX ist redundant--->weg damit
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Do 23.07.09 23:45
Ach.. wenn ich das xor weg nehme läuft das app nicht weil iein shit wert in edx steckt ohne es...inlineasm rockz
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 24.07.09 00:17
Kann mir sogar recht gut vorstellen, welcher Wert das ist  Aber WARUM mischst Du ASM und normalen Source? ENTWEDER man schreibt die gesamte Routine in ASM ODER man lässt es ganz. Mischen ist das schlimmste, was man tun kann. Zumal die Register-Belegungsregeln für gemischten Source mehr als kryptisch sind.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|