Autor Beitrag
MagicRain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: 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
ausblenden 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...
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: Do 23.07.09 01:18 
Danke das war es wohl fast....nur noch nicht ganz....

ausblenden 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;

ausblenden 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: Do 23.07.09 01:53 
Kannst du vlt mal ein code beispiel zeigen ich bekomme das so nicht hin...bahnhof..:(
ausblenden 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;

so gehts auch net oO????? wirklich ka deswegen frag ich ja :P
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: 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. :P

ich schreib Dir mal, was Du machst, es ist ein Logik-Fehler...

ausblenden 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            // Inhalt von A nach EAX schieben, EAX = A
      mov buff, EAX         // Inhalt von EAX nach Buff schieben, Buff = EAX = A
      mov edx, buff         // Inhalt von Buff nach EDX, EDX = EAX = A = Buff
      add eax,edx           // Addiere EDX und EAX, da EAX und EDX jeweils den Wert von A haben = 2 * A
      mov buff,eax          // nun schiebst Du den Wert von EAX nach BUff, Buff = 2 * A
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Do 23.07.09 07:20 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 23.07.09 07:46 
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 23.07.09 13:45 
user profile iconMagicRain hat folgendes geschrieben Zum zitierten Posting springen:
WinXp Pro
Delphi 7, Delphi 2009

Damit das Konstrukt vom user profile iconBenny Unicode-Fähig wird, musst du das ESI-Register jeweils um 2 erhöhen. Unicode verwendet nämlich pro Zeichen 8, statt wie Ansi 4 Bytes pro Char.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
@@l:
    MOVZX   EDX, BYTE PTR [ESI]
    ADD     EAX, EDX
    INC     ESI // {ADD ESI, 2} 
    DEC     ECX
    JNZ     @@l
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 23.07.09 14:00 
user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMagicRain hat folgendes geschrieben Zum zitierten Posting springen:
WinXp Pro
Delphi 7, Delphi 2009

Damit das Konstrukt vom user profile iconBenny Unicode-Fähig wird, musst du das ESI-Register jeweils um 2 erhöhen.

UND man muss den MOVZX-Befehl mit WORD PTR statt BYTE PTR schreiben ...

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Unicode verwendet nämlich pro Zeichen 8, statt wie Ansi 4 Bytes pro Char.

Ähem!!! So redundant ist nicht mal Unicode!

user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
@@l:
    MOVZX   EDX, WORD PTR [ESI] //Anpassen je nach Delphi-Version; ggf. mit bedingter Compilierung ...
    ADD     EAX, EDX
    ADD     ESI, SizeOf(Char)
    DEC     ECX
    JNZ     @@l

_________________
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 23.07.09 14:15 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ä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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: Do 23.07.09 19:48 
Alles klar DANKE EUCH :)
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: 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. :evil:

_________________
"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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 23.07.09 20:27 
user profile iconHelgeLange hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich ihm hätte die Lösung hinschreiben wollen, hätte ich das gemacht, ich wollte, dass er den Fehler selbst versteht. :evil:

Pardon. Nächste Mal wird wieder drauf geachtet. ;)

@user profile iconMagicRain: Kannst du die Funktionsweise des Algos auch in eigenen Worten beschreiben? :P
MagicRain Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: Do 23.07.09 20:44 
Habe es heute Morgen dann so gelöst...das bissel schlafen tat wohl doch gut :D


Zuletzt bearbeitet von MagicRain am Sa 25.07.09 04:35, insgesamt 1-mal bearbeitet
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 24.07.09 00:17 
Kann mir sogar recht gut vorstellen, welcher Wert das ist :P 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.