Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
Delphi 7 Enterprise
|
Re: DynArray beschädigt
17. Feb 2007, 15: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.
|
|
Zitat
|