remi_meier hat geschrieben:@Deeem:
Aso mit dem 'byte' in 'JA byte l_ta_end' gibts bei mir ein 'relative jump out
of range', ohne gehts.
Dann hattest du warscheinlich den Debugger an. Das "byte" war aber auch nur zum testen ob relative jumps benutzt werden, kann man also auch löschen.
remi_meier hat geschrieben:EDIT: Dee
em, es scheint dein Code hätte nen Fehler...
Er kehrt nicht vollständig um (bei mir), schau nochmals nach

Der Code sollte funktionieren. Hab auch noch einen weiteren Versuch dazu gepackt, allerdings ist der nicht schneller.
Code: Alles auswählen
Procedure TurnArrayL2(Buffer.l,laenge.l)
MOV Eax, Buffer
XOR Esi, Esi
MOV Ebx, laenge
SHR Ebx, 2
TA2_begin2:
MOV Ecx, dword[Eax+(Ebx-1)*4]
MOV Edx, dword[Eax+Esi*4]
MOV dword[Eax+Esi*4], Ecx
MOV dword[Eax+(Ebx-1)*4], Edx
INC Esi
DEC Ebx
CMP Esi, Ebx
JA byte l_ta2_end
MOV Ecx, dword[Eax+(Ebx-1)*4]
MOV Edx, dword[Eax+Esi*4]
MOV dword[Eax+Esi*4], Ecx
MOV dword[Eax+(Ebx-1)*4], Edx
INC Esi
DEC Ebx
CMP Esi, Ebx
JA byte l_ta2_end
MOV Ecx, dword[Eax+(Ebx-1)*4]
MOV Edx, dword[Eax+Esi*4]
MOV dword[Eax+Esi*4], Ecx
MOV dword[Eax+(Ebx-1)*4], Edx
INC Esi
DEC Ebx
CMP Esi, Ebx
JA byte l_ta2_end
MOV Ecx, dword[Eax+(Ebx-1)*4]
MOV Edx, dword[Eax+Esi*4]
MOV dword[Eax+Esi*4], Ecx
MOV dword[Eax+(Ebx-1)*4], Edx
INC Esi
DEC Ebx
CMP Esi, Ebx
JBE l_ta2_begin2
TA2_End:
ProcedureReturn
EndProcedure
Procedure TurnArrayL3(Buffer.l,laenge.l)
MOV Eax, Buffer
MOV Edi, laenge
SUB Edi, 4
ADD Edi, Eax
XCHG Edi, Esp
TA3_begin2:
MOV Ecx, dword[Esp]
MOV Edx, dword[Eax]
PUSH Edx
MOV dword[Eax], Ecx
ADD Eax, 4
CMP Eax, Esp
JA byte l_ta3_end
MOV Ecx, dword[Esp]
MOV Edx, dword[Eax]
PUSH Edx
MOV dword[Eax], Ecx
ADD Eax, 4
CMP Eax, Esp
JA byte l_ta3_end
MOV Ecx, dword[Esp]
MOV Edx, dword[Eax]
PUSH Edx
MOV dword[Eax], Ecx
ADD Eax, 4
CMP Eax, Esp
JA byte l_ta3_end
MOV Ecx, dword[Esp]
MOV Edx, dword[Eax]
PUSH Edx
MOV dword[Eax], Ecx
ADD Eax, 4
CMP Eax, Esp
JBE l_ta3_begin2
TA3_End:
MOV Esp, Edi
ProcedureReturn
EndProcedure