Hier wird doch wohl keiner auf einer RISC-Kiste testen und mich ins Grübeln kommen lassen wollen

?
Ich dachte mehr an den Aufruf einer Prozedur und den damit notwendigen (???) Einsatzes der Inline-ASM-Unterstützung. Folgende Variante
Code: Alles auswählen
#N = 900000
String.s = "searchinmeeeeeeee3123456123cb1g2348cbnq0webftrqc0n9qwbet691bt4 qböoäöa-asbe0rß1bv634r660qlbdf-asubdpfz10735646vrzpawbwöehbf76v6r9b3807b1p9sbaösejhbfquiowebz7r81bvg5340brqpweöfjkqböwev qöwjerh 1092346r18 4rpuqwzefqhw7e1 34nr7q0 w8 eh7r0q whe7qf0 wnejöasdjfh0q93478zbr1093br4höaowuez f0q7wez0fr13j4u rhqw7e rfqwe7rq0w9e rqh3 er13 4rqpweör v#"
tofind.s = "#"
asctofind.l = Asc(tofind)
ptr.l = @String
laenge.l=Len(String)
Delay(1000)
Time = GetTickCount_()
For I = 0 To #N
!CLD
!MOV ecx,[v_laenge]
!MOV edi,[v_ptr]
!MOV eax,[v_asctofind]
!REPNZ scasb
!JNZ l_notfound
!SUB edi,[v_ptr]
!JMP l_found
notfound: ;wenn nicht gefunden
!XOR edi,edi
found:
!MOV [v_Stelle],edi
Next
Time = GetTickCount_() - Time
strOut.s = "FindChar: " + Str(Time) + " " + Str(Stelle)
MessageRequester("Ergebnis", strOut)
ohne Inline-ASM ist über 3-mal schneller als FindString, und zwar ist es jetzt völlig egal, an welcher Stelle das zu suchende Zeichen steht!
Zur Ehrenrettung von FindString muss aber unbedingt gesagt werden, dass es universieller arbeitet und auch String-Teile (nicht nur 1 Zeichen)
finden muss. Wenn obiger Code auch in einer Prozedur (viel) schneller
wäre als Findstring könnte man überlegen, eben eine Funktion "FindChar"
einzusetzen. Mal sehen...
Mein heißgeliebtes ALIGN brachte übrigens in keiner Variante hier Punkte... Wird wohl inzwischen von den zwischengeschalteten Progs bzw.
BS selbst erledigt.
Gruss
Helle