أسرع طريقة للحصول على طول سلسلة نصية FastStrLen
#1
السلام عليكم و رحمة الله وبركاته

كنت قد كتبت قبل أيام دالة تقوم بجلب طول سلسلة نصية 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
; 
.. لكن حين تنقيحي لبعض المشاريع ب Olly , اكتشفت أنه توجد طريقة أسهل و أسرع للحصول على الطول

.jpg   lengthasm.jpg (الحجم : 28.22 ك ب / التحميلات : 43)
لو رجعنا للوراء ب 4 بايت من موقع السلسلة سنشاهد طول السلسلة النصية بالهكس .

في هذا المثال :
Length('Sample Text')= $B = 11
الدالة تصبح بالشكل التالي :

PHP كود :
function FastStrLen (s:string):integer;assembler;
asm
 MOV EAX
,DWORD PTR DS :[EAX-4]
end; 
الرد


الردود في هذا الموضوع
أسرع طريقة للحصول على طول سلسلة نصية FastStrLen - بواسطة SMP3 - 24-03-2013, 01:38 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم