Na, dann will ich auch noch mal was beisteuern.
Dürfte um ca. 25 % schneller sein als optimale Pascal-Lösungen
Als gültig werden Strings erkannt, die
a) nur Ziffern enthalten, aber mindestens eine Ziffer
b) als erstes Zeichen ein Vorzeichen haben, dem mindestens eine Ziffer folgt
Delphi-Quellcode:
FUNCTION IsSignedInteger(s:
string):boolean;
asm
test eax,eax
je @Exit
// s=NIL
cmp [eax-4],0
// geändert auf Wunsch des Erstellers
je @Fail
// s hat Länge 0
mov edx,eax
mov ax,[edx]
// AL=erstes Zeichen, AH=zweites Zeichen
add edx,2
cmp al,'
-'
je @HasSign
cmp al,'
+'
jne @NoSign
@HasSign: add ah,$D0
sub ah,$0A
jb @Loop
// Nach Sign folgt Ziffer
@Fail:
xor eax,eax
// Fehler
jmp @Exit
@NoSign: add al,$D0
sub al,$0A
jae @Fail
// erstes Zeichen nicht '0'..'9','-','+'
jmp @Entry
@Loop: mov ax,[edx]
add edx,2
add al,$D0
sub al,$0A
jae @CheckEnd
// nicht '0'..'9'
@Entry: add ah,$D0
sub ah,$0A
jb @Loop
// ist '0'..'9'
sub ah,$D0-$0A
je @True
// Ist 0 Byte (Ende vom String)
@CheckEnd: sub al,$D0-$0A
@True: sete al
@Exit:
end;
[edit=MrSpock]3. ASM Befehl auf Wunsch des Erstellers geändert. Mfg, MrSpock[/edit]