24-03-2013, 01:38 PM
السلام عليكم و رحمة الله وبركاته
كنت قد كتبت قبل أيام دالة تقوم بجلب طول سلسلة نصية FastStrLen
PHP كود :
function FastStrLen(const _Str:String):Integer;assembler;
//---> BY SMP3 <---
asm
XOR EDI,EDI
TEST EAX,EAX
JE @NUll
@Loop:
MOV CL,BYTE PTR [EAX]
{$IFDEF Unicode}
ADD EAX,2
{$ELSE}
INC EAX
{$ENDIF}
INC EDI
TEST CL,CL
JNE @Loop
JMP @FIN
@NUll:
INC EDI
@FIN:
PUSH EDI
POP EAX
DEC EAX
end;
[attachment=2490]
لو رجعنا للوراء ب 4 بايت من موقع السلسلة سنشاهد طول السلسلة النصية بالهكس .
في هذا المثال :
Length('Sample Text')= $B = 11
الدالة تصبح بالشكل التالي :
PHP كود :
function FastStrLen (s:string):integer;assembler;
asm
MOV EAX,DWORD PTR DS :[EAX-4]
end;
