Thema: Delphi DynArray beschädigt

Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: DynArray beschädigt

  Alt 17. Feb 2007, 14:00
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;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat