Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DynArray beschädigt (https://www.delphipraxis.net/86668-dynarray-beschaedigt.html)

Neutral General 17. Feb 2007 13:15

Re: DynArray beschädigt
 
Ich habe

Delphi-Quellcode:
MOV [eax+(edx*$04)],ecx
umgeschrieben in

Delphi-Quellcode:
MOV [eax+(edx*$04)-$04],ecx
Dann ging es.. Jedoch hatte das Array immer ein paar hundert Einträge zu viel.. dann hab ich rumgespielt und letztendlich die -$04 wieder weggemacht so das ich wieder

Delphi-Quellcode:
MOV [eax+(edx*$04)],ecx
habe und jetzt klappt es :mrgreen: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel:

sirius 17. Feb 2007 14:00

Re: DynArray beschädigt
 
Wie auch immer, aber du machst immernoch Speicherverwaltung innerhalb der Assemblerroutine. Ich würde eher so handeln:
(weis nicht, ob alles stimmt)
Delphi-Quellcode:
procedure KaAsm(a:Pinteger;laenge:integer;start,ziel:integer);
asm
  push eax //a in [ebp-4]
  push edx //laenge in [ebp-8]
  sub esp,8 //etwas platz für lokale Variablen
  push esi
  mov esi,edx //cnt

@beginwhile1:
  test esi,esi
  jz @ende

  mov [ebp-12],0   //c
  mov [ebp-16],ecx //akt

@beginwhile2:
  mov eax,[ebp+8] //Ziel->eax
  sub eax,[ebp-16] //Ziel-akt
  jz @endwhile2

  mov eax,2
  call system.@randint
  sub eax,1     //random=1?
  jnz @else
  inc [ebp-16] //inc akt
  jmp @endif
@else:
  mov eax,[ebp-16]
  sub eax,3
  jg @endif   //if akt>3
  dec [ebp-16] //dec akt
@endif:
  inc [ebp-12] //inc c
  jmp @beginwhile2

@endwhile2:

  mov eax,[ebp-8] //laenge
  sub eax,esi
  mov edx,[ebp-4] //a
  push ecx
  mov ecx,[ebp-12] //c
  add [edx+4*eax],ecx
  pop ecx
  dec esi
  jmp @beginwhile1

@ende:
  mov esp,ebp
  mov esi,[esp-20]
end;

procedure TForm1.Button1Click(Sender: TObject);
var   i:integer;
begin
  setlength(a,5);
  for i:=0 to 4 do a[i]:=0;
  KaAsm(pointer(a),5,1,4);
  for i:=0 to 4 do memo1.lines.add(inttostr(a[i]));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz