![]() |
Re: DynArray beschädigt
Ich habe
Delphi-Quellcode:
umgeschrieben in
MOV [eax+(edx*$04)],ecx
Delphi-Quellcode:
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
MOV [eax+(edx*$04)-$04],ecx
Delphi-Quellcode:
habe und jetzt klappt es :mrgreen: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel:
MOV [eax+(edx*$04)],ecx
|
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. |
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