16-09-2022, 03:09 PM
SMP3 كتب : [ -> ]
السلام عليكم و رحمة الله وبركاته
كنت قد كتبت قبل أيام دالة تقوم بجلب طول سلسلة نصية FastStrLen
.. لكن حين تنقيحي لبعض المشاريع ب Olly , اكتشفت أنه توجد طريقة أسهل و أسرع للحصول على الطول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;
لو رجعنا للوراء ب 4 بايت من موقع السلسلة سنشاهد طول السلسلة النصية بالهكس .
في هذا المثال :
Length('Sample Text')= $B = 11
الدالة تصبح بالشكل التالي :
function FastStrLen (s:string):integer;assembler; asm MOV EAX,DWORD PTR DS :[EAX-4] end;